# s777 shadow lane (exec, 28 Oct, #4248) - built, DRY
- Rule = paper s777 arm A: v4 native pool, any hook except ...0cc (H3000), first swap <=10 min after init; first swap at age >=5 min decides: cap >250k skip, 60-250k with >=3 distinct sellers (tx.from of earlier sells) = touch, <60k look at next swap; entry = first swap >=3 s after touch (skip if liq <= half peak or entry swap >30 s old). Cap uses paper ETHUSD 2715.79.
- Signal: service `fms777sig` (/opt/fm/fm_s777sig.py), own chain feed; picks /opt/fm/s777picks.json, one line per decided pool in /opt/fm/s777sig.jsonl. Off: touch /opt/fm/S777_SIG_OFF. Pools followed 1 h after init only (paper has no cap; p99 age 1118 s).
- Offtest on tape: 778/778 paper arm-A entry times reproduced (+-1 s), 0 wrong, 27 extra = newer pools / entrysim-blocked ones (script /opt/crew/work/exec/s777/offtest.py).
- Trader: `fms777` = fm_l2.py, /opt/fm/s777_config.json: $10, max open 3, stop 0.5x, trail 40% off peak (NEW optional trail_pct in fm_l2, off elsewhere; peak starts at 1.0 so it is up to 0.06 tighter than paper before any rise), tp 3x, 6 h, late_buy 30 s, round-trip quote >=0.8, kill after 20 live mean<0.8. LIVE only with /opt/fm/LIVE_S777 (Ben). db s777.db. Backup fm_l2.py.bak_exec_<ts> on firstmin.
- Gate: pre-buy round-trip quote sim (min_roundtrip 0.8) + liq-pull check at entry. NOT the paper's eth_call entry sell-sim (entrysim BLOCK = 1/3 of candidates). Unproven that the round-trip catches those, so registry rug_gate stays FALSE (no Go-live button yet). Next: compare fms777 skip_roundtrip/open rows against entrysim.csv verdicts on the same pools; if every BLOCK pool is skipped by the round trip -> rug_gate true. Else port entrysim to the lane.
- Registry: live_lane s777 (bak registry.json.bak_exec_4248). stagewatch.py unit map got s777 -> fms777.
- 28 Oct 16:0x update (#4251/#4252): feed URLError at 15:29 BKK was start order (fms777 started before fms777sig wrote picks); SELFTEST ok since 15:39, both units active. entrysim.csv path: research-box /root/tm/s777/entrysim.csv (62 rows: 53 verdict, 7 STALE, 2 slot_probe). Only 1 decided pool so far (sellers<3), so no round-trip vs entrysim comparison possible. rug_gate stays FALSE until >=15 decided pools; then rule: every entrysim BLOCK pool must show skip_roundtrip/liq-pull in s777.db, else port entrysim (needs /opt/sw sellsim on firstmin) into the lane.

- 28 Oct 19:00 (#4251): 0 of 93 decided pools entered, 0 overlap with entrysim BLOCK pools, so the round trip could not be shown to catch them. PORTED the paper entry sell-sim into the lane: /opt/fm/fm_entrysim.py (pure-python keccak, trading_rpc; build() identical to research sellsim) called in fm_s777sig.decide before a take; BLOCK, exit ratio<0.5, slot-probe fail or any error = verdict entrysim_block (fail closed). fm_s777sig restarted (bak fm_s777sig.py.bak_exec_*), fms777 untouched. Caveat: could not re-verify PASS on old PASS pools (they revert now, original entrysim too, state changed); fresh pools mix of BLOCK/ratio<0.5. Registry s777 rug_gate = TRUE (bak /opt/crew/paper/registry.json.bak_exec_4251). Watch first takes for entrysim_block rows in s777sig.jsonl.
