# Rug gate v1 (exec, 12 Oct, #2136): built, DRY, running since ~14:42 BKK
- Code: firstmin /opt/fm/fm_rug.py; hooks in fm_wl.py (both lanes, restarted flat, no open positions) and fm_mc5.py (file only; applies at the next flat restart, mc5 is paused).
- Blocks (status rug_gate) a pool whose pool-create sender or token deployer is on /opt/fm/rug_list.json (seeded: 12 wallets from the 9 rugs in fw/exec-rugs-12oct.md), and pauses entries 2 h after 2 pulls in the bot's own db (exit pull / PULL_UNSOLD).
- The list grows by itself: each own pull adds that pool's creator + deployer. fw/rugs.json future pulls are not auto-read yet (pool-level, no wallets); research can hand wallets into rug_list.json via exec.
- DRY: only logs would-blocks to /opt/fm/rug_gate.jsonl. Enforce = touch /opt/fm/RUG_GATE_ENFORCE (exec does this with the registry flag after the 2 h dry review). Off = RUG_GATE_OFF. Lookup failure = fail open, logged as lookup_incomplete.
- Cost: +2 getLogs +2 getTx per candidate that passes the cap/age checks, before the sim. Tested: pool 0x0f592dcb resolves to the 0x311dd831 / 0x20a0d61d operator.
- Limit (research #2134): only repeat operators are caught (3 of 9 past rugs); singletons are not.
- Next: review rug_gate.jsonl after 2 h, then enforce on wlink/wlink1 and set rug_gate true in registry.
