# A2 idle run 14 (10 Oct 2026): 10 iterations, new lenses
Scripts: /opt/crew/work/analyst2/a0,a1,b1-b6,c1-c3,d1,e1,f1,g1,g2,h1.py (research-box). Universe: u100 = v4 fee-100 unhooked, entry +60 s, tp3, stop 0.5, 4 h, pull-aware, 0.01% fee + 3% slippage per side (same as arm Z). Baseline 0.98 (n=1387).

## READY
**A2-NONCE2** (arm for testmgr). Creator-tx nonce == 2 (fresh wallet that sent exactly 2 txs). Two operator script variants exist: nonce 2 and nonce 3 (all 1235 creation txs are the same 2276-byte multicall to 0x58daec3116aae6d93017baaea7749052e8a04fa7, so calldata, gas and fee do not tell them apart; only the nonce does).
- In-sample (1235 u100 pools): nonce 2 = 1.12 (n=672, 57% pulled, 4.6% reach 3x), nonce >=3 = 0.81 (n=563, 71% pulled, 2.8%). Time split 60/40: 1.12 / 1.13. Halves 1.12 / 1.13 (H2 baseline 0.62 for nonce 3). 9 of 12 days better.
- Forward check (v4tape A1 fee-100 unhooked native-quote pools of 9 Oct, nonce fetched by eth_getTransactionByHash(tx)): nonce 2 reaches 3x in 10 of 29, nonce 3 in 3 of 27 (Fisher p about 0.03; max over the 25 min tape, pulls not modelled).
- Does not carry over: h100 nonces 5-7 flat (1.9-2.5), h3000 nonce 9 (n=85) = same as all.
- Kill: forward mean of nonce-2 arm < arm Z control + 0.1 over 60 trades. Also an AVOID filter for BUSY60/RES60 arms (n2 & (busy|res60) test 1.28 vs 1.30 without: no extra lift there, so use it alone or as a lift on the unfiltered arm Z).
- Needs: nonce of the creation tx at detection. v4tape pools.jsonl has `tx`; ppfeeds can add `nonce` (see request). testmgr can also fetch it itself.

## Iterations
1. SELECTION-BIAS AUDIT (new lens: audit our own process). Assumption: the READY arms' sim means (1.3-1.6) are real. Test: shuffle y across the 1387 u100 pools, search the same grids. BUSY60 grid (12 combos): null best-of-grid never reaches 1.73 (0/1000), null median 1.08, p95 1.30. Generic search over 406 feature subsets (9 features, 5 cutoffs, n>=60): null best median 1.26, p95 1.42, max 1.58; our best generic 1.46. Verdict: BUSY60 (1.60, n=87) clears noise; any arm with sim mean < 1.45 at n~150 (PERBLK 1.34, RES60 1.33-1.46) is within what pure noise finds when you try a few hundred cuts. Judge them on forward data only (kill rules already there). Info for testmgr/auditor.
2. BONDING CURVE -> GRADUATION (new lens: IPO deterministic event). Pons: 265k curves, 1835 graduated (0.7%), graduation near 4.4-5 ETH net raised. Buy when net raised first reaches 0.5/1/2/3/4 ETH, sell at graduation: P(grad)=2.8/4/6/7.9/9.8%, median multiple to graduation 7.3/4.9/2.7/1.7/1.2x, but mean net of 2% fee + 3% slippage 0.84-0.90. The apparent 1.4x bucket (raised within 28 blocks, ~2 s) is a bot-bundle jump nobody can enter: with entry delay 14/60/200/840 blocks (1/4/14/60 s) mean 0.70-0.81, tp 1.5-100x, any dt cut. DISCARD.
3. CREATION-TX METADATA (new: tx calldata, gas, gas price, tx index, nonce; 1235 u100 txs fetched). All calldata identical length and selector, value 0, priority fee 0. Gas used 445969-833353, gas price 20-120 M wei, tx index 1-89: quartiles flat or within 1-2 sigma (gas price top half 1.10 vs 0.94). Nonce is the one real field (see READY). MATURE -> arm + ppfeeds request.
4. KIT FRESHNESS = META AT FACTORY LEVEL (e1-runners.csv, kits first seen after 1 Aug, >=15 pools, n=16 kits). Real runners (first $300k != first $3M) in first 3 days of a kit 18.4% (n=293) vs later 16.3% (n=563). Fresh-kit boost does not exist. Runner supply is c873e1 (v4) + bd3881 + 0a493d (v3), they hold 60%+ of runners every week; new kits appear every 1-2 weeks (89a27d 6 Aug, ab0ec0 30 Aug, 0e81be 25 Sep, 89885b 1 Oct) and mostly stay small. DISCARD.
5. OPERATOR PULL HAZARD vs multiple (z5 pulltime, 1387 u100). Pull age after +60 s entry p10/p25/p50/p75/p90: 31/100/311/1428/3637 s. Median max multiple before pull 1.89x, median last multiple before pull 1.44x (pulls follow a drift down, but a trailing stop was already killed). P(pulled before reaching the next band | reached band): 18% at 1x, 20% at 1.2x, 27% at 1.5x, 30% at 2x, 37% at 3x, 56% at 5x (pulled while max in 5-10x, of those that reached 5x). Hazard rises with the multiple: supports tp <= 5 and scaling out; no new rule. DISCARD (confirms tp3-5).
6. SIZING / RUIN (Kelly lens, answers Ben's 15-loss day). Bootstrap 200 trades from sim y (in-sample, optimistic): base u100 any size < 0 growth; BUSY60 (mean 1.60, 39% zero) f=3% of bankroll: 5% worst final 10.9x, drawdown p95 27%; RES60 (1.33, 51% zero) f=3%: p5 2.3x, dd p95 40%. Shrink the edge to the null-noise level (about 1.26 for anything mined) and f above 2% is not worth it. Info: cap each trade at 2-3% of the pot until forward data exists.
7. NONCE ROBUSTNESS (see READY). Interaction: n2&busy 33 train/test 1.23/2.18, so nonce is mostly independent of the activity filters (corr small).
8. TOKEN TRANSFER GRAPH, first 1000 blocks (about 70 s) after creation, 238 random u100 pools via eth_getLogs (new data: holder graph). Transfers per pool 7-240; top quartile of transfer count 1.49, distinct recipients top quartile 1.55 (= the busy60 signal again). Distinct recipients per transfer (low = same wallets churning): quartiles 0.79 / 0.93 / 1.32 / 1.16; among busy pools (>=66 transfers, n=121) high ratio 1.42 vs low 0.79 (n=60 each). Top-recipient share: non-monotone. Not a pure new signal on this sample (post-hoc split, about 8 looks). MATURE -> dataeng request for all pools.
9. FORWARD CHECK of A2 filters on live v4tape (fee-100 unhooked, native quote, 56 pools with nonce 2/3 and a 60 s entry): in READY (nonce). Time-of-day and others not repeated.
10. SYNTHESIS (60/40 time split, 1235 pools): n2 train 1.12 / test 1.13 (stable); busy 1.23/2.27 (n=48/31); res60 1.49/1.17 (decays); busy|res60 1.44/1.30; n2&(busy|res60) 1.49/1.28. Nonce is the only filter whose train and test agree. Verdict: one arm to testmgr (NONCE2), one field request (ppfeeds), one dataset request (dataeng).
