Advisor loop · live

FM26 Deepener — Mission Control

Iteration 2 Updated 2026-07-19 · audits done, wave 1 running Mode Fable architect · delegated lanes

Mission

Drive every FM26 Deepener product to 100% polished completion under an expansive definition: functionality complete, decode confidence graded, tests green, docs current, and outputs staged so the only remaining layer is Jimmy's taste.

The session acts as architect only — all implementation goes to Sonnet/Opus implementer lanes and Codex cross-vendor lanes. Durable work items get slotted into beads; this page is the single view of progress.

Lanes running now

  • Done fan_forum → PR #947 — mood-spread + thread-dialectic spine, 21 new tests, all gates green locally
  • Done Club-name normalization → PR #955 (stacked on #953) — exact-first + unambiguous-prefix matching, fails closed on ambiguity; "Newcastle" now matches 8/8 results. Bead fm26-7bbg
  • Done Smoke-defect triage → PR #953 — all 3 defects were real: form-line scope mismatch fixed; season label off-by-one project-wide fixed (year = season-END); swapped match-day stat-array attribution now degrades honestly. Beads fm26-voq4 / fm26-b0or / fm26-9vrp
  • Done Shortlist decoder portability → PR #954 (Codex 5.6-sol) — root cause: EOF-residue gate too strict; Newcastle save now decodes 58 lists / 289k pairs; real-save fixture pinned in tests. Bead fm26-2yaw
  • Done Fixture score-join → PR #957 — coverage 23% → 100% on the real bundle; 246 previously-wrong scores corrected via goal-event evidence; conflicts fail toward omission. Bead fm26-0vw1
  • Running Merge-train gap closure — shortlist_entries producer override (PR #951) + heavy_save auto-mark scoping fix (Sonnet)
  • Done PR #942 diagnosis (Opus) — stale strict-subset duplicate of merged PR #937; the 2 "regressions" are #937's missing pieces. Recommend close-as-superseded; evidence on the PR + bead fm26-wgvd
  • Done Stale-PR triage evidence → outputs/advisor_loop/stale_pr_triage_2026-07-19.md — LAND #891 · REVIVE #883/#887/#888/#890 · CLOSE #881/#884/#886 (ratification on the decisions list)
  • Done Union v2 capstone — 16-branch union green (9,775 / 0); 8 of 9 types rich on the real bundle incl. transfer types with real shortlist rows; runbook covers the full train
  • Done play_fixture_manager grammar → PR #958 (Codex 5.6-sol) — grammar cracked exact-fit on 3 saves; FALSIFIES the "next-fixtures queue" theory (it's a working set of played fixtures). Upcoming fixtures now genuinely need a live FM26 capture. Bead fm26-64wt
  • Done Upcoming-fixtures probe → PR #956 — pending-sim-queue decoder shipped; corrected fm26-gldz's premise: the "unplayed" fixture WAS played (1-0), the snapshot score-join is just 15.6% sparse. play_fixture_manager.dat identified as the true upcoming queue. Bead fm26-nv1q
  • Done pre_match_preview verdict — Tier-0 fallback is CORRECT honest behavior; real cause is an upstream fixture-decode coverage gap (next unplayed fixture absent from both decoded datasets). Regression-pinned on PR #950; bead fm26-gldz filed
  • Done Full-union rebuild — all 9 packets together: verify fast 9,714 / 0 failed; train-tail patch + registry-integrity test validated; merge runbook at outputs/advisor_loop/merge_train_2026-07-19.md
  • Done Fable-advisor review — verdict: merge train as ordered, but hold the "delivered" declaration until the full union (incl. transfer chain) is rebuilt and re-smoked; caught a defect in the test fixup plan; mandated a registry-integrity test to close a silent packet-drop failure mode
  • Done Integration smoke — union of 5 story branches: verify fast 9,642 / 0 failed; all 5 new briefs engage rich tier on a real bundle; 3 shared-infra defects found; samples blocked on missing API key; #951/#952 pushed too late to be covered (re-smoke queued)
  • Done pre_match_preview → PR #950 — forward-looking forecast spine, invented-scoreline structurally blocked, 22 tests, all gates green locally
  • Done season_review → PR #949 (Opus) — season rollup + over/par/under verdict spine, honest partial-season handling, 22 tests, all gates green locally
  • Done newspaper_back_page → PR #946 — 23 new tests; fast/pr/harden all green locally
  • Done transfer_rumours → PR #952 — certainty-tiered rumour mill (done_deal / strong_link / speculation), 28 tests, all gates green locally. All 9 story types now at the analysis standard.
  • Done Shortlist wiring + transfer_briefing → PR #951 (stacked on #948) — fail-closed brief: never claims list ownership, never invents fees; 356 tests green; touched extractor.py (hotspot) minimally — file now exclusive to this chain until merge
  • Done Shortlist bridge → PR #948 — ref→person join, evidence-graph grade (honest label), 99.6% Save-B portable; semantic pin needs an FMRTE session
  • Done fm_data_mcp rebuild-per-call fix → PR #945 — cached service on BundleHandle, regression test, both verify tiers green locally
  • Done Docs currency refresh → PR #944 — 10 drift corrections, local fast tier green (9,554 passed / 0 failed)
  • Done Beads slotting — 12 new beads under advisor-loop label + 1 pre-existing cross-linked, no errors
  • Done Estate audit → outputs/advisor_loop/estate_audit_2026-07-19.md
  • Done Refactor scout → outputs/advisor_loop/refactor_scout_2026-07-19.md
  • Done PR #943 lane — no code fix needed; blocked on CI billing (see decisions)

All lanes verify locally with scripts/verify.py fast/pr; CI confirmation is blocked until the billing lockout clears.

Decisions waiting on Jimmy

  • BlockerGitHub Actions billing lockout since Jul 18 ~01:20 UTC — every workflow on every branch fails with "recent account payments have failed or your spending limit needs to be increased". Confirmed live by re-running a job. Fix: GitHub → Settings → Billing & plans, then re-run checks. Until then no PR can show green CI.
  • ReadyMerge queue once CI is restored: PR #943 (red-suite fix, code-correct, main already green locally at 9,568 passed), PR #944 (docs currency refresh, local fast green 9,554), PR #945 (fm_data_mcp service caching, fast + pr lanes green locally), PR #946 (newspaper_back_page to analysis standard, fast/pr/harden green locally), PR #947 (fan_forum to analysis standard, fast/pr/harden green locally), PR #948 (shortlist bridge, evidence-graph grade, verify green locally; merge before its stacked follow-up), PR #949 (season_review to analysis standard, all gates green locally), PR #950 (pre_match_preview to analysis standard, all gates green locally), PR #951 (shortlist wiring + transfer_briefing, stacked on #948 — merge #948 first, then retarget), PR #952 (transfer_rumours, stacked on #951), PR #953 (3 shared-infra bug fixes incl. project-wide season-label off-by-one), PR #954 (shortlist decoder now ports to the real Newcastle save), PR #955 (club-name normalization, stacked on #953), PR #956 (pending-sim-queue decoder + upcoming-fixtures research), PR #957 (fixture score-join: 23% → 100% coverage), PR #958 (play_fixture_manager grammar + falsification result). Full order + train-tail patch: outputs/advisor_loop/merge_train_2026-07-19.md. Holding merges until checks can actually run — gate-verdict-before-merge discipline.
  • NeededANTHROPIC_API_KEY missing — the taste-pass sample stories can't generate without it (.env has only OPENROUTER/OPENAI keys; the storytelling pipeline is Anthropic-based). Export it or drop it in .env, or approve routing generation through OpenRouter instead. Context briefs are ready meanwhile at outputs/advisor_loop/story_samples_2026-07-19/.
  • RatifyStale-PR triage: recommend closing #881 (better copy survives in a recovered git ref), #884 (gated unproven by its own bead), #886 (methodology superseded by the pilot ADR), and now #942 (Opus-verified stale duplicate of merged #937); landing #891; reviving #883/#887/#888/#890 — #888 is the pilot plan's #1 blocking prerequisite. Full evidence: outputs/advisor_loop/stale_pr_triage_2026-07-19.md. Say the word and I'll execute the closes.
  • Directionfm_save_read framing: its README claims it's "the shared read contract both Chronicle and Oracle sit on", but fm_oracle never imports it and fm_storytelling only has dormant support (tests only). Call needed: correct the README to match reality, or fund wiring Chronicle/Oracle through save_read.v1 as a real near-term plan.

Product scoreboard — pre-audit baseline

ProductStatusRead on distance to done
fm_storytellingDelivered*Initiative delivered pending merges (advisor gate satisfied): 16-branch union green, 8 of 9 types Tier-1 rich on the real Newcastle bundle — transfer types carry real shortlist rows, season_review works on short club names, match counts and season labels corrected. pre_match_preview falls back honestly until the upcoming-fixtures source is found (operator capture needed — save-side leads exhausted by PR #958). Merge runbook: outputs/advisor_loop/merge_train_2026-07-19.md. Taste samples still need ANTHROPIC_API_KEY.
fm_save_extractStructurally closedFrame 3 ledger 99.60% known, beyond-F3 unowned 0 bytes. Remaining decode gaps are FMRTE-session-gated (need Jimmy at the machine), not code work — except shortlist/scout surfaces (lane running). Warm re-decode ≈0.35s via fmdecode world already shipped.
fm_save_read / fm_oracleUndocumentedReal consolidation layer the audit found that CLAUDE.md never mentions — docs lane is wiring it in; contract-drift audit queued.
fm_data_accessQueuedCanonical access layer, but fm_applications bypasses it (architectural drift, scout item 7); consolidation spec split into 3 landable steps.
fm_mcp_server / fm_data_mcpIn playfm_mcp_server stale ~3 months; plan is consolidation into fm_data_mcp (queued). Real perf bug in fm_data_mcp — DataAccessService rebuilt per call — fix lane running.
fm_applicationsQueuedWorks but bypasses fm_data_access; reroute is step 2 of the consolidation spec.
fm_tactics_creatorTo grade.fmf create/inspect/edit shipped; polish bar assessment queued behind higher-leverage lanes.
fm_pilotRoughestHighest TODO density in the estate (56 per 10K LOC). TODO triage + restriction-policy bead queued; armed captures remain operator-gated.
fm_save_patchCaveatRe-parse-validated only, never FM-load-validated — honest ceiling until an FM-load test is designed (operator-gated).
fm_live_bridgeScoped-doneDeliberately narrow read-only proof oracle; no gaps found within scope.
fm_html_extractLegacy-frozenFM24/25 only by design (FM26 removed HTML export). Docs lane removing overstated claims.
docs + testsIn playFast tier verified green on main (9,568 passed / 0 failed, run live today). STATUS.md + comprehensive plan stale — docs lane running. verify.py fast measured 194s vs stale "sub-minute" claim; speed-up beaded.

Evidence-backed as of the 2026-07-19 estate audit + refactor scout (reports in outputs/advisor_loop/). Beads: 72 tracked — 38 open, 17 blocked (mostly FM-session-gated), 7 in progress; 8 stale draft PRs (#881–#891) awaiting triage.

Queue — next up

  • Queued edition_review 10-mode wiring pass across all new story types (coordinator lane, after merges unfreeze)
  • Queued Decode probe: pre-season board/media expectations (would upgrade season_review's verdict from outcome-anchored to expectation-anchored)
  • Next Stale draft PR triage — 8 drafts from Jul 8–9 (#881–#891): keep/close/land list
  • Next PR #942 cross-career portability regression (dbid join 0.196 vs ≥0.9)
  • Queued data_bridge real-bundle contract test (scout #3 — the silent-drift killer)
  • Queued Fast-tier speed-up: 194s → target sub-2-min honest, fix worker imbalance (scout #4)
  • Queued Bridge-scaffolding thinning ~500–1,000 lines across 9 modules (scout #6)
  • Queued MCP consolidation + fm_applications reroute, 3 landable steps (scout #7)
  • Queued Reconcile 7 recovery/ WIP snapshots; archive 3 dead decoder modules (scout #5)
  • Queued fm_pilot TODO triage; chronicle absence-commentary prompt clause
  • Queued Root-docs follow-up pass: NEXT_DECODING_BRIEF / AGENT_HANDOFF / CURRENT_STATUS_BRIEFING stale claims; add fmdecode to CLAUDE.md architecture
  • Queued Final union re-probe (incl. #953/#954/club-name fix): confirm transfer types get real shortlist data on the Newcastle save end-to-end
  • Operator FMRTE edit-diff session to upgrade the shortlist bridge to a true semantic pin (scoping doc Phase 2 — needs Jimmy at the machine)
  • Operator Live FM26 capture to locate the real upcoming-fixtures source (PR #958 falsified the play_fixture_manager theory — save-side leads exhausted)
  • Resolved Cached-frames fast path — already shipped 2026-07-08 (frame_plan.py + fmdecode world); was a stale premise

Log

  • 07-19Loop started in dynamic mode. Fable-advisor orchestration doctrine loaded.
  • 07-19Estate audit + refactor scout launched in background (Sonnet lanes).
  • 07-19Dashboard v1 published; scoreboard seeded from repo docs and memory.
  • 07-19Dashboard now also on Cloudflare Pages for off-Mac access.
  • 07-19Estate audit + refactor scout complete; fast tier verified green on main (9,568 passed).
  • 07-19Scout refuted the "cache unwired" premise — fmdecode world already does 0.35s warm re-decodes; memory corrected.
  • 07-19Wave 1 fired: 2 story types, shortlist bridge (Codex), docs refresh, fm_data_mcp fix, beads slotting.
  • 07-19Found: GitHub Actions billing lockout since Jul 18 blocks all CI account-wide. Push notification sent.
  • 07-19Backlog beaded: 12 new advisor-loop beads (fm26-17s3 … fm26-yrkn); transfer story types marked blocked on shortlist bridge.
  • 07-19Codex shortlist lane parked on a detached process; nudged back to foreground completion.
  • 07-19Docs PR #944 opened: STATUS.md rebuilt, superseded plan doc tagged, fm_save_read/fm_oracle documented, story-type count corrected to 9. fm_save_read direction question raised.
  • 07-19Operator directive: codex lanes now run gpt-5.6-sol (agent template was silently pinning gpt-5.5).
  • 07-19PR #945 opened: fm_data_mcp DataAccessService now cached per handle instead of rebuilt per tool call.
  • 07-19PR #946 opened: newspaper_back_page at analysis standard (splash-spine thesis, tabloid quote policy, back_page schema).
  • 07-19Wave 2 story lanes fired: pre_match_preview (Sonnet), season_review (Opus). 4 of 9 types now landed or in PR.
  • 07-19PR #947 opened: fan_forum at analysis standard. 5 PRs now queued on the CI billing fix.
  • 07-19PR #948 opened (Codex): shortlist ref→person bridge — discriminating top-vs-bottom-of-list signal with clean negative control; unknowns preserved. Transfer wiring lane fired, stacked on it.
  • 07-19PR #949 opened (Opus): season_review at analysis standard. 7 of 9 story types now landed, in PR, or in flight.
  • 07-19PR #950 opened: pre_match_preview at analysis standard — all four wave-2 story lanes delivered.
  • 07-19Integration smoke lane fired: real-bundle exercise of every new brief + first taste-pass sample packet.
  • 07-19PR #951 opened: shortlist storytelling wiring + transfer_briefing at analysis standard (stacked). transfer_rumours — the 9th and final type — fired, stacked on it.
  • 07-19PR #952 opened: transfer_rumours done. Story-types initiative fully delivered to PR — 9/9 types at the analysis standard in one day.
  • 07-19Integration smoke done: union verify green, rich briefs confirmed on a real bundle, 3 shared-infra defects surfaced (triage lane fired), samples blocked on missing ANTHROPIC_API_KEY.
  • 07-19Fable-advisor review fired: merge-train order + done-ness verdict before declaring the initiative complete.
  • 07-19Advisor verdict: no environment has tested all 9 packets together — full-union rebuild lane fired with the corrected fixup (synthetic spec needed) and a new registry-integrity test (briefs/__init__.py drops packets silently on bad conflict resolution).
  • 07-19Full union green (9,714 / 0). Corrected probe found: shortlist decoder doesn't port to the Newcastle save; pre_match_preview actually Tier-0 on real data; season_review club-name sensitive. Two fix lanes fired (Codex 5.6-sol + Sonnet).
  • 07-19pre_match_preview cleared: fallback is honest-by-design; real gap is upcoming-fixture decode coverage. Decode probe lane fired at that gap.
  • 07-19PR #953: all 3 smoke defects confirmed real and fixed — incl. a project-wide season-label off-by-one and a silent stat-array side-swap. Club-name normalization lane fired, stacked on it.
  • 07-19PR #954 (Codex 5.6-sol): shortlist decoder ports to the Newcastle save — transfer story types get real data once the chain merges.
  • 07-19PR #955: club-name short forms resolve fail-closed in the results ledger. 13 PRs queued; only the upcoming-fixtures probe still running.
  • 07-19PR #956: pending-sim-queue decoder + the corrected diagnosis — score-join sparsity, not missing fixtures. Two follow-up lanes fired: score-join fix (Sonnet), play_fixture_manager grammar (Codex 5.6-sol).
  • 07-19PR #957: score-join coverage 23% → 100%; 246 wrong scores corrected. Only the play_fixture_manager grammar lane still open.
  • 07-19PR #958: grammar cracked + campaign theory falsified — play_fixture_manager is not the upcoming queue. 16 PRs in the merge queue.
  • 07-19Next wave: PR #942 P1 regression (Opus), stale-PR triage evidence, union-v2 capstone + runbook covering all 16 PRs.
  • 07-19Stale-PR triage delivered: 1 land, 4 revive, 3 close — awaiting ratification. #888 revival queued as the pilot unblock.
  • 07-19CAPSTONE: 16-branch union green, 8/9 types rich on real data — story-types initiative declared delivered pending merges. One gap (producer override) being closed now.
  • 07-19PR #942 diagnosed as a stale duplicate of merged #937 — close recommended, no code fix warranted.