# v3early shadow lane (exec, 17 Oct, #2912) - built, DRY

- Signal: datajob `v3e-signal` (research-box, /opt/crew/work/exec/v3e/v3e_signal.py). Paper arm A rule: v3 pool, first swap cap <20k, first swap >=20k within 30 min of creation, pool ETH after >=1, locked-code token skipped. Pushes /opt/fm/wl_signals_v3early.jsonl. Stop: touch v3e/OFF. Dry check: `python3 -I v3e_signal.py --dry`.
- Trader: `fmwl@v3early` (fm_wl.py v3early, own db /opt/fm/wl_v3early.db, log wl_v3early.log). No LIVE_V3EARLY file = dry (simulated fills, same gates, sell-sim round trip >=0.8, pool WETH >=1).
- Rules via LANE_OV in fm_wl.py: entry 15 s after trigger on a real next swap, cap <60k; exit 0.6x or 50% of post-entry peak (new trail branch in on_swap), 6 h time stop, no take-profit, pull = exit.
- fm_rug.py: v3early treated like wlink for shadow (pull-pause not enforced without a LIVE file); rug-list/deployer checks stay enforced.
- Backups fm_wl.py/fm_rug.py .bak_exec_1792247300. wlink lanes unchanged until their next restart.
- Open: no signal yet at 21:31 BKK (rare, ~3/day). Feed is on public RPC (drpc 403), so 429s may cost entries; shadow n counts what the lane really got.
- Live: rug_gate stays false. Paper has 60% pulls (0x); the wlink rule "pause after 1 pull" would block a live v3early constantly, so the live rug policy needs a separate decision. Shadow n>=20, mean>=1.2 is the gate.
