# wlink / wlink1 live lanes (exec, 12 Oct, board #2112) - BUILT, DRY MODE, nothing live
**Parts**
- research-box datajob `wl-signal` (/opt/crew/work/exec/wl/wl_signal.py): same rule as the two paper tests (fee-100 pool, K-th winner-linked wallet buys within 180 s of first swap; wlink K=3 / infra>=30, wlink1 K=1 / infra>=10). Winner set rebuilt every 15 min (7314 / 7050 wallets, matches the paper tests), fresh pools scanned every 2 s from v3live.db (3 s feed lag). Appends one line per (lane,pool) and pushes /opt/fm/wl_signals.jsonl to firstmin. Off switch: file wl/OFF next to the script.
- firstmin /opt/fm/fm_wl.py, services `fmwl@wlink` and `fmwl@wlink1` (one process and one DB each: /opt/fm/wl_<lane>.db). Imports fm_mc5 for pool math / simv3 / swap / close; fmmc5 itself is untouched and was not restarted.

**Entry**: sig_t+10 s (skipped if older than +70 s), cap < $150k, no pull, pool WETH >= 0.1, buy+sell eth_call round trip through the real pool >= 0.8, lane max open 2, gas reserve, $10 (size_usd in /opt/fm/wl_config.json).
**Exit**: stop 0.5x, take profit 5x, pull, 4 h time stop, unsold retry (all mc5 code). **Kill**: a lane removes its own LIVE file after 20 live closed trades with mean < 0.8x.
**Switch (Ben only)**: `touch /opt/fm/LIVE_WLINK` and/or `/opt/fm/LIVE_WLINK1`. No file = dry (simulated fills, same gates and exits, mode 'watch'). `/opt/fm/WL_OFF` = no new entries. Boards: /opt/fm_pp/wl_<lane>.txt.
**Tested**: synthetic signals on real pools, test dir only: SIGNAL -> history rebuilt -> gates -> watch_buy (round trip 1.000) -> time-stop sell logged; dead pools skip as pulled_before / dust. Real fills not tested (no LIVE file).
**Known limits**: both lanes can hold the same token (max 4 open, $40). wlink1 fires before wlink on nearly every wlink pool, so the lanes overlap heavily. Stop/tp use the one-range quick value (as fmmc5 does for small sizes).
