mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 22:45:39 -04:00
14b115d8ba
- roadmap §1.1: 183 onboarded binaries; the 100% claim's exclusion list = the 34-row parked-for-L3 ledger (28 script + SC02/9 + MAIN/7/9 + SC03/53/54/56 — 3 rows S44 never tiered); supersedes the '39 type-1 backlog' framing (43 of them now build byte-identical) - disc-completeness.md S45 section: what landed, the full parked list, the L3 resolution path - decision-log: the S45 entry — five instrument findings a 'mechanical' batch surfaced, each negative-control-proven; honest baseline 94.0% instr / 95.96% fn / 87.6% distinct over 183
318 lines
26 KiB
Markdown
318 lines
26 KiB
Markdown
# 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 `commit:1211`
|
||
> (post-T98/T99) · **Supersedes:** roadmap v1 (2026-07-15, this same file — full v1 text in git
|
||
> history at `commit:1210` and 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.
|
||
|
||
---
|
||
|
||
## 0. Authority, maintenance & how future sessions use this
|
||
|
||
- **This document is docs-layer and ADVISORY.** `PROJECT_CONTEXT.md` remains 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:
|
||
|
||
1. After SDK objects are LINKED, **zero `INCLUDE_ASM` and zero linked `NON_MATCHING` under
|
||
`src/`** 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.md` UNCLAIMED; detailed in
|
||
`docs/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.)*
|
||
2. 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).
|
||
3. **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.
|
||
4. **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.md` since 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) · ~~family_hseq vs progress.py disagree~~ **RESOLVED P30 T0c: zero definitional gap** — both derive from `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_stage` snapshot/restore** (it destroys good drafts) + `rtu_match`
|
||
cc1-error surfacing; per-session velocity **derived from `git 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 `-O0` Arm-A splat wall [Max, deep; R17 web-research].** Fix the `+0x20`
|
||
re-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_extend` harvest (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_regions`
|
||
piecewise attribution + the **`cc1_probe` kit** (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)*
|
||
|
||
1. **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.
|
||
2. **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 public `make 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 asserting `dumps/` +
|
||
`extracted/` exclusion**, owner review before push); the one-way master→public sync
|
||
script; **Ghidra `ExportSymbols` types/comments text-export** (makes the DB regenerable
|
||
+ public-clean — the Phase-9/10 carried note, due here at the latest).
|
||
3. **Parking-Lot sweep at the generation boundary** (PROJECT_CONTEXT): the
|
||
Archipelago/randomizer contact (their unpublished US RAM research), the decomp.me
|
||
preset submission.
|
||
4. **Releases:** the gcc-2.7.2 codegen map (§31 + `docs/gcc-2.7.2-map/`), `xsig` as a
|
||
standalone MIT tool, the permuter-ILS/masked-scorer upstream PR, the v3
|
||
matching-drafter pipeline write-up (`docs/community-matching-model-plan.md`).
|
||
5. **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.
|
||
6. **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 | ~~build~~ **DERIVED** from `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.stubs`
|
||
before/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.md` update; 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
|
||
`/effort` or 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 (`commit:1210`). What v1 held open, P27–P29 resolved: the member-adapt swing number
|
||
(dissolved — the "~3%" was an `-O0` compile-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.md`** remains 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.
|