# Release v2.19 — Live Daily Bias Follow + XL Scale

## Summary

Armed bias lanes now drive a **live one-side entry gate** (`GsxEffectiveFollowDir`). Signal engines still emit BUY/SELL; bias only filters new entries. Scouter exits are unchanged.

## Bias contract

| Before (v2.18) | After (v2.19) |
|---|---|
| One-shot FollowDir at click | Re-derived from live snap while lane armed |
| NEUT → AUTO (both sides) | NEUT → WAIT (block new entries) |
| Invalid D1 → AUTO | Invalid D1 while armed → WAIT |
| OFVP SOLO could flip after gate | Re-gate after SOLO adjust |
| START wiped FollowDir to AUTO | `GsxBiasOnboardFollowDir` preserves armed side |

## Scale / persistence

- `GSX_SCALE_XLARGE` (50+): engine floor 24, fills floor 6
- Bus freshest cache max 128 canons
- Preset: `deploy/presets/GSignalX_Service_PropDesk_XL.set`
- Soft insurance unchanged: PropRisk + desk EQ guard + Scouter CASH/LOSS

## Tests

- `GSX_Bias_Test.mq5` — NEUT→WAIT, live flip, armed deny opposite side
- `GSX_FollowGate_Test.mq5` — allow matrix + post-SOLO re-gate
- `GSX_Scale_Probe.mq5` — XL floors

## Manual (public, multi-language)

- Cut: `docs/_manual_version.py` → **2.19**
- Chapter: Cloud & Bias Follow teaches live arm + NEUT→WAIT
- Locales: `en` + overlays `it|fr|es|ru|ar|zh` regenerated
- Maintainers: edit `docs/_*.py` → bump version when cutting →  
  `python docs/_gen_premium_manual.py` · `python docs/locales/_gen_locales.py` · `python docs/_test_premium_manual.py`

## Manual soak (desk)

1. Arm Daily on desk → each pair only takes matching `joinDir`
2. Let Daily float through NEUT → no new entries; flip side → new side only
3. Signal clear → both sides again
4. START a pair while Daily armed → still one-sided
5. OFVP SOLO on → opposite SOLO direction denied when bias armed
6. Scout harvest still closes; bias does not flatten
