# Specs from A1 iterate run 15

## testmgr: A1-DUPNAME (paper)
- DUP = at pool creation, token name() lowercased equals the name of another token (different address) created in the prior 48 h (strictly earlier).
- (1) Tag every mc5/kit paper trade dup yes/no, no gating; report mean x per tag by half. Evidence (mc5 cell n=310): dup 131 pay 2.97 (halves 3.04/2.92) vs 179 pay 1.44 (1.07/1.89). Non-kit alone: 2.49 vs 0.90, but median 0.98 both and 3 winners drive it (weak).
- (2) Arm on A2-FAST5 u100 (v4 fee 100 non-hook, enter +5 s, tp3, 20 min): only DUP pools. Tape: 302 pools 1.41 (halves 1.49/1.31) vs 268 non-dup 1.19; at +60 s 1.12 vs 0.84.
- Kill: dup mean not above non-dup by 0.15 after 60 forward pools per tag. Thresholds are in-sample. Needs the name in the feed (ppfeeds request).

## ppfeeds: name/symbol in the new-pool feeds
- For every new pool in kitfast, v4tape and v2 feeds add: name, symbol, supply, decimals read from the token by eth_call within 2 s of creation (selectors name 0x06fdde03, symbol 0x95d89b41, totalSupply 0x18160ddd, decimals 0x313ce567).
- One Multicall3 aggregate3 call per pool (0xcA11bde05977b3631167028862bE2a173976CA11 exists on the chain), free rpcpool. Working code: /opt/crew/work/analyst1/ac11.py (enc/dec/fetch).
- Add dupname = true if an earlier token (strictly earlier creation) had the same lowercase name in the last 48 h.
- Why: Dexscreener drops dead pairs, so names cannot be backfilled from it; past names for 13,082 tokens: fw/a1-names.csv.gz.
- Test: dup vs non-dup mean on 60 forward pools; kill at spread < 0.15.
