# ppfeeds 10 Oct run: #460 #461 #466 #470

## #460 dRPC@kookwatch (laneradar/tracker.log, 18 lines)
Cause: NOT a rate limit. My #425 edit (02:48 UTC) put `import rpcpool` before sys.path had /opt/common -> ModuleNotFoundError traceback on every 5-min run, and the traceback prints the comment line containing "dRPC" + "429", which ratewatch counts. Tracker priced nothing 02:48-03:38 UTC.
Fix: path insert before the import (tracker.py, bak .bak-460). Tracker runs again (03:40 priced 795 of 4759 due; backlog from the outage + 200 s budget, drains over the next passes; steady state ~460 calls/run). Remaining "relay/public HTTP 429" lines in tracker.log are the backlog burst at 1 batch/s; check next hour, if they persist raise the gap.
## #461 RPC (public)@research-box (bundle.log 15)
Cause: bundle.py runs 6 threads that each call rpcpool with no shared pace -> bursts hit the public node/relay (429). Fix at the cause: one shared pace (0.4 s per request across all threads) in rpcb() (bundle.py, bak .bak-461). ops.log line was ops' own one-off note.
## #466 scripted/wash flags
New service v4flags (research-box /opt/sw/v4flags/v4flags.py, systemd, guard entry in feedguard.py bak .bak-466). Reads v4tape swaps (A1, H3000, USD classes), one row per pool when its first swap is 60 s old -> /opt/sw/v4tape/flags.jsonl, mirror a1pull@v4flags -> fw/a1feed/v4flags.jsonl.
Fields: n60, n_buys60, buyers60, top_buy_share60, scripted (top tx_from share of buys >= 0.9 AND buyers <= 12), wash_share60, wash (same-block same-tx_from buy+sell share >= 0.3), label ('stable-fee0-wash' for USD-class fee 0). buy = token leaves the pool. Consumers should also require n_buys60 >= 3 for "scripted" (1 buy = share 1.0 trivially).
Replay (r6usd, 8,707 pools with >=5 swaps, sender from v4sender.db; `v4flags.py replay DB OUT`): scripted 3,088 (35%); of 1,184 pools with >=200 swaps 301 scripted. Wash in the FIRST 60 s catches only 12 of 188 big fee-0 pools: loops build after 60 s, so use label=stable-fee0-wash (fee 0) for those, flags.wash only as extra. r6weth replay not run (2.4 GB db, time).
## #470 venue label
venuelabel.py (cron 00:30 UTC research-box, before the 00:41 review) takes e1x-runners.csv, one label per TOKEN from its highest-volume pool, fee-0 USDG/SUSD best pool = stable-fee0-wash -> tokvenue.json copied to main /opt/review/tokvenue.json. review.py (bak .bak-470) uses it instead of runtrack launchpad, and no longer lists stable-fee0-wash runners as misses. Test: PONS -> stable-fee0-wash. Limit: tokens born after the last e1x refresh keep the old label until ppdata refreshes e1x (weekly).
