The decisive verdict on the 2026-07-08→07-10 crypto_5m_algo (crypto_shortterm_latency_test) loss: on 100% real CLOB-label coverage (4857/4862 fired windows) the loss is a FILL problem — adverse selection at execution — NOT a bad signal. At a clean emit-ask fill the signal is +3.68¢/share (77.1% real-signal-win, stable ~77%/day, no collapse), yet live fills realized −3.87¢/share (70.8% fill-win, −$641 on 558 fills), and the unfilled no-match tail would have won 84.9% vs 70.8% filled — +14.1pt in every asset. The edge lives in the winners that reprice above our limit before we fill. Andras dried all live lanes to dry_run the same day.
Provenance — single-session, read-only, un-peer-reviewed
This is a single-session, read-only decomposition by the main agent (2026-07-10). All numbers are read-only
duckdb→Postgres pulls against the live shared projectmkofmdtdldxgmmolxxhcjoined to ACTUAL CLOB resolution labels (the market’s realized winner), notresolved_up. Not peer-reviewed, no teammate cross-check. The live-state change (drying the lanes) is a real config action by Andras via @deploy; the migration0011it references is committed on a worktree branch, NOT applied live. Treat the direction (FILL adverse selection, not signal) as strongly evidenced and exact magnitudes as this-session estimates.
For Agents — the verdict, the correction, the state change
VERDICT: the 07-08→07-10 loss is ADVERSE SELECTION AT FILL, not a bad signal. Signal ceiling (all fires at emit-ask, real labels) +3.68¢/share / 77.1% win, stable ~77%/day; realized on live fills −3.87¢/share / 70.8% win / −$641 on 558 fills. Discriminator: the windows we fail to fill (FAK no-match) would have won 84.9% vs 70.8% on the ones we fill — +14.1pt, and positive in EVERY asset (btc +20.6, eth +17.4, sol +14.2, xrp +8.4, doge +12.0) = textbook adverse selection. The +EV lives in the UNFILLED tail (winners that reprice above our limit before we fill).
- KEY CORRECTION to prior canon: the ~50%/day FAK no-matches are NOT “the EV guard correctly refusing −EV trades” (as the 2026-07-09 FAK order-type verdict framed them) — they are the +EV winners (84.9%) we MISS because the winning-side ask runs away (latency). Same mechanism (ask reprices above the limit), opposite sign: a cost of missing winners, not a benefit of dodging losers.
- Only lever = fill-capture (cut time-to-fill to catch the winning tail). NOT signal, NOT depth, NOT size — and NOT pricing (entry slippage is ~0.08¢, negligible; the loss is purely adverse selection, ~zero pricing component). Caveat: on the filled subset the at-ask ceiling is already ~−1.9¢, so the +EV is almost entirely in the unfilled tail (thin / latency-locked; chasing it up was a prior NO-GO — don’t-chase).
- LIVE-STATE CHANGE (2026-07-10): Andras dried ALL live crypto_5m_algo lanes (task to @deploy, babylon
pmv2#1187): the 7 live lanes →dry_run; the other 5 were already off. Reason: all 8 fill-bearing lanes are −4.6 to −18.1¢/share on real labels (migration0011). Reversible — re-arm lane-by-lane when a lane’s real edge crosses +EV.- Memory pointers: this note is the canonical
loss-is-adverse-selection-at-fillanchor; reinforces onchain-label-overstates-traded-winrate; explains the sibling depth-aware-sizing-nogo.
The decomposition — where the +EV signal goes at fill
flowchart TD S["<b>SIGNAL CEILING</b><br/>all fires @ emit-ask, real labels<br/><b>+3.68¢/share · 77.1% win</b><br/>stable ~77%/day, no collapse<br/><i>the signal is +EV at a clean fill</i>"] --> SPLIT{"did the FAK<br/>order fill?"} SPLIT -->|"NO-MATCH<br/>(~50%/day)"| U["<b>UNFILLED tail</b><br/><b>would have won 84.9%</b><br/>winning-side ask ran away<br/><i>the +EV lives HERE</i>"] SPLIT -->|"FILLED<br/>(558 fills)"| F["<b>FILLED subset</b><br/>70.8% win · at-ask ceiling ~−1.9¢<br/>realized net-fee <b>−3.87¢/share</b><br/><b>−$641</b> · slippage ~0.08¢ (negligible)<br/><i>adversely selected</i>"] U --> D["<b>DISCRIMINATOR</b><br/>unfilled 84.9% − filled 70.8% = <b>+14.1pt</b><br/>positive in EVERY asset<br/>(btc+20.6 eth+17.4 sol+14.2 xrp+8.4 doge+12.0)"] F --> D D --> V["<b>VERDICT: FILL adverse selection,<br/>NOT a bad signal</b><br/>only lever = fill-capture<br/>(not signal / depth / size)"] style S fill:#264653,stroke:#2a9d8f,color:#fff style U fill:#264653,stroke:#2a9d8f,color:#fff style F fill:#3d2020,stroke:#c1666b,color:#fff style V fill:#3d2020,stroke:#c1666b,color:#fff
Verdict
The recent loss is not a signalling failure and not a depth/size problem — it is adverse selection at the fill. With 100% real CLOB-label coverage (4857 / 4862 fired windows) the signal, priced at a clean emit-ask fill, is comfortably +EV (+3.68¢/share, 77.1% win) and stable day-over-day; the live book only realizes −3.87¢/share because the fills we get are systematically the losers and the winners run away before we fill them. This is the systematic, traded-label confirmation of the btc-up adverse-fill signature and the sharp end of the sibling 3-day-slide loss investigation.
The decomposition (100% real CLOB coverage)
All three views are scored on ACTUAL CLOB resolution labels over the fired-window population (4857/4862 covered):
| View | Basis | Per-share | Win rate | Note |
|---|---|---|---|---|
| SIGNAL CEILING | all fires priced at the emit-ask | +3.68¢ | 77.1% | signal is +EV at a clean fill; stable ~77%/day, no collapse. Full 07-04→now: +4.46¢ / 78%. |
| REALIZED | live fills, net of fee | −3.87¢ | 70.8% | −$641 on 558 fills — the money actually at risk. |
| DISCRIMINATOR | unfilled (no-match) vs filled | — | 84.9% vs 70.8% | +14.1pt gap — the unfilled winners are the +EV we miss. |
The ~7.5¢/share gap between the +3.68¢ ceiling and the −3.87¢ realized is almost entirely adverse win-rate selection — entry price-slippage is negligible (~0.08¢, avg fill 0.7115 vs 0.7108 emit-ask, n=1252 live fills 07-08→10). The loss has ~zero pricing component: the signal is doing its job, the execution layer selects the wrong outcomes (not worse prices).
The discriminator — adverse selection in every asset
The windows we fail to fill (FAK no-match) would have won 84.9% vs 70.8% on the ones we do fill. That +14.1pt gap is positive in every single asset — the hallmark of adverse selection, not noise:
| Asset | Unfilled − filled win-rate gap |
|---|---|
| btc | +20.6pt |
| eth | +17.4pt |
| sol | +14.2pt |
| xrp | +8.4pt |
| doge | +12.0pt |
| all | +14.1pt |
Supporting detail:
- Price slippage is negligible (~0.08¢): average realized fill 0.7115 vs the 0.7108 emit-ask (n=1252 live fills 07-08→10) — we do not pay up meaningfully; the loss is purely adverse selection, ~zero pricing component. (An earlier read of this note misattributed ~2¢ here; verified read-only, that was a win-rate/basis gap between the model at-ask ceiling and realized, not price — corrected 2026-07-10.)
- Near-tie fraction is stable at ~38% and does NOT drive the loss (consistent with the loss investigation’s negative control — 07-05 had the most near-ties yet was the most profitable day).
- DOWN lanes lead the loss: **btc-down −162, doge-down −459 of the −$641) — the down side is where the winning-side ask runs away hardest, matching the DOWN-worse reprice finding.
For Agents — where the edge actually is
The +EV is in the UNFILLED tail: the winners reprice above our break-even limit before the FAK matches, so we take the losers and miss the winners. The signal ceiling being +3.68¢ over all fires does not mean the fills are +EV — see the caveat below.
KEY correction to prior canon — the FAK no-matches are missed winners, not dodged losers
The 2026-07-09 order-type FAK verdict framed the ~50%/day FAK no-match refusals as “the EV guard working” — 90.5% price-refusals where the repriced ask sat avg +5.4¢ above the break-even ceiling, i.e. −EV trades the ceiling correctly declined. This decomposition corrects that interpretation:
- On real CLOB labels, the unfilled no-match windows would have won 84.9% — they are disproportionately the +EV WINNERS, not −EV trades worth dodging.
- The mechanism is unchanged (the winning-side ask reprices above our limit within the last seconds — a latency-conversion loss); what flips is the sign of its value: it is a cost of missing winners, not a benefit of dodging losers.
- This is the traded-label resolution of the tension the loss investigation already flagged: the FAK verdict’s “repriced fills win 87–88% ≈ population, no adverse selection” rested on the on-chain (optimistic) label; on the real label the filled subset is adversely selected and the missed tail is where the win rate lives.
Do not rewrite the FAK verdict — cross-link the correction
The crypto-shortterm-order-type-fak-verdict-2026-07-09 note’s operational conclusion still stands (do NOT switch order type to uncapped market/FOK or resting GTC — those are strictly worse). What is corrected is its characterisation of the no-match tail as costless EV-guard refusals. A forward-pointer callout has been added to that note flagging this correction; its analysis and verdict body are left intact.
What this ties together
This one decomposition explains three of the day’s other findings as a single story:
- Why depth-aware sizing was a NO-GO (crypto-shortterm-depth-aware-sizing-nogo-2026-07-10) — it targets depth-reach, but the problem is winner-capture. Even a passing depth-sizing gate would not have caught the winners that reprice out of reach; it was the wrong lever (and the configs that beat 1× only sized up, adding exposure into exactly this adverse-fill regime).
- Why the two extra wallets were exonerated — the 07-09 4-wallet window (levi/gyula) was a regime/exposure amplifier, not a defect; it doubled exposure into a correlated down-side loss but is not the cause. The fill mechanics were the same on 2 wallets, and 07-10 kept bleeding after they were pulled.
- That the signal is healthy — 77.1% real-signal-win, stable ~77%/day with no collapse, +4.46¢/78% over the full 07-04→now window. Do not “fix the model.”
The only lever — fill-capture (and why it is hard)
The only lever that touches the real loss is fill-capture: cut time-to-fill to catch the winning tail. It is not signal, not depth, not size — and not pricing: entry slippage is negligible (~0.08¢, fill 0.7115 vs 0.7108 ask, n=1252), so there is nothing to recover by pricing fills better; the loss is purely adverse selection.
The caveat that makes this hard — the +EV is in the unfilled tail
On the filled subset, the at-ask ceiling is already ~−1.9¢/share — the windows we fill are adversely selected even at the ask. So the +EV is almost entirely in the UNFILLED tail, which is thin and latency-locked (the winning-side ask has already run away). You cannot recover it by pricing the fills you already get better, and chasing the tail up was itself a prior NO-GO (don’t chase — the break-even limit already climbs into reprices). Winning here means being faster to the winning-side ask, not paying more — the sub-second fire-evaluation / latency-conversion lane, not order type, selector, or clip shape.
Live-state change — all lanes dried to dry_run (2026-07-10)
Andras dried ALL live crypto_5m_algo lanes on 2026-07-10 (task to @deploy, babylon pmv2 #1187). The 7 live lanes were set to dry_run; the other 5 were already off — so no crypto lane is placing real orders:
| Lane | New state |
|---|---|
| btc-down | → dry_run |
| eth-up | → dry_run |
| eth-down | → dry_run |
| sol-up | → dry_run |
| xrp-down | → dry_run |
| doge-up | → dry_run |
| doge-down | → dry_run |
| (other 5 lanes) | already off |
- Reason: all 8 fill-bearing lanes are −4.6 to −18.1¢/share on real labels (per migration
0011’s real-edge view). Every lane that is actually filling is losing money at the fill. - Reversible: re-arm lane-by-lane when a lane’s real edge crosses +EV — not a permanent kill.
- Monitoring while dark: the observe-only [[crypto-shortterm-depth-aware-sizing-nogo-2026-07-10|
depthwatch]] shadow analyzer plus dry fires scored on real CLOB labels keep measuring each lane’s real edge so re-arm decisions are data-gated.
This is the daily-loss backstop the system structurally lacked (finding 7 — caps are dead code), applied manually: dry everything, watch the real-label edge, re-arm on evidence.
Migration 0011 — real-edge lane health (committed, NOT applied)
To make the re-arm decision measurable, migration 0011 adds real-edge columns to crypto_lane_health:
edge_per_share_cents,filled_shares_24h,avg_fill_px— the per-lane realized, real-label edge that the drying decision keyed on.- It also marks
signal_win/toxicity_gapas on-chain-optimistic — i.e. it bakes the [[onchain-label-overstates-traded-winrate|resolved_up-overstates-the-traded-win]] rule into the schema so the health gauges stop reading ~10pt too healthy.
State — committed, not live
Migration
0011is committed on branchworktree-agent-af81d3911fd13808cand is NOT yet applied to the live DB. The lane-drying (#1187) is already in effect via sourcemode; the health-schema change that formalises the real-edge gauge is still pending an apply.
Artifacts
For Agents — data behind the numbers
- Decomposition:
data/signal_fill_decomposition_2026-07-10.csv(per-window signal-ceiling vs realized vs filled/unfilled).- Real labels:
data/{asset}5m_actual_winners_2026-07-10.csv(btc/eth/sol/xrp/doge — ACTUAL CLOB winners, the label basis for 100% coverage).- Migration:
migrations/0011_*on branchworktree-agent-af81d3911fd13808c(real-edgecrypto_lane_healthcolumns; not applied).
Related
- crypto-shortterm-loss-investigation-real-vs-onchain-edge-2026-07-10 — the sibling same-day investigation: the 3-day slide, the razor-thin edge, and
resolved_upoverstating the traded win ~9–14pt; this note is its traded-label verdict (signal healthy, loss is at the fill). - crypto-shortterm-order-type-fak-verdict-2026-07-09 — the verdict whose “no-matches = EV guard working / fills show no adverse selection” framing this note corrects (missed winners, not dodged losers; measured on the real label). Its order-type conclusion still stands.
- crypto-shortterm-depth-aware-sizing-nogo-2026-07-10 — the same-day depth-sizing NO-GO this explains: wrong lever (depth-reach, not winner-capture); a passing gate would not have helped.
- crypto-shortterm-lane-state-adverse-fill-2026-07-05 — the original btc-up adverse-FILL-not-signal finding this generalises to all lanes on real labels;
realized_pnl_usd== CLOB truth. - crypto-shortterm-disagreement-ceiling-nogo-2026-07-03 — the don’t-chase NO-GO: why the fill-capture lever cannot just reprice the tail up (chasing is −EV).
- crypto-shortterm-fak-nomatch-root-cause-2026-07-02 — the ~50%/day FAK no-match = latency-conversion mechanism (ask reprices above the limit; DOWN worse) — the tail this note re-signs as +EV winners.
- crypto-shortterm-perf-dashboard-2026-07-05 — the per-lane
realized_pnl_usddashboard the real-edge lane-health view (migration 0011) formalises. - crypto-shortterm-empire-ui-crm-topology-2026-07-06 — the CRM
signal_win − fill_wintoxicity tab that migration 0011 flags as on-chain-optimistic. - pmv2-live-caps-are-advisory-not-blocking-2026-07-09 — the dead-code caps / missing daily-loss breaker; drying all lanes is the manual stand-in.
- crypto-shortterm-risk-management — where a real daily-loss circuit breaker and the fill-selection risk lever live.
- loss-is-adverse-selection-at-fill — memory: the durable rule this note is the canonical anchor for.
- onchain-label-overstates-traded-winrate — memory: the
resolved_up-is-optimistic rule this decomposition (real labels) depends on and migration 0011 encodes. - depth-aware-sizing-nogo — memory: the sibling shelved-lever anchor this verdict explains.
- crypto-shortterm — project index.