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 project mkofmdtdldxgmmolxxhc joined to ACTUAL CLOB resolution labels (the market’s realized winner), not resolved_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 migration 0011 it 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 (migration 0011). 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-fill anchor; 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):

ViewBasisPer-shareWin rateNote
SIGNAL CEILINGall 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%.
REALIZEDlive fills, net of fee−3.87¢70.8%−$641 on 558 fills — the money actually at risk.
DISCRIMINATORunfilled (no-match) vs filled84.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:

AssetUnfilled − 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:

LaneNew 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_gap as 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 0011 is committed on branch worktree-agent-af81d3911fd13808c and is NOT yet applied to the live DB. The lane-drying (#1187) is already in effect via source mode; 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 branch worktree-agent-af81d3911fd13808c (real-edge crypto_lane_health columns; not applied).