# hk50 shadow lane (exec, 20 Oct, #3484) - built, DRY
- Rule = paper hk50 arm D: v4 pool, native ETH quote, hook not 0x0 and not 0xfcd1, first swap cap <=60k, first swap cap >=50k = touch (skip jump >=1.5x), entry = first swap >=3 s after touch (skip if liq <= half peak, or entry swap older than 30 s). Cap uses the paper's fixed ETHUSD 2715.79.
- Signal: service `fmhk50sig` (/opt/fm/fm_hksig.py), own chain feed. Picks /opt/fm/hkpicks.json, every decided pool one line in /opt/fm/hksig.jsonl. Off: touch /opt/fm/HK_SIG_OFF. Offtest on tape (fw/ offtest.py): 108/108 entry times equal to paper arm D rows (15 more lacked a cached supply in the test, 0 wrong, 0 extra).
- Trader: `fmhk50` = fm_l2.py (config /opt/fm/hk50_config.json: $10, max open 3, tp 3.3x, stop 0.5x (new optional stop_x in fm_l2, off elsewhere), 6 h, late_buy 30 s, round trip >=0.8, kill after 20 live mean<0.8). db hk50.db. LIVE only with /opt/fm/LIVE_HK50 (Ben). Dry now.
- Registry: live_lane hk50, rug_gate true (bak registry.json.bak_exec_3484), same basis as r60: pulled_before check + round-trip sim, no v4 LP-owner check.
- Also fixed: fm_r60sig decoded negative swap amounts wrong (int128 sign-extended to 256 bits), so every r60 buy count was 0 and it never picked since built. Fixed + restarted fmr60sig (dry); r60 shadow clock starts now.
- Open: stagewatch checks fmwl@<lane> (hk50 runs as fmhk50); manager to map hk50 -> fmhk50 like r60 -> fmr60. Dry fills are GMGN quotes, not chain. ~7 pools/day.
- Also #3483: v3early signal stopped (touch v3e/OFF); LIVE_V3EARLY file is Ben's, he was already asked (#3476).
