20 KiB
CURRENT_PHASE — Phase 32: the last 21 + the parked 5 (short, kill-gated)
Gate 1 approved 2026-09-05 (Drew, plan mode, Max, Fable 5.1). Rules R44–R63 ratified at gate 1 (binding). The approved plan (full text):
~/.claude/plans/plan-mode-enabled-max-iterative-ember.md— its substance is this file. Jumping-off document:docs/frontier-p32.md. Roadmap:docs/roadmap-to-100.mdv2 §3 (P32 as written is consumed; P32 is this census) +PhaseEnd_Phase31.mdRoadmap delta. Baseline HEAD at open:commit:3900(Phase-31 close + post-close docs; nosrc//config/change since the S80 census — verifiedgit diff commit:3898..HEAD -- src config Makefileempty).
Milestone (gate 2)
Every one of the 21 census rows is BANKED or carries a FINAL verdict (PROVED wall / candidate wall with a gcc-mechanism citation + a bounded-attempt record / deferred with its cost stated); each of the 5 parked payloads is onboarded byte-identical at a byte-proven base (its stubs then join the census and are banked or ledgered the same way) or carries a documented exclusion with the static + runtime evidence; the fleet is byte-identical (R22) at every banked batch; the PhaseEnd carries the final wall ledger, the corrected denominators (main game-code 41,556 — the 22-ins Ghidra-boundary gap), all three metrics, and the roadmap delta (P33 = verify + flip).
Kill gate: a session that banks nothing and produces no new verdict ends the crack work (T3); the parked-5 work is bounded to the static candidate list + one static-RE session; no forced banks, no redefinition (P9). Scale estimate: 3–5 sessions.
Effort / model (R7/R26/R27 — every transition is PROMPTED, never assumed)
- Max through T0–T2 (T2 is non-obvious static RE; T0/T1 are settled-design and would be fine at xHigh).
- Prompt to drop to xHigh for T3 (orchestration) and T4 (ledgering); prompt back to Max for T5 (PhaseEnd).
- Models: T1c one Sonnet agent (123 ins); T3 Opus for all 11 targets (escalation tier — Sonnet plateaued on
the ≤120-ins rows in S79); Fable only if an agent names a wall class the codegen map lacks — STOP and prompt
Drew first. No Ultracode / Workflow: one-page census → the S80 one-agent-per-function shape
(
docs/wave-playbook.md§S80 addendum, Agent-tool subagents;tools/agent_verdicts.pyfor any that outlive a session).
Adjustments vs frontier-p32.md §4 (approved)
- The parked 5 (T2) run BEFORE the crack pass (T3): the static header probe (2026-09-05) gave every payload a
deterministic candidate base, so T2 is a set of ~0-token
new_binary.shbyte-gate probes, and any stubs they add ride the same single bounded agent pass. - Tooling-first split into three tasks, one commit each (P4/R42/R60).
- No MCP dependency for the parked 5 (static evidence + our own matched C); MCP only as a fallback (R29 prompt).
- Walls get a ledger task (T4), not drafting — incl. fixing two dangling best-draft paths (R62).
Tasks (strict order; one commit per task after this file is updated; count banks from the SOURCE)
- T0 — Phase open (Max) — DONE 2026-09-05: verbatim 5==5 · exclude 8/8 fresh · census 21 (B-CARVE 4 / D-NEAR 10 / F-FAR 7,
.run/P32/frontier_p32_open.json) · tools-health OK · check-all 213/213 rc 0 (.run/P32/t0_baseline.log): this file; harness task list (R28); baseline reads —verbatim_check --strict(5==5),exclude_audit --assert-fresh,frontier_classify --json .run/P32/frontier_p32_open.json(21),make tools-healthOK,make check-all213/213 (read of the on-disk S80 artifacts); commit. - T1a — resident: split the code subseg, bank
func_800D128C(243) — DONE 2026-09-05: BANKED byte-identical8e17e02f…(commitscommit:3902split +commit:3904bank); R22 after the bank: check-all 213 passed / 0 failed, rc 0 (.run/P32/t1a/r22.log); resident stubs 2 → 1; THREE instrument fixes on the way (cookbook §496 carrier provided-types, §498 carve--predrop + gate ignoring the extract rc + interleave_check false DRIFT); twin_rescan: 20 open, nothing newly free. Original brief:jr_isolate_all resident --only func_800D128C(dry-run CLEAN 2026-09-05: 3 region files, carve repointresident → resident_jr_800D00E4,--order+JTBL_PADS) →make extract BINARY=resident && make build BINARY=resident -j8(EXIT CODE, R53; byte-neutral split) → commit carve state alone (R60) →rtu_matchthe closeness-0 draft.run/S71_gate14/resident/func_800D128C.cin the new region TU →parallel_gate --r22(carvesjtbl_80113FB8+jtbl_80114198;pads_auditafter) → in-tree build exit code → commit →twin_rescan. TU refusal → §376/§378 chain as a byte-neutral plumbing commit BEFORE re-gating. - T1b — ov_SC02_017: split + remap the twin, bank
func_80186C64(209) — DONE 2026-09-05: BANKED byte-identicalc0253499…(commit:3903carrier §497 fix — NO source rename needed ·commit:3906split ·commit:3907bank); 0 drafting tokens; four §376 TU spellings + one TU-provided typedef stripped. Original brief (Max/xHigh): byte-neutral tag rename insrc/ov_SC02_017/ov_SC02_017_jr_8017DF34.c(:4314/:4319; keep the typedef name) → build sha-unchanged → commit →jr_isolate_all ov_SC02_017 --only func_80186C64(dry-run REFUSED on the conflict 2026-09-05; expect CLEAN after the rename) → extract/build byte-neutral → commit carve state →family_remap --addr 0x801810C8 --from ov_SC02_016 --to ov_SC02_017 --to-addr 0x80186C64(d=2 RELOC-ONLY twin; sourcesrc/ov_SC02_016/ov_SC02_016_jr_801810C8.c:2839) → strip typedefs the TU already defines (§491 gap 2) →rtu_match→parallel_gate --r22→ commit →twin_rescan. - T1c — md_MAIN_034: bank
func_800CB00C(123) — DONE 2026-09-05: BANKED byte-identical46153c06…(commit:3908) from the STORED S72 body.run/O21/opus/func_800CB00C.c(rtu MATCH 123/123; the census's best_draft was a name-collided WRONG file, R48/R38) — NO agent; WALL pin dropped (exclude 8→7); backlog 18→17. R22 after the T1b+T1c batch: check-all 213 passed / 0 failed, rc 0 (.run/P32/t1b/r22.log). Original brief: pack viaclaude_wave_packs(the stored 174-ins draft is WRONG, not a seed; §494 jtbl idioms) → verbatim grep →rtu_match --split md_MAIN_034 --source md_MAIN_034→parallel_gate(island pads derive at build, §303) → commit →twin_rescan; drop themd_MAIN_034:func_800CB00Cpin (exclude_audit --write). Progress report to Drew after T1c. - T2 — the parked 5 (Max):
- T2a — DONE 2026-09-05 (
commit:3909): controls 7/7 (5 STRONG, 2 CONSISTENT; TEXT_LO estimates == yaml); the five: MAIN/7 STRONG 0x800CEDF8 · MAIN/9 STRONG 0x800CD348 · SC03/53, /54 CONSISTENT top 0x801EF468 (12-way tie) · SC03/56 SPLIT (jal vote 0x80178C8C vs ptrs/lui ~0x801CBB50); memory-map §S45 p7; SETUP row. Brief:tools/payload_base_evidence.py(id word, first prologue → TEXT_LO, abs-pointer window, lui hi-half histogram,jalself-consistency per candidate base, DESTPTR lookup in the window from.run/idxtab_map.json) — R39 controls: must re-derive md_MAIN_008/011 (0x800CEDF8), md_MAIN_042 (0x800CCB1C), md_MAIN_013 (0x800CAE08), md_SC03_073 (0x801EF468) from their payloads alone; refuses a payload with no self-reference (base-independent bytes — say so, never guess). SETUP row (R21); evidence rows →docs/memory-map.md§S45 p7 (G5static-derived, US). Commit. - T2b — DONE 2026-09-05: ALL FIVE onboarded on their first candidate, byte-identical first builds — md_MAIN_007 @0x800CEDF8 (
commit:3911, 19 stubs, A4 applied) · md_MAIN_009 @0x800CD348 (commit:3912, 11) · md_SC03_053 + md_SC03_054 @0x801EF468 (commit:3913, 15 + 7) · md_SC03_056 @0x801CBB50 (commit:3914, 4). Fleet 213 → 218; +56 stubs (~2,600 ins). Instrument findings (R34/R35): the all-INCLUDE_ASM first build is a NULL oracle for FINE base errors (+8 builds byte-identical; +0x1000 fails the link) — bases are static-derived STRONG, byte-proven by the first internal-call C bank; a jal-vote base whose targets are shared-engine function starts is OUTWARD-EXPLAINED (SC03/56's false 0x80178C8C). Close chain (sig-modules → tools-health → audit-disc → R22 of 218) running:.run/P32/t2b/close.log. Original brief: onboard probes, one payload per commit, top candidate first (the module-class law: the FIRST build's byte-identity is the arbiter; a miss → next candidate; none → stays parked with the evidence):md_MAIN_007 extracted/retail/MAIN.CD.dir/FILE_007 0x800CEDF8 0x34(9/9 internal jals on its own prologues at that base; omitsymbols.resident.txt, A4 law) ·md_MAIN_009 …/FILE_009.dir/0.1 0x800CD348 0x3C(the unique base fitting both in-region jals; then 0x800CAE08, 0x800CCB1C) ·md_SC03_053 …/SC03.CD.dir/FILE_053.dir/0.1 0x801EF468 0x4·md_SC03_054 …/FILE_054.dir/0.1 0x801EF468 0xF0·md_SC03_056 …/FILE_056.dir/0.1 0x801CBB50 0x4(then 0x801CBD90, 0x801CC6E0). After each success:make sig-modules,make tools-health(R36),make audit-disc(UNCLAIMED 5 → 5−N), commit. - T2c — DONE 2026-09-05: 20 free banks in the five new modules for 0 drafting tokens (
commit:39188 ·commit:39195 ·commit:39207): 7 d=0 hash twins + 3 RELOC-ONLY viafamily_remap, 9 constant-only NEAR-COUSINs (each constant named by the real-TU diff), 2 hand pass-throughs (main'sfunc_80014128shape);dedup_extend0 (no macro-group members);split_indicatorpopulation fix (commit:3917, was a stale 213 list — R51). R22 after the batch: check-all 218 passed / 0 failed, rc 0 (.run/P32/t2c/r22.log). Census: 54 stubs / 6,376 ins (.run/P32/frontier_t2c_close.json: main 12 · md_MAIN_007 15 · md_MAIN_009 10 · md_SC03_053 6 · md_SC03_054 4 · md_SC03_056 1 · ov_SC03_105 2 · resident 1 · md_MAIN_003 1 · ov_SC06_022 1 · ov_SC07_002 1).make audit-discUNCLAIMED 0 of 220; disc-completeness.md P32 section written; cookbook §499 + decision-log S81 (R31). Brief: free banks + census:twin_rescan/dedup_extendfor h_exact twins of the new stubs; regenerate the census; leftovers join T3. Updatedocs/disc-completeness.md(+ ledger regen), decision log (R31). - T2d — NOT NEEDED (both MAIN/7 and MAIN/9 onboarded on their first candidate). Brief: (only if MAIN/7 or MAIN/9 refuse every candidate): one bounded static-RE pass over our own C
(
src/800.c,src/boot.c,src/resident/resident.c:loadDestPtrTable,D_800D3764/D_800D384C, theresourceIdMapsites) for a route producing global index 7 or 9; MCP (R29) only if the C is insufficient. Outcome: a base, or the strengthened exclusion evidence. Progress report after T2.
- T2a — DONE 2026-09-05 (
- T3 — one bounded crack pass, Opus agents, one per function (xHigh orchestration — prompt R27):
targets =
main:func_80023BF011 ·func_8003869811 ·func_80039B207 ·func_8003930834 ·func_80015B6C40 ·func_8002FDE835 ·func_8001BC6C28 ·ov_SC03_105:func_8018581037 ·md_MAIN_003:func_800CF3E854 ·ov_SC07_002:func_8017DC8084 ·resident:func_800D06E8344 (after a byte-neutral fix of theStruct80078E78typedef clash) + any T2c leftovers. Cheap second looks first:func_80023BF0(VERIFY the S80 permuter waypoint's semantics before seeding) andfunc_80039B20. Packs:claude_wave_packs(S79 verdict incl. INERT list, exact-length best draft, matched same-TU neighbour, §494/§495 laws, the fixed permuter recipepermuter_ils … --cycles 8 --secs 150 --j 3); brief =.run/S79w/SYS.md. Per result, never in bulk: verbatim grep →rtu_match(main:--tu src/<TU>.c) → gate (parallel_gate --r22/ main:gate_main <slate> --apply, read the BODY/TABLE/PLUMBING/MIXED line) → commit per bank (R42) →twin_rescan; plateaus →backlog.py logwith attempt + cost (R41). Expected 1–4 banks (S79: 3/11 on the Opus F/G tier), ~0.6–1.4M tokens. Progress report after T3. - T4 — the walls' FINAL verdicts (xHigh; no drafting): the 8 pinned rows — confirm each citation current
+ instrument exonerated (R40), PROVED vs CANDIDATE, ledger best-draft → an existing real-TU-clean C file (R62:
func_80011380→.run/m3/opus/func_80011380.c;func_801834A4→.run/S71_gate14/ov_SC03_105*/),exclude_audit --write,backlog.py render; a T3 idiom naming a wall's mechanism re-opens that row (bounded: one attempt, permuter first). Wall table into this file; cookbook §496+; decision log; accelerators. - T5 — PhaseEnd (Max, Tier 1 — prompt R27): P7 checkbox walk; milestone demo (R22 fleet N/N, tools-health,
verbatim_check --strict, final census, wall ledger, parked-5 dispositions viamake audit-disc,make reportall three metrics + main143dbb89…with/without SDK dirs, corrected denominators); WAIT for gate 2;PhaseEnd_Phase32.md(+ Roadmap delta + Plain-English Recap);git mvthis file →phase-ends/logs/Phase32.md(R19); R23 MCP stop if it ran; leave both uncommitted for Drew (R6); 🛑 (P8).
Standing procedure (every task)
Fix the TU by a byte-neutral plumbing commit BEFORE any gate (S77 law) · commit banked work before the next
command that can touch src/ (R42) · after any bank: twin_rescan, verbatim_check --strict (R62) · after a
carve/merge touching a yaml/.mk: make extract BINARY=<b> before building; pads_audit/interleave_check on
every touched carve binary (R60) · fleet verify after every banked batch: make clean && make extract-all && make check-all — read EXIT CODES (R53), quote the green count at every close (R58); make tools-health · log each
task here + refresh the 🛑 checkpoint before any pause · rules check every 4 tasks (P6) · harvest idioms into the
cookbook before the next drafting step (R16/R30) · no Co-Authored-By trailer (R5); keep the Claude-Session: line.
Blockers
- Ghidra MCP not running at open (clean stop in the log; the SessionStart hook's server did not persist). Not
needed for T0–T2b; if T2d needs it:
tools/ghidra_mcp_start.sh→ pause → Drew runs/mcp(R29) → G2 ping.
Log
- 2026-09-05 — gate 1 approved; T0 opened at HEAD
commit:3900. - 2026-09-05 — T3 LAUNCHED (xHigh): 47 targets = census 54 − 7 pinned walls (
.run/P32/t3/targets.json, 5,288 ins); packs built (claude_wave_packs, 47/47 neighbours, 10 journals); brief.run/P32/t3/BRIEF.md. 20 Agent-tool drafters running (16 Opus: the 11 old near/far rows + resident func_800D06E8 + the 4 largest new bodies · 3 Sonnet · 1 Haiku); 27 Haiku queued behind the harness's 20-concurrent cap (.run/P32/t3/pending_launch.txt, launched one per freed slot). Recovery + per-result route:.run/P32/t3/LAUNCHED.md. - 2026-09-05 — T2c DONE (R22 218/218 rc 0) · T2d not needed. Twenty of the 56 new stubs fell to twin remaps and constant flips (0 tokens); the rest (36, all ≤50 ins but one, never drafted) join T3 on the model ladder. Session limit reset here (Drew); effort now xHigh via
/model(the T3 orchestration level, R27 satisfied). Settings-file JSON defect fixed (a trailing comma). - 2026-09-05 — T2b DONE — the parked ledger is EMPTY: all five payloads onboarded byte-identical (MAIN/7 → md_MAIN_007 @0x800CEDF8; MAIN/9 → md_MAIN_009 @0x800CD348; SC03/53, /54 → md_SC03_053/054 @0x801EF468; SC03/56 → md_SC03_056 @0x801CBB50). Every base came from T2a's static alignment (self-calls / fn-ptr-table entries on the module's own function starts; controls 7/7), NOT from the byte check — two negative controls showed the first build is base-lenient (fine offsets) and only catches gross errors. Two tool refinements en route (combined STRONG rule; outward-explained vote bases). The 100% claim loses its last asterisk once the new stubs are banked or ledgered (T2c/T3).
- 2026-09-05 — T1b + T1c DONE (R22 213/213 rc 0 for the batch) · T2a DONE. Both banks were ZERO-token: T1b's body came from
family_remapof the d=2 twin (+ four TU spellings), T1c's from a stored S72 body the census had mis-keyed (R48) — the journals (R38) named both. Census 21 → 18 stubs (resident 1 · main 12 · md_MAIN_003 1 · ov_SC03_105 2 · ov_SC06_022 1 · ov_SC07_002 1). T2a's instrument gives every parked payload a bounded probe list; two are STRONG. - 2026-09-05 — T1a DONE —
resident:func_800D128CBANKED (243 ins, byte-identical 8e17e02f, R22 213/213). The stored S71 closeness-0 draft was byte-correct all along; the whole task was three instrument defects the resident (the fleet's onecommon.h-only,--pre-sandwich binary) exposed in overlay-only assumptions: (1)jr_isolate_alldropped a file-local typedef whose name engine_types.h also defines (§496 — fixed: provided types derived from the TU's own includes); (2)jtbl_carveregeneratedJTBL_INTERLEAVEwithout the--pre hdr.rodata.oclause → extract refused → the gate linked a stale script and booked the byte-correct draft as DIFF;harvest_verifyignored that extract's rc (§498 — both fixed, R49/R61); (3)interleave_checkread a--preline as n=0 (false DRIFT; fixed). R38 then found two more stored MATCH bodies for T1b/T1c (see their rows). Effort stayed Max. - 2026-09-05 — T0 DONE. Baseline reads all green (
.run/P32/t0_baseline.log):verbatim_check --strict5 bodies == 5 rows;exclude_audit --assert-fresh8 entries, 8 WALL, 0 stale;frontier_classify→ 21 rows = the S80 census exactly;make tools-healthOK (sigs fresh, corpus(+resident), cdecl, audit-binaries 213/213, report lint+dedup, cookbook-index, split_indicator 213 OK);make check-all213 passed / 0 failed, rc 0. Harness task list #1–#11 built (R28). NEXT = T1a.
🛑 SESSION CHECKPOINT — T0 CLOSED (2026-09-05)
Written for a FRESH SESSION with none of this context. Phase 32 plan approved (gate 1, Drew, 2026-09-05, Max,
Fable 5.1); rules R44–R63 ratified. T0–T2d DONE — 3 + 20 banks, 5 onboardings, fleet 218/218 (R22 after every batch), census 54 stubs / 6,376 ins (7 pinned walls · 11 planned Opus targets · 36 new-module H-VIRGIN stubs). T3 (task #9) IN PROGRESS at xHigh — 20 drafters running, 27 queued (.run/P32/t3/LAUNCHED.md has the recovery route); on each completion: verdict → rtu_match → gate → commit → twin_rescan, then launch the next queued Haiku. Original: packs for 47 draftable targets on the model ladder (Haiku ≤50 / Sonnet ≤120 / Opus >120; the 11 old near/far rows Opus by escalation), one Agent-tool subagent each, per-result gate + commit (R42) + twin_rescan. Superseded: NEXT = T2c (task #7): after the close chain — twin_rescan / dedup_extend over the 56 new stubs, census regen, disc-completeness + disc-ledger + decision-log (R31), R22 quote. Superseded: 3 banks (resident func_800D128C · ov_SC02_017 func_80186C64 · md_MAIN_034 func_800CB00C), census 21 → 18, fleet 213/213 after each batch. NEXT = T2b (task #6): new_binary.sh probes in memory-map §S45 p7's order (MAIN/7 @0x800CEDF8 TEXT_LO 0x34 first; A4: the boot slot omits symbols.resident.txt). Superseded detail follows: NEXT = T1b (task #3) — the carrier fix is committed (commit:3903); the twin-remap draft .run/P32/t1b/drafts/func_80186C64.c is being reconciled to the TU's spellings (§376: func_8012A828/D_801E0F44 done, func_80131E00/func_80185F88 next) before the isolate + gate. T1c (task #4) needs NO agent: .run/O21/opus/func_800CB00C.c and .run/S75/redraft/func_800CB00C.c are BOTH rtu_match MATCH 123/123 in the real md_MAIN_034 TU — splice + gate, then drop the WALL pin.** Effort Max for
T0–T2 (see the Effort block). Census at open (= S80, unchanged): 21 stubs / 4,554 ins — main 12 (2,077) ·
resident 2 (587) · md_MAIN_003 1 (469) · md_MAIN_034 1 (152) · ov_SC02_017 1 (209) · ov_SC03_105 2 (595) ·
ov_SC06_022 1 (119) · ov_SC07_002 1 (346); B-CARVE 4 / D-NEAR 10 / F-FAR 7 (docs/frontier-p32.md §1 has every
row's blocker, draft and route). Fleet at open: 213/213 byte-identical (S80 R22), instr 100.0%, distinct 99.9%,
main 99.43% byte-identical / 95.0% game-code (denominator 41,556). Exclude list 8 pinned walls; backlog 18 rows;
verbatim manifest 5 PERMANENT. Parked 5 with deterministic candidate bases — see T2b. Ghidra DB churn
(ghidra/db.*.gbf, ~index, *.prp) is R23 restart-noise: do NOT stage it.