A TimeoutExpired get leaves a size>0 partial that the exists-check treated
as success, so the console fallback never ran for timeouts; the caller's
parquet read then failed (no magic bytes), deleted the file, and the next
run repeated the identical loop — 8 hours of tape-head stall overnight
2026-07-23. Partials from timeouts are now removed and the fallback runs.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- surgebot/oraclebot: settles now append-only to /data/*_settles.jsonl
(SETTLED_TRIM rotation can never lose a settle; graders pull them)
- forward.py: backfills any tape-covered day missing from the ledger —
a Mac offline gap > RESCORE_DAYS no longer leaves verdict-evidence holes
- meta_snap.py: nightly gzipped snapshot of all active markets (12k, 2MB/d,
local-only) — end dates make tau knowable at trigger for every tape
trigger; token->outcome maps kill the label-gap scorer artifact class
- .gitignore: pulled raw streams + meta stay local (re-fetchable, lean repo)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
v0 (res_tok only) said 'hold wins everywhere, +$43/fill' — that was
resolution-timing survivorship (round 3). Chain-graded, 1,146 forward
fills: hold -$5.92/fill and EVERY exit horizon negative too (best -$4.18
at +30m). Cohort split: tape-resolved winners drift to +$44 held; the
hidden-loss cohort bleeds monotonically from minute one (-$6@60s ->
-$44@2h). No scalp, no rescue — surge moments are symmetric information
events; net of fees + worst-print entry the taker case is closed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Forward days, 559 resolved fills: exit +60s = -$3.43/fill (burst-top entry
is briefly underwater), +30m = +$13.63, +2h = +$35.51 vs hold-to-resolution
+$43.56. Monotone accrual to resolution in every slice — the under-reaction
converges over hours, not seconds. v1's >3h 'bleed bucket' is POSITIVE on
the full signal (+$44.66/fill): another confirmation the v1 book's losses
were cash-gate selection, not hold-time. All entry bands positive forward.
No A2-scalp pre-registration warranted; markout re-reads stay on to verify
with real bids.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
No signal-path change (SEM_VER unchanged): records more, alters nothing.
Purpose: real exit marks for the markout-exit study (prints can't show the
bid) + book depth at mispricing moments (maker-study stage-1 groundwork).
oraclebot gains the same append-only attempts log as A2. Nightly pulls the
new files alongside state.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
v1's cash-gated book halted at its pre-registered -50% line; post-mortem
showed the ~2% cash-gated subsample was adversely selected (-$9/fill vs
+$41/fill full-signal, same day). A2 samples every trigger and replays
bankroll specs offline (surge_book_replay.py -> surge_book.json). Signal
semantics verbatim; grades to surge_meas_ledger.jsonl. See #19.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
FINDINGS: full round-3 section (mechanism, the 81%-vs-26% audit, how the
paper harness caught it, corrected verdicts, three standing rules) +
scorecard updates (surge dead, sub5c dead 0/38, oracle revived at E>=0.07)
+ correction banner on the 07-20 tape-era section. HANDOFF: queue +
snapshot reflect the kill, surgebot's instrument role, scorer law, Friday's
combined agenda. research/README: SCORER LAW + independent-instrument rule
+ full current layout. recorder/README: sync transport fallback. README:
/surge dashboard + research row truth.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>