- 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>
THE SCORER BUG (found 2026-07-22 by the surge paper book divergence):
tape-resolution timing is win-biased. When our side LOSES, the winning
sibling keeps trading at 99c until close, the sibling-veto keeps the
market 'alive', and the loss sits in the ignored pending bucket — while
wins tape-resolve within hours and score. Jul-21 audit: tape-resolved
fills 81% hit (+$46/fill); chain-resolving the 329 'pending' fills: 26%
hit, -$49.61/fill; combined truth 53% ≈ the paper book's 57.5%. The
paper harness was the honest instrument; every ledger arm was flattered.
payouts_for(): tape proxy first, CTF chain truth for the remainder
(payouts.py cache — immutable, so nightly incremental cost is small);
refunds (0.5) now booked as scratches. Applied to flow, controls, and
oracle (sub5c inherits via score_flow). Ledger recompute follows; #16
verdict evaluates corrected numbers only.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Same frozen surge signal, band opened to 0.5-5c, all niches, F=$300 —
tracked nightly as flow_sub5c_EXPLORATORY (NOT pre-registered). First
tape scan: they live in in-play sports totals/blowout tails + esports
maps; ~70% crater; 31 resolved fills, 4 wins, EV sign owned entirely by
two lottery hits; sim depth-blind at longshot share counts. Accumulate
to ~100+ resolved fills before any pre-registration or kill.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>