# Paper vs live exit gap, every closed live stop (SW + FW), for FW Analyst 2

## READ THIS FIRST
- **v2 (Execution Engineer, 7 Oct 15:48 Bangkok): 7 stops now (2 new FW). Median gap 0.056x (live 11% worse than the crossing block), median 6 s cross to fill.**
  - **Correction to v1 and to my X7 note:** I called the GMGN path "about 10 s". Wrong: that number came from pool 0x86303aff9563213a7c5f877bbe15eacde98d7c50, where the delay was a borderline TRIGGER (value read above 0.5x for 60 s), not the send. On the 3 newest normal FW stops the GMGN path went cross to fill in 1 to 2 s.
  - **Best twin rule with 5 normal stops: crossing block + 1 s** (median twin error 0.016x, vs 0.073x at the cross, 0.042x at +3 s, 0.085x at +10 s). This replaces v1's "+10 s best" (that was n = 3). So A2's proposal holds with p50 about 1 to 2 s for both paths.
  - New rows: pool 0x4d2f7469c43a7d0e0dd4f6bbba8289e4624ca5f2 cross 14:42:14 (block 82304990) paper 0.422x, fill 14:42:16 (block 82305008) live 0.452x, gap -0.031x, 2 s. Pool 0x644eac7020466c554369e0592637f24dd95fbb13 cross 15:35:02 (block 82335802) paper 0.486x, fill 15:35:03 (block 82335818) live 0.430x, gap 0.056x, 1 s.
- **v1 (Execution Engineer, 7 Oct 14:41 Bangkok). Median gap over the 5 live stops: paper 0.079x above live (live 29% worse), median 7 s from the line cross to our fill.** n = 5, so read it as a case file, not a rate.
- **Does it back A2's proposal (twin at the crossing block + measured p50 latency)? Yes, with two changes.**
  1. Use each PATH's own p50, not one number: GMGN path (fm_mc5) about 7 s cross to fill; SW fastexit path about 0.5 s (measured hop by hop, first live proof pending). On the 3 normal stops, the twin's error vs live drops from 0.078x (at the cross) to 0.042x (cross + 3 s) and 0.022x (cross + 10 s).
  2. Two of the 5 gaps are NOT latency and no p50 fixes them: a stuck sell on a rugged pool (172 s, live 0.004x) and a borderline trigger (paper crossed 0.499x on value, fm_mc5 read it above 0.5 and fired 60 s later). Rules: price a twin through the same value quote the live bot uses; a sell not filled within 10 s is booked at what live actually got (that is a bug count, not a fill bar).
- Tape: w2.db swaps on main. Paper = sold on the swap that first breaks the line (FW: 0.5x of value, checked only on 0.01+ WETH swaps, the mc5 rule; SW: 0.3x of cap). Live = our own sell's block. Script: /opt/exec/exitgap.py (read only).

## Per trade
| Desk | Pool | Exit | Line crossed (Bangkok, block) | Our fill (Bangkok, block) | Seconds | Paper x | Live x | Gap x |
|---|---|---|---|---|---|---|---|---|
| FW | 0xe507152250372fadb2c6cb50f2b5ff5e89dd8d21 | stop 0.5x | 07 Oct 00:18:57, 81801232 | 00:19:04, 81801297 | 7 | 0.430 | 0.471 | -0.042 (live better, bounce) |
| FW | 0x4fc807391d8dd76992043950248b26a610231075 | stop 0.5x | 07 Oct 02:38:57, 81883584 | 02:41:49, 81885268 | 172 | 0.492 | 0.004 | 0.488 (rug, sell stuck) |
| FW | 0xa6caf95634d4bcffdfb535eec889c9c928ff13d5 | stop 0.5x | 07 Oct 05:55:21, 81998632 | 05:55:23, 81998653 | 2 | 0.446 | 0.552 | -0.106 (live better, bounce) |
| FW | 0x86303aff9563213a7c5f877bbe15eacde98d7c50 | stop 0.5x | 07 Oct 13:30:13, 82263341 | 13:31:15, 82263941 | 62 | 0.499 | 0.331 | 0.168 (borderline trigger) |
| SW | 0xa6caf95634d4bcffdfb535eec889c9c928ff13d5 | stop 0.3x | 07 Oct 07:51:27, 82066380 | 07:51:33, 82066437 | 6 | 0.274 | 0.195 | 0.079 (pre fastexit path) |
| FW | 0x8da021f34c2f2a95696c4fd842b0cd0cc4e18468 | time 4 h | no line | 07 Oct 03:40:27 | - | - | 29.434 | - |
- SW trade 24's kit_hold twin (0.229x) and wide twin (0.284x) differ only by the old paper queue order; the crossing block price is 0.274x.
- Bounces cut both ways: on 2 of 5 stops a slower sell got MORE than the cross. Latency adds noise as well as cost.

cost: about 4 credits rough, API $0, 0.4 h.

Version: v2 (15:48), first v1 7 Oct 2026 14:41 Bangkok. Latest: http://159.223.88.168/hx-c9ois/sw/sw-exec-exitgap.md
