This is a build log. Each entry is a short record of what shipped, what was decided, what got killed, or what’s queued next. Entries are reverse-chronological and timestamped to the source event, not the publish date. Entries before 2026-04-30 are backfilled from existing receipts. Long-form posts still live on the Posts page.
-
Stockfish backfill wedged behind a single vCPUA frozen-looking status page was actually a 9-hour Stockfish backfill on a single vCPU. The right fix was fan-out across ephemeral workers, not a fatter persistent box.Apr 30, 2026
-
Savepoint test fixture masked two production bugsA clever savepoint-based test fixture made the suite 2.5x faster and silently turned green CI into evidence of nothing. Replacing it with TRUNCATE surfaced 3 real production-class bugs.Apr 25, 2026
-
Paper trader was treating 'roll' as 'close'An options paper-trading harness was booking every roll recommendation as a day-3 loss instead of holding the position. 50 trades, -4.7% average, dragging the baseline strategy's measured edge.Apr 21, 2026
-
Did not promote exit_wide to defaultA +9pp leaderboard advantage on an options exit variant looked like a winner. With per-trade SD of 35-48pp and n≈100, it was below the noise floor, and decomposition killed the story entirely.Apr 21, 2026
-
Bluesky posts silently dropped for three weeksAn optional dependency under [project.optional-dependencies] silently dropped every scheduler-triggered Bluesky post for three weeks. A 0.03s failure duration was the diagnostic that took three sessions to spot.Apr 21, 2026
-
PEAD validated as the one signal with real edgeBacktested post-earnings drift across 387 events: surprise-to-return correlation is significant at every horizon and strengthens out to 90 days. The signal survives because the inefficiency is behavioral.Mar 25, 2026
-
Agent skip threshold quietly broke prediction refinementAn agent rubric designed to gate new predictions on balanced evidence inherited the refinement loop and silently froze every existing prediction at its original baseline.Mar 25, 2026
-
Datetime separator mismatch hid every same-day signalTwo ways of stringifying a Python datetime disagree on one character. That character was load-bearing in a lexicographic comparison and silently dropped 11 of 12 daily refresh runs.Mar 9, 2026
-
Entity resolver became the single gatekeeperWhen a resolver falls back to returning the raw input on miss, the curated index downstream becomes a dump of every string an LLM ever mentioned. 38% of rows were junk.Mar 8, 2026
-
Railway deploy deadlocked behind cold DB initA 35-minute outage from running ensure_schema() before _start_health_server(). On warm DB the ordering was invisible; cold-start exercised the invariant local Docker testing couldn't reproduce.Mar 7, 2026
-
Predictions became immutable claims at fixed horizonsA mutable prediction model with update verbs shipped and produced zero predictions in a day. The redesign drops the verbs, fixes the horizons, and makes the LLM the gatekeeper of its own output.Mar 6, 2026
-
LLM dedup was hallucinating signal IDs into joinsAn LLM dedup stage returning canonical_id values not present in any batch silently false-deduped 1,714 signals. The fix was a per-call invariant the foreign key couldn't express.Mar 5, 2026
-
Brief synthesis: map-reduce by entity, not by signal capA 30-signal cap on a daily news brief was dropping 80-90% of material and structurally hiding low-volume tickers. The fix was to change the partitioning unit, not raise the cap.Feb 21, 2026