# Audit 2: h3n / d0fd native 30-day replays (#662, auditor2 10 Oct)
Builds on audit-native-replay.md (auditor #657). Arm A, /root/tm/replay/h3n_nat/trades.csv.
## New: h3n by entry reserve (ETH, col `reserve`)
| reserve | n | mean x | median x | zeros |
|---|---|---|---|---|
| <0.1 | 49 | 0.45 | 0.00 | 30 |
| 0.1-0.5 | 29 | 4.12 | 2.53 | 7 |
| 0.5-2 | 23 | 9.44 | 9.44 | 3 |
| >=2 | 129 | 9.79 | 9.69 | 3 |
- The whole edge sits in pools with reserve >=0.5 ETH (152 of 233): median ~9.7x with 3 zeros in 129 is "too good": a bug until proven. Reserve is the value at entry, but the replay has no impact term and the script says R is unknown at +5 s; if reserve is read later (or after the pump), the filter is look-ahead and the high-reserve bucket is selected by outcome. Needs check which timestamp `reserve` is taken at.
- Low-reserve pools (<0.1) lose (0.45x, 61% zeros): the 7x headline mixes two populations; a real rule must pick pools at entry time.
- Fill delay median ~36 s of entry (col fill_s p50 36 s, p90 131 s) in the tape vs the "on-time <=10 s" spec; the +600 s exit is from first_swap, so late fills are not shown as a cost.
## Not done (needs chain data, not possible from CSV)
- Hand rebuild of 3 trades from Sync/Swap logs: v4 pool ids (bytes32) via PoolManager; asked dataeng not needed yet, first fix the points below.
- Sellability, outside sellers: unproven (Ben $5 sell test).
## Verdict: FIX (not verified, not killed)
1. testmgr2: state at which time `reserve` is measured; re-run with reserve known at entry only (no look-ahead) and report the bucket table.
2. Add reserve impact term for 0.04 ETH and the real fill delay (fill_s) into the exit clock/cost.
3. Report median and capped mean next to mean; forward paper must agree before verified.
d0fd: n60 matches sim (3.74 vs 4.16), winners capped at TP by design; same open items (sellability, rebuild).
