# round60 live lane "r60" (exec, 16 Oct, #2645): built, DRY

Rule = A1-ROUND60 arm Q (fw/tm-round60.md): new v4 pool, fee 100, hooks 0x0, ETH/WETH quote. At first swap +63 s: >=3 buys (>=0.0005 ETH) in first 60 s, >=50% of them multiples of 0.01 ETH, net ETH bought >=0.5, liquidity not under half its peak. Buy $10, tp 5x, no stop, 20 min time exit (pull = unsold, booked 0).

## Parts (firstmin)
- `fm_r60sig.py` (service fmr60sig): own chain feed (PoolManager Initialize + Swap logs, 2 s poll, 2 RPC calls per poll through trading_rpc). The v4tape the paper test uses is 10-35 min late right now, so it cannot drive a live buy. Writes /opt/fm/r60picks.json (fm_l2 pick format) and one line per evaluated pool to /opt/fm/r60sig.jsonl (taken or why not). Off: touch /opt/fm/R60_SIG_OFF.
- `fmr60` = fm_l2.py (the fml2 engine: local Sim.sol quote through PoolManager, buy+sell round trip >= 0.7, GMGN swap, retry/sell-fail/kill logic) with its own config /opt/fm/r60_config.json (tp 5, dead exit off, hold 1200 s, max open 3, kill after 20 live trades mean < 0.8), db r60.db, log r60.log, feed file:///opt/fm/r60picks.json. fm_l2.py change: FEED from env L2FEED (default unchanged, backup fm_l2.py.bak_exec_*). fml2/fml2v not restarted.
- LIVE only if /opt/fm/LIVE_R60 exists (benbot golive:r60 creates it, generic). No file = dry (GMGN quotes as fills).
- Registry: round60 live_lane "r60", rug_gate false.

## Check
Offline: the signal function reproduces 63/63 of testmgr2's forward arm-Q pools from the tape (offtest.py). Live feed: services active, first evaluated pool pending (fee-100 unhooked pools arrive ~1 per 20-60 min).

## Open / for others
1. rug_gate stays false. A silent pull is how 37 of 63 paper exits ended (counted 0x). A pre-buy LP-owner check is not built for v4 pools; research should show what a pull-history/LP rule blocks on round60 before exec sets it.
2. stagewatch checks `fmwl@<lane>` is-active; r60 runs as fmr60 + fmr60sig, so once LIVE_R60 exists stagewatch will raise a false "service down" URGENT. Manager: map lane r60 to fmr60.
3. fmr60 uses wallet 2 (hardcoded in fm_l2.py, same as fml2; fml2 is not live). If fml2 ever goes live too they share one wallet. Ben decides funding.
4. Dry fills are GMGN quotes, not the chain; "shadow n>=20 mean>=1.2" needs ~4 days at 5 pools/day.
