# v2ramp replay: corrected fill model (testmgr3, 10 Oct 2026, board #582)
Auditor gap (13.7x vs 7.8x) = tape clock runs 17-38 s ahead of chain time (see tm-v2ramp-gap.md); maths itself reproduces from chain logs. Fix: the replay no longer fills in the same second as the Sync.
New fill model (arm A, v2replay.py): entry = first Sync >= (seed entry Sync + 12 s); exit = first Sync AT/AFTER created+303 s (the old code used the last Sync BEFORE, optimistic); no Sync at exit = 0x; 0.3% fee both ways, constant-product depth for 0.05 WETH.
| fill model | n | mean | capped10 | <1x |
|---|---|---|---|---|
| old (entry +0, last Sync before exit) | 2386 | 3.06 | - | - |
| NEW main, latency 12 s | 2289 | 2.28 | 2.13 | 502 |
| stress, latency 30 s (~tape clock lead) | 2184 | 1.98 | 1.93 | 401 |
Auditor's pairs, 0x2c44 / 0x2ee8 (chain rebuild 7.8 / 5.2): new lat 12 = 11.8 / 4.6; lat 30 = 8.4 / 3.0. Pair 0x4749 = 0.0 (as auditor). Winners shrink 14-40%, as expected for a latency-sensitive ramp.
Losers are counted: 502 of 2289 below 1x, best loss streak 8 (kill rule 10). Top 5 trades = 3.4% of the sum, 35 trades >= 10x, median 2.33x. Rows dropped for no Sync after entry+latency: 142 (6%), not counted as zeros; the stress run drops 247.
Verdict ask: v2ramp holds above the 1.3x kill line even at lat 30 (1.98x). Still open: sellability eth_call on 3 pairs, outside sellers tx.from. Trades: fw/replay/replay-v2ramp-trades.csv.
