Accuracy audit of the live producer on the live crypto_shortterm DB (emitted_signals × outcomes), clean both-sides era 2026-06-28 → 2026-07-02 (BTC n=920 fires; 4 alt dry lanes n=1,756). Headline: live emit silently dropped the validated edge-vs-ask trade condition — a fidelity gap vs the Phase-0-gate-clearing rule worth +60–90% EV/fire and roughly half the fires, fees, and FAK exposure. Also: EMIT_MAX_ASK unset on all 10 lanes, a folded calibration audit (healthy overall, four localized deviations), and cross-asset calibration transfer confirmed OOS.

For Agents — actionable outcomes

  1. Fidelity fix (code): restore the net-edge-vs-ask gate in emit — fire only if p_cal − (ask + slip) − fee > 0 (optionally +δ margin). This re-instates the rule the walk-forward validated; it is NOT a new regime and does NOT require a gate re-run.
  2. Config fix (deploy, immediate): set EMIT_MAX_ASK (backtested cap 0.85) on all 10 lanes — currently unset everywhere; the live UP lane fired at asks up to 0.979.
  3. Calibration: frozen map stays frozen. τ-conditional / per-side / σ-conditional refits are refit-era items — each requires refit + walk-forward re-gate per project rules (crypto-shortterm).
  4. Data hygiene: always filter side IN ('Up','Down') on emitted_signals — legacy 'BUY' era rows otherwise silently mis-score (see Gotcha — emitted_signals.side literal changed between eras).

The critical fidelity gap — emit never compares p_cal to the ask

The rule that cleared the Phase-0 gate (crates/analysis/src/bin/walkforward.rs:32, trade_decision_slipped) only trades when:

p_cal − (ask + 0.01 slip) − fee(0.07·p·(1−p)) > 0

Live emit.rs fires on is_regime(τ, p_cal) alone — it never compares p_cal to the ask. Every backtest that passed the multiple-testing-corrected bar (crypto-shortterm-phase0-walkforward, crypto-shortterm-phase0-selectivity, crypto-shortterm-phase0-depthaware) had the edge-vs-ask condition in the loop; the live producer does not. This is the definition of a fidelity gap: the deployed strategy is not the validated strategy.

Consequence

~26% of live BTC fires had zero or negative model-vs-market disagreement (pred ≤ ask) — gross EV ≈ +0.002/share, i.e. negative net of fees. These fires burn spend cap, fee drag, and FAK exposure for nothing.

Evidence (BTC clean era, n=920)

Fires bucketed by pred − ask, where pred = folded conviction prob (p_cal for Up, 1 − p_cal for Down):

bucketshare of firesavg askrealized EV/share (gross)
≤ 026%0.918+0.002 (≈ negative net of fees)
bucket 1 (small +Δ)+0.03
… monotone …rising
Δ > 0.20n=148+0.28 (win rate 0.818)

EV is monotone in disagreement — exactly the shape the validated rule exploits, and consistent with crypto-shortterm-loss-filter-analysis-2026-06-26 (the edge IS model-vs-market disagreement; agreement gates like pm_ask≥0.80 were rejected there because they delete it — this gate is the opposite: it requires disagreement).

Simulated gate on the same live fires:

gatefiresEV/fire (gross)gross total
none (live behavior)9200.090583.3
pred − ask ≥ 0.035210.1446 (+60%)75.4 (≈ equal net of fees)
pred − ask ≥ 0.054400.1715 (+90%)

Out-of-sample confirmation (4 alt dry lanes)

The hypothesis was formed on BTC only, then tested untouched on the eth/sol/xrp/doge dry lanes:

  • All fires: n=1,756, EV 0.0704/share, gross total 123.7.
  • Gate ≥ 0.03: 942 fires, 0.138/share, gross total 130.0 — HIGHER in absolute terms: the dropped fires averaged −0.0078/share gross, i.e. negative even before fees.

Verdict

Restoring the edge-vs-ask condition is strictly better: ≈ half the fires, +60–90% EV/fire, equal-or-higher total, and half the FAK exposure / fee drag / spend-cap burn. Fidelity fix, not a new regime — no walk-forward re-gate required (it re-instates the exact validated rule).

EMIT_MAX_ASK unset on ALL 10 lanes

  • The live UP lane fired at asks up to 0.979; 43% of its last-5-day fires were above the backtested 0.85 cap.
  • The −EV pocket is ask > 0.90 per the a27b852 backtest.
  • Immediate config fix via @deploy (env, no code). Note this is a ceiling (don’t overpay), not the rejected agreement-floor from the loss-filter analysis.

Calibration audit (frozen 20-bin map, folded, BTC clean era, n=920)

Overall healthy — bucket predictions track realized within noise, with four localized deviations:

#findingdetail
aτ 60–90s fires under-confidentpred .866 → realized .936, z≈2.9. Only 12% of fires land there — 74% of fires trigger at the first crossing into τ<150s.
bDOWN side skews0.855-bucket under-confident (realized .898, z≈+2.5); ≥0.965 bucket possibly over-confident (realized .886, n=44).
clowest-σ quartile over-confident−3.8pt, z≈1.6 — consistent with EWMA σ lag. σ = EWMA λ=0.94 over Chainlink prints decimated to 10s (oracle-quantized); a Binance-tick σ would be richer.
dextreme disagreement fadespred−ask > 0.15 realizes −2 to −5pt below pred → haircut sizing there, don’t skip — EV is still highest in that bucket.

Refit-era items (do NOT do casually)

τ-conditional map, per-side maps, σ-conditional correction — all require a refit + walk-forward re-gate per the frozen-calibration rule. The frozen map stays frozen until then.

Cross-asset transfer — BTC calibration generalizes

BTC’s frozen calibration applied unchanged to the eth/sol/xrp/doge dry lanes (n≈430–445 each): pred ~0.88 vs realized 0.865–0.903 — within ~2 SE everywhere. The oracle-lag edge generalizes across assets; per-asset refits are fine-tuning, not blockers. See crypto-shortterm-multi-asset-status-babylon-2026-07-02 for the rollout state.

Method notes

  • Query path: duckdb → Supabase postgres_query server-side, read-only (Ad-hoc live-DB access via duckdb (no psql)).
  • Era hygiene: side IN ('Up','Down') filter mandatory — the legacy 'BUY' era (Jun 25–28 v1 rows) produced a fake 15% win-rate scare this session before being excluded.
  • “Folded” = Up and Down fires mapped to a single conviction probability (p_cal for Up, 1−p_cal for Down) so both sides share bins.