27 KiB
The Road to 100% — the BFM-decomp endgame roadmap (v2, Phase 30+)
v2 re-baseline adopted: 2026-07-30 (Drew, plan-mode gate at Phase-29 close; authored on Fable 5 at Max effort) · Baseline: the 2026-07-30 committed digests at HEAD
f382a8180(post-T98/T99) · Supersedes: roadmap v1 (2026-07-15, this same file — full v1 text in git history at0e5d64956and earlier; §7 records what changed and why) · Status: ACTIVE — re-baselined by every PhaseEnd.v1 chartered P27 (honest frontier) → P28 (endgame engine) → P29 (family campaign) → P30 (mass+main) → P31 (behemoths) → P32 (flip). P27–P29 ran and resolved every swing number v1 held open (§7). v2 re-charters the remainder as P30–P33 on measured 2026-07-30 reality.
Status at Phase 33 (2026-09-07): P30–P32 are closed — 218 binaries byte-identical from a clean rebuild, 0 INCLUDE_ASM stubs, fleet 100.00 / 100.0 / 100.0, main 2,091 / 2,091, main's independent boundary oracle closed (P31 S77), disc UNCLAIMED 0 of 220. P33 is running: the contract re-verified (
docs/verification.md), the history rewritten in place and force-pushed (this file's P33 text below still describes the two-repo mirror — SUPERSEDED, see the decision log P33 S86 anddocs/public-flip-runbook.md), the public surface (README, LICENSE, NOTICE, THIRD_PARTY, badges) in place; the visibility flip waits on GitHub's purge of the old objects. Gen2 EXIT = the P33 PhaseEnd (v2.0.0).
0. Authority, maintenance & how future sessions use this
- This document is docs-layer and ADVISORY.
PROJECT_CONTEXT.mdremains the constitution;phase-ends/remains the state. Every phase still opens with its own two-gate plan approval (P3) — this roadmap tells the Phase-Start session what the phase is for and what feeds it, not that the gate is pre-approved. - Every PhaseEnd re-baselines this roadmap. Each PhaseEnd carries a standing "Roadmap delta" line: what this phase changed about the road ahead (numbers re-measured, buckets emptied/split, phases re-scoped/reordered, findings that retire a lever). The megaplan and roadmap-v1 precedents are the warning — both plans' numbers rotted within one phase when the tools under them were fixed. Numbers in §2 are true as of 2026-07-30 and every phase re-derives what it consumes.
- On conflict: the constitution and the latest PhaseEnd's "Next:" win over this file.
- How a fresh session uses this: complete the normal Session Start Protocol (CLAUDE.md load order) first; then, when planning the next phase, open this file at the matching §3 phase entry and plan from it + the latest PhaseEnd's Roadmap delta.
- Number hygiene (R14 at planning scale): every count below cites its committed source and its date. A scan is a hypothesis; the whole-binary byte-gate is the truth. Validate any "recoverable/templatable/matchable" count with a small gate probe before scoping work around it — and verify the instrument first (R35).
1. The completion contract (Drew's decisions, 2026-07-15 — unchanged; numbers corrected)
Target: GAME-CODE TRUE 100%, mechanically defined:
- After SDK objects are LINKED, zero
INCLUDE_ASMand zero linkedNON_MATCHINGundersrc/across all onboarded code-bearing binaries. Corrected count (P30 S44/S45): 183 onboarded today — main + resident + 141 overlays (138 type-4 + the 3 uncompressed type-1 overlays ov_MAIN_012/ov_SC02_037/ov_SC03_107) + 40 md_ modules* at their §S44 static slots (docs/memory-map.md; every one byte-identical on its FIRST build at the derived address). The explicit exclusion list the 100% claim cites is the parked-for-L3 ledger: 34 payloads (make audit-disc→docs/disc-ledger.mdUNCLAIMED; detailed indocs/disc-completeness.md) — the 28 SC0x script modules (7 × 4 per-disc builds), SC02/9, MAIN/7, MAIN/9, and SC03/53, SC03/54, SC03/56 (S45: three SC-disc type-1 rows the S44 exploration never tiered — same per-disc runtime routing class as SC02/9). Their bases are loader-determined per-disc, not EXE-static; guessing one would be P9 theater. 100% is only claimable once these 34 are onboarded-and-matched (post-L3 emulator tour, P31 bucket T) or remain explicitly excluded with this evidence — the byte-gate cannot see them (R34). (The prior "39 type-1 backlog" framing is superseded: 43 of those payloads now build byte-identical as md_/ov_* binaries; the residue is exactly the 34-row parked ledger.)* - Every binary byte-identical from a genuinely clean tree (R22:
make clean+ extract-all +check-all), and byte-identical with AND without the SDK objects (the fresh-clone stub fallback invariant). - Both audit oracles green — extended to main + resident. Status: overlays + resident
covered (
make audit-corpus, "corpus(+resident)"); main still lacks an independent second oracle — its LINKED-excluding sig is dated 2026-06-14 and the fleet digest itself carries the R34 caveat. P31 closes this before any 100% claim on main. - No completion declaration while any game-code stub remains. Wall verdicts are model-relative (the §45/§52 history — and P27–P29 proved most "walls" were our own tooling); walls are re-attacked at every phase boundary with the matured idiom bank and each new model generation until they fall.
Scope decisions (standing):
- PsyQ LINKED = complete. Main's SDK-named residue (gsgap 5 objects + libapi 800c3 ≈22 objects) converts to LINKED in P31; the completion dashboard asserts the residue empties. Side note (Drew): decompiling the PsyQ libraries from source (sotn precedent) is a legitimate far-future stretch — record it, do not plan it, revisit only after game-code 100%.
- Public flip at 100%. Drew's call, made knowing the 2026-07-01 strategy review recommended a near-term flip. Standing checkpoint: every phase close reports measured velocity + all three metrics; if the trajectory stretches beyond what solo+agents can credibly finish, flip timing is re-surfaced with the numbers — the decision stays falsifiable. P29's data point: +18.6pp instr in 25 sessions, decaying to +0.3pp/day at its engine's floor — the checkpoint now has real curvature to watch.
- Metrics contract — IMPLEMENTED 2026-07-22: every phase close reports all three —
fn-count (×138-inflated) · instr-weighted (decomp.dev-display) · distinct-code (the honest
RE truth) — with the main EXE in the weighted denominators (live in
docs/progress.fleet.mdsince 07-22; pre/post-07-22 instr deltas are not perfectly comparable across that change).
2. The measured baseline (2026-07-30 — committed digests only)
Standing (docs/progress.fleet.md, regenerated post-T98): 87.5% instr-weighted
(11,493,049 / 13,141,652) · 78.0% distinct-code (4,396,900 / 5,634,875; 69,816 / 87,459
unique fns) · 92.00% fn-count (325,417 / 353,720) · 140/140 byte-identical · dedup
1886/0 · 0 NON_MATCHING linked · tools-health RC=0.
Remaining: 28,296 stub instances · 17,643 distinct fns · ~1.24M distinct ins · ~1.65M weighted ins. Average remaining multiplicity ≈1.6 — the high-reach families are consumed; what remains is mostly per-overlay-distinct code, main, and named walls.
P29 velocity (the flip-checkpoint input): +18.6pp instr / +28.5pp distinct (+16,288
unique fns) / +8.06pp fn-count over 25 sessions; mean ~+0.74pp instr/session; final-four-day
decay +2.7 → +2.2 → +0.6 → +0.3 — the family-remap engine's measured floor (daily table:
phase-ends/logs/Phase29.md T99; derive fresh via git log docs/progress.fleet.md).
| # | bucket | scale (source, date) | honest tractability |
|---|---|---|---|
| W1 | Stranded byte-correct drafts (integration-blocked) | backlog ledger 1,350 open near-misses, dozens close=0 "MATCH pending gate" (docs/backlog.md 07-29; rows include since-banked fns — purge at P30 T0); measured recovery 14/36 = 39% (docs/calibration.md 07-24); 10 named still-blocked drafts |
the cheapest distinct wins in the repo: the tiered recovery driver + §65b de-macroize + gate_stage call-site-cast. Fix gate_stage snapshot/restore first — the ladder currently destroys good drafts |
| W2 | The -O0 cluster |
10 families / ~1,287 raw distinct ≈ 7% of all remaining distinct (SESSION-24/25 checkpoints) | WALLED by the Arm-A splat re-carve defect (%lo +0x20 data-symbol shift on 3 of 4 sampled overlays; cookbook §116 area) — an instrument wall. B2, SC07, and the "~3% h_seq ceiling" all resolved to tooling; this has the same shape. Fix splat-side OR productionize the no-recarve staging driver (sketched, logs/Phase29 ~§9036) |
| W3 | The fresh-crack frontier (the mass) | family map 07-29 (docs/family-hseq.md): 511 substantial families / ~707k templatable ins, 61 zero-crack (matched sibling exists); member classes 3,899 PURE / 40 IMM / 6 STRUCT; + non-substantial families + 3,771 singletons. Concentration (SESSION-13, 07-23 — directional; re-derive at T0): top-20 ≈ 23% of remaining instr, top-100 ≈ 53% |
wave → gate_stage (call-site casts, NEVER bulk header edits) → propagate-same-session is proven at scale (2,713 members banked in one session once blockers cleared). Fresh exemplar cracks are the only lever that moves distinct-code (SESSION-14). jr-half via the §53 carve path. No 150-ins wave cap (SESSION-13) |
| W4 | T98 residue (behind matched exemplars) | 80 families / 960 members / 173 distinct: 29 all-STRUCT (86 members, refused at remap by design) + 51 no-STRUCT (874 members, stage-but-DIFF; last 3 sweeps returned 0) (logs/Phase29 T98) | STRUCT members = ordinary per-member drafts in the normal queues; the 51 = one bounded diagnosis wave (~3 distinct each, expect a NEW cause per family; the rtu_match --stderr-out recipe). Low mass — opportunistic, never the spine |
| W5 | GIANT walls + PINS | func_801412A8 (198×138, close=110, S11 LUID regalloc) + func_80178004 (165×138, close=91, local-alloc) ≈ 50k gain ins; PINS class 19 fns / ~61k gain (docs/worklist.md 07-24 — STALE, re-derive at T0) |
special projects: §H levers, cc1_probe kit (P32), frontier-model discovery sprints. PINS: the pin-crash SIGABRT dissolved in P27 — mechanically harvestable now |
| M | Main EXE | 1,034 stubs / ~60.2k game-code ins at 0.7% (436/60,201) + 7 NON_MATCHING promotions + ~80 jtbl fns + SaveLoadRoutine (the last Gen1 deferral) + SDK residue gsgap 5 obj / libapi ≈22 obj (docs/progress.md 07-30) |
standard machinery at ×1; the fuel gap is Ghidra-C prefetch (0/2,096 cached — SESSION-13); jtbl fns ride the matured carve workflow; the second oracle is a contract item (§1.3) |
| R | Resident | 14 stubs (docs/resident-dossier.md): 5 PLUMBING (byte-correct C exists; loose-typing def-side) + 4 DIFF (genuine residuals) + 5 jtbl-deferred |
def-side reconcile (docs/canonical-decl-reconcile-design.md) + resident jtbl carve + §H/permuter → the first 100%-binary flag-plant |
| T | 39 type-1 code modules | un-onboarded, in NO phase (docs/disc-completeness.md 07-15); mostly small (83w–1,318w); 3 window-capped ≥4096w (true sizes unknown); 3 carry overlay-like code density (3.39%) → possible large dedup |
load-address RE (PCSX-Redux RAM proof — the Phase-3 method, R10 ≥3 datapoints) → Ghidra import → splat onboard → R36 citizenship (make audit-binaries) → dedup_extend harvest (SC07 precedent: 95.6% free) → genuine residue into normal queues. Extends the denominator (honest direction: headline % drops) |
| B | Behemoths | v1's list was STALE — rebuilt (SESSION-13): 0x80183814 (5,122 ins, ov_SC07_006 — the largest fn in the game; verify it's one fn, R14) · 0x8017bf14 (4,763) · 0x8017d2dc (1,586) · 0x8017dc1c (1,518) · 0x8017c954 (1,194) · 0x8017c730 (1,061×2) — ~×1 singletons |
late special projects (P32): diff_regions piecewise attribution + cc1_probe + frontier drafting. Never wave fuel |
| D | Carried instrument defects | gate_stage ladder destroys good drafts (no snapshot/restore) · rtu_match buries the real cc1 error behind --stderr-out · --fix-def-sig is a REPAIR not a default (§119) · 21-file absolute-include portability · .run/autopsy/residuals.jsonl stale (07-21) · docs/backlog.md is not a work queue (§83) · corpus.stubs; the "29,961 vs 28,296" was a cross-date, cross-scope digest misread (the delta was exactly SESSION-25's 2,713 banks); digests now stamp scope+HEAD |
fix at P30 T0, before scoping waves on their numbers (R35: tool-integrity precedes measurement) |
The lever order (yield/cost, measured): recover stranded drafts (W1) → fix the -O0
instrument (W2) → ride the concentration curve (W3) → scope-complete (T) → flag-plant main +
resident (M, R) → walls/behemoths re-priced each boundary (W5, B).
Model/cost doctrine (docs/calibration.md + docs/effort-map.md): local v3 $0 (≤15-ins
band) · Haiku-tier drafters ≤~50 ins (4.8× cheaper, A/B-validated) · GLM lane for the
def-conflict-free band ($0.03–0.08/fn) · cheap-Opus mid-band (~40–140k tok/fn) · Opus for
the 90+/regalloc tail · permuter $0 for drift · frontier models (Fable-class) = discovery
only (~230k tok/fn; ROI is idioms + wall-dissolutions, never banks) · Ultracode for breadth
waves (R26/R27 prompts at every transition) · Max for planning/synthesis/walls.
3. The phase sequence
Phases are two-gated as always (plan approval → autonomous execution → milestone
confirmation). Campaign phases close on measured yield floors, not calendar. Effort/model
annotations follow docs/effort-map.md.
P30 — The Recovery & Concentration Campaign (overlays to their ceiling)
(Ultracode breadth waves / Max synthesis & deep tasks; open-ended, ROI-gated. No MCP dependency for the cached head — 146/159 reach-138 exemplars have Ghidra-C.)
- T0 — Frontier regen + instrument repair [Max]. Regenerate report / family map /
worklist from verified inputs; reconcile the family_hseq↔progress instance-count gap
(R32) before consuming either; purge since-banked fns from the backlog ledger; refresh the
autopsy; fix
gate_stagesnapshot/restore (it destroys good drafts) +rtu_matchcc1-error surfacing; per-session velocity derived fromgit log docs/progress.fleet.md(R33 — the committed digest history IS the burn-down tracker; build no scanner). - T1 — The integration-recovery sweep [Ultracode]. Every close=0 stranded draft through the tiered recovery driver (T0/T1 blast-radius containment; §65b de-macroize; the call-site-cast ladder); the 10 named blocked drafts; close the lane on its measured floor.
- T2 — The
-O0Arm-A splat wall [Max, deep; R17 web-research]. Fix the+0x20re-carve data-symbol shift at the splat/extract layer OR productionize the no-recarve staging driver; byte-gate on the 3 failing sampled overlays; success feeds the 10-family / ~1,287-distinct cluster into normal wave flow. - T3+ — The standing crack-wave loop [Ultracode waves; Max between]. 61 zero-crack
families (propagation-only) → top-mass fresh families top-down, no size cap, jr-half
via the carve path → propagate behind every crack same-session → the PINS class → W4
residue diagnoses (bounded, opportunistic). Wave lanes by band: local v3 (≤15, $0) · GLM ·
Haiku-tier · cheap-Opus · permuter on drift. Carried-in from P29: grinder family-warm-start
- the 2 Phase-22 grinder bugs (Task 4), the permuter backlog sweep (Task 6), the 21-file include fix.
- Every session: velocity + all three metrics; R22 clean-fleet per banked batch; tools-health green before matching.
Milestone: overlays at their measured ceiling — ≥95% instr fleet, or every remaining overlay stub on a named wall/behemoth/queue ledger — 140/140 byte-identical throughout.
P31 — Scope-Complete + Main & Resident to 100%
(MCP + PCSX-Redux sessions — G2/R29/R23 discipline; Ultracode for the main waves.)
- T1 — Type-1 onboarding. Size the 3 window-capped modules first; load-address RE per
the Phase-3 method (RAM-dump byte-proof, R10 ≥3 datapoints) → Ghidra import → splat
configs → R36 citizenship →
dedup_extendharvest (3 modules look overlay-shaped — possible SC07-scale free banking) → genuine residue into the normal queues. Report the denominator re-baseline honestly (headline % will drop; that is the correct direction). - T2 — The main-EXE campaign. Ghidra-C prefetch for main (the fuel gap) → band-tiered waves over the 1,034 stubs → the ~80 jtbl fns via the matured carve workflow → promote the 7 NON_MATCHING → SaveLoadRoutine → gsgap resegment + libapi 800c3 → LINKED → build main's independent second oracle (contract §1.3) before any 100% claim on it.
- T3 — Resident 14 → 0. 5 PLUMBING via the canonical-decl-reconcile design; 5 jtbl via the resident carve; 4 DIFF via §H/permuter/pins. First 100% binary; then main.
Milestone: main + resident at 100% game-code; all disc code onboarded or explicitly excluded with evidence; the contract denominators final.
P32 — Behemoths + the Wall Endgame
(deep sessions; Max + the best-available frontier model at that time)
- The behemoths (B) from the REBUILT ledger (incl.
0x80183814):diff_regionspiecewise attribution + thecc1_probekit (package the §45 gdb-on-cc1 / RTL-dump method: per-pass dumps, a two-candidate RTL differ, regalloc breakpoints — built here so wall work stays repeatable) + frontier drafting. - The wall track: the GIANTS (close=110/91), the §52-class ledger, anything W2/W5 left behind — re-priced every phase boundary against the matured idiom bank + new model generations (the true-100% doctrine; and the P27–P29 lesson says: check the instrument first).
Milestone: 0 stubs, or a Drew-reviewed wall ledger with an explicit re-attack cadence (this phase iterates until the walls fall; no false completion — P9).
P33 — 100% Verification + the Public Flip + Gen2 Exit
(Max; the capstone — substance unchanged from v1's P32)
- Contract verification: 0 game-code stubs across all onboarded binaries; R22 clean-fleet; the dual with/without-SDK invariant; both audit oracles green including main + resident; the dashboard's three metrics at 100/100/100 game-code.
- The public flip (the Gen2 Phase-14 checklist,
docs/gen2-roadmap.md): the allowlisted two-repo mirror (R20 — copy-in, never delete-from-a-copy, no in-place scrub); the rom→decoder regeneration tool promoted into publicmake extract(H1 re-tightened); AGPL-3.0 (brave-CUE keeps GPL); no-ROM CI; frogress/decomp.dev; the README/docs refresh (the README self-declares Phase-19-stale); the first-push gate (ROM-SHA1/oversized-blob scan over tree AND history, explicitly assertingdumps/+extracted/exclusion, owner review before push); the one-way master→public sync script; GhidraExportSymbolstypes/comments text-export (makes the DB regenerable- public-clean — the Phase-9/10 carried note, due here at the latest).
- Parking-Lot sweep at the generation boundary (PROJECT_CONTEXT): the Archipelago/randomizer contact (their unpublished US RAM research), the decomp.me preset submission.
- Releases: the gcc-2.7.2 codegen map (§31 +
docs/gcc-2.7.2-map/),xsigas a standalone MIT tool, the permuter-ILS/masked-scorer upstream PR, the v3 matching-drafter pipeline write-up (docs/community-matching-model-plan.md). - Drew's endgame deliverables (the standing memory): the progress timeline/story,
the hindsight retrospective, the public "how to AI-decomp" wiki —
docs/decision-log.md(R31) is the substrate. - Version 2.0.0 · Gen2 EXIT.
The Gen3 horizon (parked, post-exit): shiftability, asset repack, native recomp / PC port, randomizer tooling — and the libs-from-source stretch (§1 side note).
Honest scale: at P29's measured ~+0.7–1.1pp/session and a remaining mix with LESS multiplication (avg multiplicity ≈1.6) and MORE ×1 work (main, singletons), the estimate is P30 ≈ 10–18 sessions · P31 ≈ 4–8 · P32 unknown-by-nature · P33 ≈ 2–4. The §1 flip-timing checkpoint runs at every phase close.
4. Foreseen tooling (named now so phases don't rediscover it)
| tool | what it does | status / phase owner |
|---|---|---|
gate_stage snapshot/restore |
stop the reconcile ladder destroying good drafts | P30 T0 (defect, load-bearing) |
rtu_match error surfacing |
put the real cc1 error in the verdict output, not behind --stderr-out |
P30 T0 |
| frontier reconciler | family_hseq↔progress instance-count agreement (R32) | P30 T0 |
recovery driver (extend recover_integration.py) |
tiered T0/T1 blast-radius integration recovery at scale | P30 T1 (measured 14/36 in P29) |
-O0 Arm-A splat fix / no-recarve driver |
unlock the 10-family -O0 cluster |
P30 T2 (the biggest single distinct-unlock candidate) |
| grinder family-warm-start + 2 bug fixes | drift members as token-free CPU work | P30 (carried from P29 Task 4) |
| burn-down tracker | git log docs/progress.fleet.md (R33) |
done (P29 T99 recipe) |
diff_regions.py |
basic-block mismatch attribution → C lines | BUILT (P29 T1); used through P32 |
member_adapt.py |
exemplar→member delta engine | VACATED — h_exact case → dedup_extend; h_seq case dissolved (the -O0 artifact, P29 T1); only the 86-member W4-STRUCT slice could ever want it — not planned |
| family-adapt fine-tune (7B) | tune the local model on the adaptation task | VACATED with member_adapt — same dissolved premise; W4's 86 STRUCT members cannot justify a fine-tune |
| parallel gate farm (same-binary shards) | 5–10× gate throughput | conditional on P30/P31 wave volume (the distinct-binary farm exists in bulk_harvest) |
| fleet Ghidra-C prefetch (tail + main) | drafting fuel where cache coverage is 0 | P31 (R23/R29 discipline; the reach-138 head is already cached 146/159) |
| main second oracle | independent boundary oracle for the EXE (contract §1.3) | P31 T2 |
| canonical-decl-reconcile | the resident PLUMBING def-side fix | P31 T3 (design doc exists) |
cc1_probe kit |
packaged gdb-on-cc1 / RTL-dump / RTL-differ for wall re-attacks | P32 |
Build-along-the-way remains the doctrine (R16) — this table is the foreseen set, not a cap.
5. Standing invariants (every phase)
- The whole-binary byte-gate is the sole arbiter (G3/P9);
match_one/closeness/h_seq/ masked-MATCH are candidates, never banks (§52b — ~half of close=0 drafts fail the gate). - R22 clean-fleet verification per banked batch (
make clean+ extract-all +check-all). - Tool-health gates green before matching: corpus · cdecl · audit-binaries (R36) · report (lint + dedup-check), fail-closed — and fix the instrument before trusting its measurement (R35): a 0% from a broken tool is not evidence.
- Blast-radius typing on every integration write (P29 T16): T0 draft-only / T1
binary-local → the per-binary gate is sufficient; T2 fleet-shared (
src/shared/**) → R22 mandatory; the driver measures the write set and asserts containment. - Probe before costing (P29's error ledger; R37 candidate at the P29 PhaseEnd): probe one
member/instance before pricing or scoping a job; derive attribution from
corpus.stubsbefore/after; diff the artifact to prove an edit ran. - Predictions are gate-validated on samples before scaling (R14).
- One commit per task after the
CURRENT_PHASE.mdupdate; Drew pushes (R6/R20). - The flywheel: idioms → cookbook + tooling in the producing session (R16/R30); strategic
pivots →
docs/decision-log.md(R31); PhaseEnds carry the Roadmap delta line. - Effort/model transitions are prompted, never assumed (R26/R27) — Claude cannot toggle
/effortor the model itself. - Velocity + all three metrics reported at every phase close — the flip-timing checkpoint (§1) runs on these numbers.
6. Risk register
| risk | posture |
|---|---|
| The W1/W2/W3 yield numbers rot (again) | Every plan-scale number above is dated + source-cited; P30 T0 re-derives ALL of them on repaired instruments before any wave is scoped. This file's two predecessors both rotted within one phase — assume this one will too and re-derive |
The -O0 Arm-A wall resists the splat fix |
The no-recarve staging driver is the independent fallback (sketched in logs/Phase29); if BOTH fail, the ~1,287 distinct move to the wall ledger honestly — never force-banked |
| Type-1 modules surprise (big, or unmappable) | 3 are window-capped (true sizes unknown) — size them at P31 T1 open; load-address RE is R10-gated (≥3 datapoints); anything unmappable is documented-excluded, which the contract permits with evidence |
| Walls may hold for a long time | True-100% accepts this: no false completion, no redefinition (P9); P32 iterates with a Drew-reviewed re-attack cadence; model generations re-price walls |
| Frontier-model availability is episodic | v1's "Fable5 window expires ~7/19" lapsed, yet Fable 5 served the 07-30 re-baseline — treat availability as episodic: spend frontier capacity on discovery/walls/synthesis whenever present, never on wave fuel (calibration: its ROI is idioms, 0/5 direct banks) |
| Scale honesty | ~17.6k distinct fns at measured velocity is a multi-month solo+agent grind; the per-phase velocity report keeps the flip-at-100% decision falsifiable rather than assumed |
| Instrument rot | R32/R33/R34/R35 + the phase-open tool-health ritual; the named D-bucket defects are P30 T0, not "later"; any tool newly promoted to load-bearing gets its coverage assertion first |
7. Superseded & side notes
- Roadmap v1 (2026-07-15) is superseded by this v2 (2026-07-30); full v1 text in git
history (
0e5d64956). What v1 held open, P27–P29 resolved: the member-adapt swing number (dissolved — the "~3%" was an-O0compile-flag artifact;member_adapt+ the family-adapt fine-tune vacated); the "structural families ≈0%" doctrine (retired — B2 lives, 102/115); the pin-crash wall (dissolved P27); the Fable5-window urgency (lapsed; availability proved episodic); the P29 family campaign itself (ran 25 sessions, +18.6pp instr, engine measured spent at T98). v1's P30/P31/P32 substance carries forward as v2's P31/P32/P33 with corrected buckets (v1-B7's behemoth list was stale; v1-B9/B10 numbers re-measured). docs/family-endgame-megaplan.mdremains superseded (since 2026-07-15; banner intact — kept for the record).- Libs-from-source (decompile the PsyQ libraries; sotn precedent): recorded as a far-future stretch after game-code 100% — Drew, 2026-07-15. Not planned.
- Sister-decomp idiom harvest (Vagrant Story, CC0 —
docs/sister-decomps.md): a parked ceiling-breaker if BFM's own idiom well runs dry; requires Drew's greenlight and the content firewall. - The flip-timing tension (strategy review vs Drew's flip-at-100%) is documented in
docs/decision-log.md(2026-07-15) with the standing velocity checkpoint that keeps it honest.