52 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):
DONE 2026-09-05 (S83): 47/47 drafted, 39 BANKED (10 in the launching session + 29 in S83: the 11 S82 MATCH rows, the 17 queued Haiku rows 17/17 MATCH, and func_8001BC6C cracked 6 -> 0 by permuter_ils + an R63 read), 8 NEAR ledgered in the backlog with cost, 0 FAIL, 0 walls found. Census 15 stubs / 3,758 ins = 7 pinned walls + 8 NEAR (
.run/P32/frontier_t3_close.json); md_SC03_053/054/056 100% C; resident 145/145; main 6 open (5 walls + func_80039308 NEAR 17). Fleet (make report): instr 13,484,739 / 13,488,497 = 100.0% · distinct 5,812,831 / 5,816,589 = 99.9% (90,975 / 90,984 unique) · fn-count 363,199 / 363,214 = 100.00% · INCLUDE_ASM 15. Step 8 (bounded tail): func_8001BC6C BANKED; func_800CD674 permuter plateau at the same $a3<->$t1 pair; func_800CF3E8 Opus second look NO GAIN at 27 but the §500-D1 mechanism corrected (cse find_best_addr) and its lever refuted (§500-H). Harvest: cookbook §500-F/G/H, BRIEF.md, jtbl_carve probe text, Makefile C_SRCS dotfile guard (a masked_diff probe broke a gate_main rebuild). Fleet R22 218/218 at 10:46, 11:09 and 217+main extracted, 218 passed / 0 failed, exits 0/0/0 at 12:00 MDT (S83). Original brief: 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 — DONE 2026-09-05 (S83, xHigh, no drafting): all 7 pinned rows re-probed IN TU CONTEXT (
rtu_matchin the real TU; the three CC1-FAIL rows via a sandbox TU copy under.run/P32/t4/tu/— every CC1 FAIL was plumbing, R40) and every one reproduced its recorded residual: 1 PROVED (main:func_80011380§474, DIFF 6) · 6 CANDIDATE with current citations (func_80032A741 ·func_80020DA42 ·func_80039DEC2 ·func_800391D43 ·ov_SC06_022:func_8017DF282 ·ov_SC03_105:func_801834A46). No verdict changed. Deliverables: the wall table below;config/wave_exclude.txtannotated per row,exclude_audit --assert-fresh7/7; backlog rows for all 7 (the two path-less rows given existing drafts, R62;func_80032A74got a TU-clean synced draft.run/P32/t4/drafts/func_80032A74_tuclean.c); cookbook §500-I;docs/accelerators.md(8); decision-log (the final wall doctrine, R31). Original brief: 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. - [~] T4b — crack and bank the final 15 (ADDED 2026-09-05 by Drew's directive; supersedes the kill gate: "anything that isn't the original hand-written asm or the PsyQ libs needs to be cracked and banked before we finish") — FIRST PASS COMPLETE 2026-09-05 (S83): 11 of 15 BANKED byte-identical, 4 carried to the NEXT session's HAND pass (Drew: no second agent round; hand-crack the remaining ones). Hand pass first (22 spellings, 0 banks, every blocker refined to a mechanism in
.run/P32/t4b/<fn>/NOTES.md), then one Fable agent per row (permission, not requirement — Drew), resumed 3-at-a-time through three usage-limit outages. Banked (each: coordinatorrtu_matchin the CURRENT real TU →gate_main/bank.shbyte-identical → one commit; pins dropped byexclude_audit --write; mechanism in cookbook §501–§501-L):main:func_800391D4commit:3956·main:func_80039DECcommit:3959·md_MAIN_009:func_800CD674commit:3964·ov_SC06_022:func_8017DF28commit:3966·main:func_80020DA4commit:3969·ov_SC03_105:func_801834A4commit:3972·md_MAIN_003:func_800CF3E8commit:3976·md_MAIN_009:func_800CD92Ccommit:3979·ov_SC07_002:func_8017DC80commit:3983·main:func_80011380commit:3990(the §474 "PROVED" wall) ·md_MAIN_007:func_800CF6D0commit:3992. Ten of the eleven were T4 "walls" or long-standing NEARs. Carried (4, all exact length, indocs/backlog.mdwith next levers):main:func_80032A741 (the last pin; ghost pseudo — near-proved) ·md_MAIN_007:func_800CF4083 ·main:func_800393084 ·ov_SC03_105:func_8018581013. Close: fleet R22 218 passed / 0 failed, exits 0/0/0 (23:33–23:36 MDT,.run/P32/t4b/r22_full.log);make report: instr 13,486,890 / 13,488,497 = 100.0% · distinct 5,814,982 / 5,816,589 = 100.0% (90,982 / 90,984 unique) · fn-count 363,210 / 363,214 = 100.00% · INCLUDE_ASM 4; main REAL 787 · LINKED 1,256 · VERBATIM 3 · stubs 2 · 2,089 / 2,091 = 99.90% ·143dbb89…; census.run/P32/frontier_t4b_close.json4 stubs / 1,607 ins; decision-log P32 S83 T4b (R31); accelerators (10)–(11); tools-health OK (.run/P32/t4b/tools_health.log). - 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).
T4 — the walls' FINAL ledger (S83, 2026-09-05; every row re-probed in TU context; config/wave_exclude.txt carries the same lines)
| row | ins | class | closeness leaf / real-TU (S83) | mechanism · citation | bounded attempt record | verdict | best draft |
|---|---|---|---|---|---|---|---|
| main:func_80011380 (boot, −O0) | 192 | C-level floor | 6 / 6 (rtu --o0) |
fold-const.c:882 split_tree merges MULT(MULT(i,2),2); the two escapes each cost one insn (stupid.c:497 adjacency / expand_decl use-brackets) — cookbook §474, §388 −O0 colouring oracle |
20 spellings + statement-expression + (t=i*2)*2 register form (S76 proof); pinned S79 #8 |
PROVED | .run/m3/opus/func_80011380.c |
| main:func_80032A74 (800_b_2) | 422 | FRAME/WIDTH | 1 / 1 (synced draft) | sole residual idx 244 lh vs lhu: extendhisi2 is a force_not_mem EXPAND (an orphan frame slot is minted only at an lh); the target's +8 frame bytes = §172 producer 3 (caller-save area, reload1.c:1445) |
~200 byte-probes + 100-variant retyping sweep (S79 Opus) + permuter_ils 8×150 s null (S80); S83: CC1 FAIL was 7 header typedefs + 4 decl spellings → synced copy DIFF 1 | CANDIDATE | .run/P32/t4/drafts/func_80032A74_tuclean.c |
| main:func_80020DA4 (800) | 100 | REGALLOC-PERM | 2 / 2 | phantom 16-byte frame reproduced (address-taken frame_pad[3]); residual = mflo destination $t0 vs $a2; pinning regresses to 79 |
5 attempts 51→20→14→8→2 (S7x/S79) + permuter_ils null (S80); S83 rtu DIFF 2 | CANDIDATE | .run/S79w/sonnet/func_80020DA4.c |
| main:func_80039DEC (800_c) | 74 | REGALLOC (K&R) | 2 / 2 (sandbox TU, no-proto decl) | the $a3↔$t0 swap of the two K&R raw-preserve parameter copies is fixed by ARGUMENT POSITION in gcc-2.7.2 narrow-parameter promotion (2nd → $a3, 3rd → $t0) before global-alloc; every pin regresses to 60–75 (cookbook §376/§495 K&R laws, lines ~1320/1508) |
3 attempts (S7x/S79 Sonnet 9) + permuter_ils 9→2 (S80); S83: CC1 FAIL = the TU's narrow prototype at 800_c.c:3496 vs the K&R def | CANDIDATE | .run/S79w/permuter/func_80039DEC.c |
| main:func_800391D4 (800_c) | 75 | SCHED (loop) | 3 / 3 (sandbox TU, [][1] externs) |
3-insn SCHEDULE-REORDER (off init vs arg1's sll/sra): move_movables splices hoisted invariants after any pre-existing preheader flow code (loop.c 2.7.2:1529; map loop.md L4) |
4 prior + S79 Sonnet 64→3 (i=$7 pin kills combine_givs, D_80073140[][1] decl, 7 asm("") pads) + permuter_ils null (S80); S83: the [][1] spelling is load-bearing (TU-compatible forms → 65 @ 76) |
CANDIDATE | .run/S79w/sonnet/func_800391D4.c |
| ov_SC06_022:func_8017DF28 (jr_8017BEBC) | 119 | SCHED (slot) | 2 / 2 | expand_block_move copy_addr_to_reg pseudo cse-reused for both later &mtx args (map cse_expr.md [A23-2]/§H); addiu $s2,sp,0x10 in the jal delay slot vs the target's bnez slot |
five RTL-verified attempts (S71/S79); permuter_ils "1" was a divergent rewrite (S80, R63); S83 rtu DIFF 2 | CANDIDATE | .run/S79w/sonnet/func_8017DF28.c |
| ov_SC03_105:func_801834A4 (jr_80181C84) | 106 | SCHED (loop) | 6 / 6 (×3 variants) | loop.c movable ordering (S71) | S71 gate14 resolver variants cn-cast / -rc / -rc-sd all DIFF 6; S83 rtu DIFF 6 ×3 | CANDIDATE | .run/S71_gate14/ov_SC03_105-cn-cast-rc-sd/func_801834A4.c |
| (unpinned) md_MAIN_003:func_800CF3E8 | 469 | ALIAS-BASIN | 27 / 27 | cse.c find_best_addr (fold_rtx MEM; COST pseudo 0 vs hard reg 1) swaps the bare-REG tag-load address to a pseudo; the alias lever refuted 5/5; the pinned-pointer launder frees the load but lands it 4 slots late (79 @ 470) — §500-H |
S79/S82 Opus + S83 Opus second look (245k tokens, ~16k compiles) | CANDIDATE (backlog, not pinned) | .run/P32/t3/opus/func_800CF3E8.c |
The other 7 NEAR rows (func_80039308 17, func_800CD674 2, func_800CD92C 15, func_800CF408 49, func_800CF6D0 137, func_80185810 35, func_8017DC80 46) are DEFERRED WITH COST in docs/backlog.md (class · closeness · best draft · agent/permuter cost), per the milestone's third disposition.
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
- 2026-09-05 09:xx: the successor session's SessionStart hook launched a headless Ghidra MCP server (
.run/ghidra-mcp.log); T3/T4 do not use it; no RE writes → never stage theghidra/churn (R23). - 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 13:05–23:40 MDT (S83, continued) — T4b first pass COMPLETE: 11 of 15 banked, 4 carried. Fifteen Fable agents launched from
.run/P32/t5x/(BRIEF + packs + the hand-pass NOTES); three usage-limit outages killed every run (resumed each time via SendMessage with context intact; "write deliverables early" saved one crack from a dead run); from the second outage on, resumed 3 at a time (Drew). Verdicts: 11 MATCH (each re-verified by the coordinator in the CURRENT real TU and banked byte-identical — main rows viagate_mainslates, overlays/modules viaSPLIT=… DRAFT_DIR=.run/P32/t5x/fable bank.sh), 4 NEAR at exact length (1 / 3 / 4 / 13) with pass-attributed residuals and next levers ledgered. Every crack came from READING a pass dump against the 2.7.2 source; cookbook §501–§501-L (12 new laws: cascades, cross-jump-after-alloc, dying-input vs birthing boost, hard-reg sets count, pins forbid retry regs, CSE-quantity split, three-passes-three-dials, constants as floaters, manufactured orphans, a proved tree wall is not an RTL wall, sched2's /s exemption, coupled dials); decision-log P32 S83 T4b; accelerators (10)–(11). Instrument defects: bank.sh (empty fn list → built the unchanged tree, exit 0;_jr_TU split; draft dir) hardened, and two premature "banked" ledger messages corrected in the next commit (memory: write the message from the tool's output). Pins 7 → 1. Fleet R22 218/218 at the close;make reportfleet 100.0/100.0/100.00, 4 stubs. Drew: no second agent round; hand-crack the remaining four next session. NEXT = the hand pass on the four (see the 🛑 block), then T5. - 2026-09-05 12:05–12:40 MDT (S83, continued) — T4 DONE. Preflight: tree clean, verbatim 5==5, R22 218/218 (12:00),
exclude_audit --assert-fresh7/7. Every pinned wall's best draft re-run withrtu_matchin its CURRENT real TU:func_80011380DIFF 6 (--o0),func_80020DA4DIFF 2,func_8017DF28DIFF 2,func_801834A4DIFF 6 ×3 variants; the three CC1-FAIL rows re-probed after their plumbing was understood —func_80032A74(7 TU-provided typedefs + 4 decl spellings →cdecl.strip_provided_typedefs+ the TU's lines → DIFF 1 in the real TU),func_80039DECandfunc_800391D4(a sandbox TU copy under.run/P32/t4/tu/with the declaration edited THERE → DIFF 2 / DIFF 3) — nosrc/edit, no byte-neutral commit spent on rows that will not bank. Leafmatch_onere-measured all three (1 / 2 (permuter) / 3). No verdict changed: 1 PROVED (§474) + 6 CANDIDATE, citations current (§474, §172 reload1.c:1445, loop.md L4 2.7.2:1529, cse_expr.md [A23-2], the K&R promotion laws). Deliverables: the wall table (above),config/wave_exclude.txtper-row S83 lines, backlog rows for all 7 (+ the two path-less rows fixed, R62;docs/backlog.md16 open), cookbook §500-I, accelerators (8), decision-log. NEXT = T5 (Max, Tier 1 — prompt R27, WAIT for gate 2). - 2026-09-05 11:30–12:30 MDT (S83, continued) — T3 steps 8–9 DONE → T3 CLOSED. Step 8:
permuter_ils8×150 s -j3 on the two REGALLOC-PERM seeds —func_800CD674plateau (best waypoint = the same 2-row$a3↔$t1pair; ledgered with cost),func_8001BC6Creached masked 1; the R63 read showed three mutations, one of them a WRONG-WIDTH& 0xFF(lhu→lbu); the two sound ones (idx after color; an earlytag/kbirth) = leaf MATCH, re-spelled well-defined ask = 0; tag = (a1 << 8) | k;(11 spellings measured), rtu MATCH in src/800.c, gate_main BANKED 143dbb89 (commit:3948) — main 7 → 6 open. gate_main's first rebuild died on a concurrent agent'ssrc/.masked_diff_probe.<pid>.c(present at parse, gone at compile) → MakefileC_SRCSfind now-not -name '.*'(commit:3949, byte-neutral, control onmake -pn). One bounded Opus second look atfunc_800CF3E8(245k tokens, 29 min): 27 holds; §500-D1's mechanism corrected tocse.c find_best_addr(fold_rtx MEM; COST pseudo 0 vs hard reg 1), the alias lever refuted 5/5, a new zero-byte pinned-pointer launder found (79 @ 470, structurally closer) — cookbook §500-H, backlog row updated. Step 9:make report(fleet instr 100.0% · distinct 99.9% · fn 100.00% · 15 stubs),make report BINARY=main, census.run/P32/frontier_t3_close.json(15 / 3,758), twin_rescan 0 free, cookbook §500-G/H + index, this file; R22 → see the 🛑 block. Kill gate: the session banked 29 and produced 3 new verdicts; the tail's three bounded attempts are spent — T3 closes on the evidence. NEXT = T4. - 2026-09-05 10:10–11:25 MDT (S83, session 491895ad, xHigh, Fable 5.1) — T3 steps 0–7 DONE: 28 banks, fleet R22 218/218 twice. Preflight R22 218/218 rc 0 (
.run/P32/t3s3/r22_check.log) → the 11 S82 MATCH rows banked: md_SC03_053 ×2 (commit:3935commit:3936, 100% C) · main ×2 via gate_main (commit:3937: "slate 2 -> 2 compatible … BANKED 2 … 143dbb89 BYTE-IDENTICAL") · md_SC03_054 func_801EF6D8 604+7 jtbls (commit:3938;jtbl_carve --proberefused the tail carve → §303 derive stage reproduced the island pads0,0t1,0t1,0t1,0t1,0t1,0with NO carve state change) · md_MAIN_007 ×6 after the byte-neutral func_800CF3B0 no-proto decl commit (commit:3939,commit:3940) — two integration classes on the way (same-TU s16/u16 spelling of D_800B99E8; §304 self-defining rodata D_800CEDFC). twin_rescan 33 open / 0 free; verbatim 5==5; R22make clean && make extract-all && make check-all→ 217+main extracted, 218 passed / 0 failed, exits 0/0/0 (.run/P32/t3s3/r22_full.log, 10:41–10:46); tools-health OK. The 9 NEAR rows ledgered (backlog_near.sh; docs/backlog.md 15 open). 17 Haiku agents launched 10:57 from staged prompts (.run/P32/t3s3/prompts/), 17/17 MATCH by 11:15, each re-verified with rtu_match in the CURRENT TU and banked bybank.sh(verbatim grep → rtu → splice → one build → sha → commit-on-green): md_MAIN_007 ×6 (commit:3941commit:3942), md_MAIN_009 ×8 (commit:3943commit:3946— func_800CD520 needed a §376 re-spell after a sibling bank added the file-scope prototype), md_SC03_054 ×2 (commit:3944, 100% C), md_SC03_056 ×1 (commit:3945, 100% C). twin_rescan 16 open / 0 free. Harvest: cookbook §500-F (the four integration classes), BRIEF.md §304 sentence,jtbl_carve --probetext, harvest_notes. Post-batch R22 (after all 28 banks): 217+main extracted, 218 passed / 0 failed, exits 0/0/0 (.run/P32/t3s3/r22b_full.log, 11:04–11:09). - 2026-09-05 (successor session, later) — Session-start protocol rewritten at Drew's direction (R64 candidate):
phase-ends/DIGEST.mdcreated (every phase synopsis + every rule in full + the PROJECT_CONTEXT corrections + the doc map); CLAUDE.md load order = PROJECT_CONTEXT → DIGEST → the three most recent PhaseEnds → CURRENT_PHASE, ≈100k tokens, the 🛑 block replayed VERBATIM; Phase Boundary step 3b maintains the digest (P7);phase-ends/README.md+ SETUP §7 updated; the two memories (checkpoint-current-phase-before-pause,session-start-list-rules-in-full) + MEMORY.md updated;.run/P32/t3/PROMPT_TEMPLATE.mdsaved (verbatim agent prompts). The 🛑 block below was REFRESHED to the verbatim-replay standard and SUPERSEDES the 09:30 block. Ratify R64 at PhaseEnd_Phase32. - 2026-09-05 09:30 MDT — T3 CHECKPOINT by the successor session (Max, Fable 5.1) after the launching session died. The T3 coordinator (session c6a5fb71) banked 10 functions in 9 commits (T3 (1)–(9), 01:01–01:07 MDT) and then hit "Prompt is too long" at 01:07 MDT; 22 agent completions (07:07Z–08:04Z) arrived into a dead session. Recovered via the recorded route:
agent_verdicts.pyover the 31 task transcripts →.run/P32/t3/verdicts.jsonl(20 MATCH / 9 NEAR / 2 FAIL); every unbanked draft re-verified withrtu_matchin its real TU (10 MATCH confirmed). Instrument incident (R48 class): one agent's tidy-up (find .run/P32/t3/opus -maxdepth 1 -type f ! -name func_800CD674.c -exec mv {} _scratch/, 07:52Z) had swept 11 sibling Opus deliverables — found in_scratch/, moved back, byte-verified at the reported closeness;tools/agent_drafts_restore.py(NEW — transcript replay) written as the fallback;.gitignoreallowlist for.run/P32/**so the drafts/ledger/census are committed (R20). Harvest written IN-SESSION (R16/R30): cookbook §500 (10 banked closers, 10 MATCH closers, 9 NEAR classes, two NEW mechanisms — the pinned-base alias basin and#line-equalised ASM_OPERANDS — and the process defects);docs/wave-playbook.md§S80 addendum-2 (per-function work dirs, JSON-only final message, the 20-agent cap, the recovery tools);docs/accelerators.mdP32 T3;docs/decision-log.mdP32 S82 (R31); SETUP row (R21). Read-only T4 pre-check results from the dead session preserved in the 🛑 block. Effort: this checkpoint at Max; T3 resumes at xHigh (R27). - 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 — T4b FIRST PASS COMPLETE: 4 rows left, HAND-CRACK NEXT (no agents), then T5 (2026-09-05 23:45 MDT; written by session 491895ad "S83"; SUPERSEDES the 13:40/15:30 blocks)
0. How to use this block
You are a FRESH SESSION that has read PROJECT_CONTEXT.md, phase-ends/DIGEST.md, PhaseEnd_Phase29/30/31.md and this file, and
nothing else (CLAUDE.md protocol, R64 candidate). Replay this block verbatim into your chat, state phase / done / NEXT / effort,
list the rules from the digest, then WAIT for Drew. NEXT is the HAND pass on the four remaining rows — Drew (2026-09-05 23:2x MDT):
"we will hand crack the remaining ones next session instead of using agents." That is non-obvious root-cause work: recommend
effort: Max (R7/R27 — prompt and wait for the /effort). No Agent tool, no Workflow. After the four (banked or honestly
ledgered), T5 = the PhaseEnd (Tier 1, Max, WAIT for gate 2).
1. Where we are
Phase 32 — the last 21 + the parked 5 (short, kill-gated) — extended by Drew's T4b directive: every function that is not original
hand-asm or a PsyQ object must be cracked and banked before the phase closes. Gate 1 approved 2026-09-05; R44–R63 ratified then;
R64 candidate. Tasks: T0 ✓ T1a ✓ T1b ✓ T1c ✓ T2a–c ✓ (T2d not needed) T3 ✓ T4 ✓ (commits in the task rows above) · T4b first
pass ✓ — 11 of 15 banked (commit:3956 commit:3959 commit:3964 commit:3966 commit:3969 commit:3972 commit:3976 commit:3979
commit:3983 commit:3990 commit:3992), 4 carried (below) · T5 pending. Harness tasks #1–#13 (#13 = T4b in_progress).
Fleet 218 binaries. Last fleet R22: make clean && make extract-all && make check-all → 217+main extracted, 218 passed /
0 failed, exits 0/0/0 at 23:36 MDT (.run/P32/t4b/r22_full.log) — AFTER every bank of the session. make report at the close:
instr 13,486,890 / 13,488,497 = 100.0% · distinct 5,814,982 / 5,816,589 = 100.0% (90,982 / 90,984 unique fns) · fn-count
363,210 / 363,214 = 100.00% · INCLUDE_ASM 4; main REAL 787 · LINKED 1,256 · VERBATIM 3 · stubs 2 · byte-identical 2,089 /
2,091 = 99.90% · sha 143dbb89…. verbatim_check --strict 5 == 5. config/wave_exclude.txt: 1 entry (main:func_80032A74),
exclude_audit --assert-fresh OK. Census .run/P32/frontier_t4b_close.json: 4 stubs / 1,607 ins. make tools-health → OK at the close (.run/P32/t4b/tools_health.log: sigs fresh; corpus(+resident) + cdecl + binaries +
report(lint+dedup) + cookbook-index green). Non-ghidra
tree clean at HEAD; the ghidra/ churn is R23 restart-noise — never stage it. Claude commits, Drew pushes (R6; ~100 unpushed).
100% C after today: resident, md_SC03_053/054/056, md_MAIN_003, md_MAIN_009, ov_SC06_022, ov_SC07_002.
2. What S83 did (session 491895ad, 2026-09-05 10:10 → 23:45 MDT)
T3 steps 0–9 (28 banks; §500-F/G/H), T4 (the walls' ledger; §500-I), then T4b: the hand pass (22 spellings, 0 banks, blockers
named in .run/P32/t4b/<fn>/NOTES.md), 15 Fable agents (one per row, ~2 h budget, brief .run/P32/t5x/BRIEF.md, packs, the NOTES),
three usage-limit outages (every agent resumed via SendMessage with its context; from the second outage on, 3 at a time — Drew),
11 MATCH banked + 4 NEAR ledgered. The T4b cracks are cookbook §501–§501-L; the doctrine is in docs/decision-log.md (P32
S83 T4b) and docs/accelerators.md (10)–(11): every crack came from reading a pass dump (-dS ready lists, .loop desirability,
-dl priorities, .greg dispositions, -dR hazard walks) against tools/reference/gcc-2.7.2/ BEFORE the first probe; six of the
seven T4 "wall" citations named the wrong pass. Instrument fixes: .run/P32/t3s3/bank.sh (refuses an empty fn list; SPLIT= for
_jr_ TUs; DRAFT_DIR=; verbatim check = instruction-bearing asm only; propagates a failed commit); Makefile C_SRCS dotfile
guard; jtbl_carve --probe names §303 for md_*. Two premature "banked" ledger messages (commit:3962, commit:3963) were corrected
in commit:3964's message. Nothing under config/ changed except wave_exclude.txt (pins 7 → 1) and the T4b plumbing in
src/800_c.c (commit:3953, byte-neutral).
3. THE FOUR REMAINING ROWS — the hand-crack briefs (everything a fresh session needs; all at EXACT length, all rtu-clean)
Verify any draft with rtu_match in the REAL TU (main: --tu src/<sub>.c); bank via gate_main (main) or
SPLIT=<tu-basename> DRAFT_DIR=<dir> .run/P32/t3s3/bank.sh <binary> <tu> <asmdir> <arm> "<title>" <fn> (it refuses on red). RTL
dumps: tools/cc1_dumps.sh <self-contained draft> <tag> → .run/c294/dumps_<tag>/<tag>.i.{rtl,cse,loop,combine,lreg,greg,sched,...}
(the draft must carry its own typedefs/externs; add -O0 by editing the script's cc1 line for boot). Each row's Fable report
(.run/P32/t5x/reports/<fn>.md) carries the dump citations and the measured-inert list — READ IT FIRST, do not repeat its sweeps.
(a) main:func_80032A74 — 422 ins, closeness 1, the LAST pin. TU src/800_b_2.c, sub 800_b_2, asm asm/nonmatchings/800_b_2/.
Best drafts: .run/P32/t4/drafts/func_80032A74_tuclean.c (TU-clean, rtu DIFF 1: idx 244 lh vs target lhu) and the code-exact
lhu respelling .run/P32/t4b/func_80032A74/lhu.c (422/422 identical EXCEPT the frame: vars 56 vs 64 → 22 offset rows); the
self-contained ancestor .run/S79w/opus/func_80032A74.c for dumps. Mechanism (Fable, 402k tokens, .run/P32/t5x/reports/ func_80032A74.md): the target's never-referenced 8-byte slot at 0x48 is a GHOST pseudo — a stranded middle temp of a 3-insn
combine whose refs-zeroing is skipped when newi2pat != 0 (combine.c:2306–2313); zero occurrences → regclass "ST_REGS or none" →
reload1.c:658 alter_reg 8-byte slot in regno order = right after the three param slots (reproducer ghost1: vars=8, no code).
The S83 caller-save-area hypothesis is REFUTED (order_regs_for_reload picks zero-use regs first; an area needs caller_save_needed
and saves at every live call). The only ghost species from a memory value is the SIGN_EXTEND narrow-load split (combine.c:1887–
1930) whose signature IS lh; a jump-target second promotion is folded by cse follow-jumps; a fall-through one needs a register
sign_extend MIPS lacks; the generic two-SETs split (combine.c:1963–2020) has no candidate (cse pre-folds constant offsets). Next
lever: a ghost from a NON-memory value — a 3-insn combine over a register-only expression whose middle temp is stranded
(newi2pat != 0 path) — e.g. a shift/mask/add chain on an already-loaded value whose intermediate has a second use in a LATER
block; enumerate the target's and/sll/addu triples on register operands and test each for the (use) orphan in .combine
(count vars= in the .frame line). If none, the row is PROVED at 1 (write the proof: "no C spelling mints an orphan without an lh").
(b) md_MAIN_007:func_800CF408 — 178 ins, closeness 3, zero pins. TU src/md_MAIN_007/md_MAIN_007.c, sub md_MAIN_007, asm
asm/md_MAIN_007/nonmatchings/md_MAIN_007/. Draft .run/P32/t5x/fable/func_800CF408.c; report .run/P32/t5x/reports/func_800CF408.md;
probes/dumps .run/P32/t5x/work/func_800CF408/. Residual idx 10–12 (ori $s5,0x96 below sw $s0 / li $s0,5): §501-H's floater
mechanism — the unboosted tag load lingers up block 1's store stream, is blocking one cycle behind the tpage sw at T-139, and the
empty cycle consumes the highest-LUID floater — COUPLED to the $t2/$t3 qty_compare contest (ob vs 0xFF000000: 2389 vs 2400, one
ref apart): mhi's li UID above the index sll cures the floater but moves mhi's birth one slot later and flips the contest (18);
ob after the index fixes the contest but opens a bubble in the OT-chain lhu gap that eats the same floater (13). The target fills
that gap with and $a3,$v0,$t1 = an UNBOOSTED p & m24; a 2-set a3 is re-merged by combine (reg_n_sets--, combine.c:2309 → 36),
an asm launder there is a sched2 delay-slot phantom nop (179 ins). Next lever (§501-L): a filler for that gap that combine cannot
re-merge and that changes neither count — a different-mode temp (u16/HImode view of p & m24), a volatile temp, or moving the
contest margin by one ob reference in a block that does not touch the tag load. 135-variant sweep floor 3 (×24) — do not repeat.
(c) main:func_80039308 — 518 ins, closeness 4. TU src/800_c.c (which now spells extern s32 D_80073140[][1]), sub 800_c,
asm asm/nonmatchings/800_c/. Draft .run/P32/t5x/fable/func_80039308.c; report .run/P32/t5x/reports/func_80039308.md. Residual =
two causes: rows 49/50 — the hoisted constant 2 vs the pinned vbase preheader order (move_movables splices after source
preheader code; unpinning/moving vbase → 515/495; a named cst2 → 520/286); rows 412/415 — lhu $s7 is reload's SPILL REGISTER:
storing arg1 directly spills the HImode parameter and reproduces sh $a1 / lhu $s7 exactly, but the target frame is [arg1 spill
@0][8-byte slot with NO traffic @8][cnt @0x10] and the phantom slot could not be induced (frame 0x38 vs 0x40). Next lever: the
phantom slot is a hard-reg spill_stack_slot (reload1.c spill_hard_reg on LO or $s7 during retry_global_alloc) or a ghost
pseudo (as in (a)) — read the target's frame layout against .greg "Spilling reg N" lines; a pseudo that global parks in LO and
reload respills (as func_80020DA4's m13 did) mints the 8 bytes; cf. §501-E. Corrected law from this row: at an equal-priority
load/store tie sched2 issues the STORE via potential_hazard, not LUID (sched.c:2616–2680).
(d) ov_SC03_105:func_80185810 — 489 ins, closeness 13. TU src/ov_SC03_105/ov_SC03_105_jr_80181C84.c, sub
ov_SC03_105_jr_80181C84, asm asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_80181C84/. Draft .run/P32/t5x/fable/func_80185810.c;
report .run/P32/t5x/reports/func_80185810.md; harness .run/P32/t5x/work/func_80185810/. Three of four windows closed (P_TAG
bitfield OT link + integer add (otz<<2)+(u32)ob for the addu operand order; sched1 flush_pending_lists at the 33rd memory op
explains the load order → HI temps t20/t22 with tp loaded between loads and stores; pins uu $4 / mode $5 / ot16 $6 — a hard-reg
destination is NOT birthing-boosted, so the LUID tie-break gives the load order; shf pinned $3). Residual ONE cause, idx
363–380: cl &= 0xFFFF is an unboosted 2nd set whose anti-deps hold the w-chain's two cl reads — the zero-byte fence after
p[7] |= is needed (without it the reads float to the block head and take $a0/$a1: 43/51) yet it forbids sched2's fillers (sll $a2,
andi $a3, li/subu) from crossing into the tpage/code window. A fresh single-set clx is boosted but combine folds the andi via
nonzero_bits(cl) into any same-block consumer (59); 2-set clx unboosted (49/39/42); an arm-duplicated store does not cross-jump
(490 ins); a launder asm is a real move for block_alloc. Next lever: make cl single-set with its high half cleared at birth
(cl = *(u16 *)… or a shift form) so no fence is needed, or give the two reads a fresh copy combine cannot fold (a HImode/subreg
temp defeats nonzero_bits). 3,360-variant region-2 sweep best 14 — do not repeat.
4. NEXT — in order
- Preflight:
git status --short | grep -v ghidra/(empty) ·verbatim_check --strict(5 == 5) ·make check-all→ 218/218 (R56 baseline). Prompt/effort max(R27) and WAIT. - The hand pass on (a)–(d), one row at a time, closest first (a → b → c → d): read the report, reproduce the residual with
rtu_match, dump the RTL (cc1_dumps.sh), attribute the residual to a PASS and a dump line before the first probe (§501, accelerators (11)), then the row's next lever; ≤ ~10 probes per row before writing the verdict. A MATCH → bank + commit + pin drop (exclude_audit --write config/wave_exclude.txt config/wave_exclude.txt) +backlog.py render+ cookbook §501-M…; a plateau →backlog.py logwith closeness, class, best draft, cost; for (a) at 1, a written PROOF that names the pass is an acceptable final verdict (P9 — never redefine). - T4b close:
make clean && make extract-all && make check-all(quote 218/218) ·make report+make report BINARY=main·frontier_classify --json .run/P32/frontier_t4b_final.json· refresh this block · commit · harness #13 done. - T5 (Max, Tier 1 — prompt R27; WAIT for gate 2): P7 walk (T0–T4b) → milestone demo (R22 218/218 · tools-health · verbatim 5==5 ·
the final census · the wall ledger — now ONE pin or none ·
make audit-discUNCLAIMED 0 of 220 ·make report×3 metrics + main143dbb89…WITH and WITHOUT the SDK object dirs · denominators) → WAIT →PhaseEnd_Phase32.md(Build Log · Deviations incl. the T4b directive and the 4-row remainder stated plainly · Commit Message · Rules Added — R64 to RATIFY + the S83 candidates below · Changelog v1.30.0 → v1.31.0 · Roadmap delta: P33 = verify + public flip · Plain-English Recap · believed/failed/sooner · 🛑) → DIGEST.md §2/§3 (step 3b) →git mv phase-ends/CURRENT_PHASE.md phase-ends/logs/Phase32.md(R19) → R23 → leave both uncommitted for Drew (R6) → "PhaseEnd file created. Commit the file and start a new Claude Code session for the next phase." → HARD STOP (P8). Rule candidates from S83 for the PhaseEnd table: (i) a wall verdict must be PASS-attributed with a dump line (R40 → "exonerate the instrument, then name the pass"); (ii) write "banked" only from the tool's printed success line; (iii) agents write deliverables early (a dead run's draft banked); (iv) a helper must refuse an empty work list (R43 restated).
5. Files, tools, exact invocations, gotchas
.run/P32/t5x/(tracked: BRIEF.md, targets.json,fable/func_*.c(15 drafts),reports/*.md(15),verdicts.jsonl(16 rows), resume_queue.txt; untracked: packs/, work/, rtu/)..run/P32/t4b/(tracked:<fn>/NOTES.md|HYPOTHESIS.md,<fn>/*.cvariants,*.log; gate slates undergate/are ignored — recreate)..run/P32/t3s3/:bank.sh(envSPLIT=,DRAFT_DIR=),splice.py, logs..run/c294/dumps_*: cc1 dump dirs (regenerable).- Transcripts of the 15 Fable agents:
~/.claude/projects/-home-musashi-bfm-decomp/491895ad-3c84-4037-b04f-bf7e5ee16a0c/subagents/ agent-<id>.jsonl;tools/agent_verdicts.py <tasks>/a*.outputrebuilds verdicts (the S83 Haiku agents are in the same dir — filter byfnagainst.run/P32/t5x/targets.json);tools/agent_reports.pysaves full reports. - Gotchas that bit today:
gate_main --assert-baseline --allow-dirtyRESTORES the working tree's TUs before building (its GREEN measured the committed tree — use an in-treemake extract BINARY=main && make build BINARY=mainfor an uncommitted TU edit) ·make extract BINARY=mainrewrites main'sasm/— never while something reads those.sfiles · a bank helper called with no function name built the unchanged tree and exited 0 (fixed, R43) · backticks inside a double-quoted--whereargument are command substitution (log rows were mangled twice; use single quotes) ·.run/P32/**allowlists are per-subdir — an ignored path silently breaks agit add … &&chain · an agent's masked_diff probe insrc/is build input (Makefile guardcommit:3949).
6. Environment
Fleet 218; shas: main 143dbb89f34491258bbc27810d0a12ec8b43a8dd · md_MAIN_007 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c · ov_SC03_105
d305ff6da199b52d0d44023766643a8b661ed524 (config/check.<b>.sha is authoritative). Toolchain unchanged (SETUP §5.4). The SessionStart
hook launches a headless Ghidra MCP (.run/ghidra-mcp.log); nothing in T4b/T5 uses it (R23: never stage ghidra/). Claude commits,
Drew pushes.
7. Standing reminders
Every bank commits before the next command that can touch src/ (R42) · count banks from the SOURCE and quote the fleet's green count
at every close (R58) · verify a build from its exit code (R53) · a masked/permuter score is not a closeness until its diff is read
(R63) · an __asm__ body that reproduces instructions is a verbatim, not a bank (R62; zero-byte fences/launders are dials) · re-verify in
the CURRENT TU before splicing (§500-F) · attribute a residual to a PASS before sweeping levers (§501, accelerators (11)) · write
"banked" only from the tool's printed success line · rules check every 4 tasks (P6) · harvest into the cookbook before the next
drafting step (R16/R30) · no Co-Authored-By (R5) · never stage ghidra/ (R23).
Plain-English recap (R18). Today the crack pass banked twenty-eight functions, the walls got their written verdicts, and then the owner moved the finish line: nothing may remain but the original hand-written assembly and Sony's library. A hand pass named every blocker; fifteen deep agents then took one function each, survived three quota outages, and banked eleven of them — ten of which had been declared unmatchable, one with a written proof — each by reading the compiler's own pass dumps rather than by guessing. Every rebuild of all 218 files is still identical, and by instruction count the game is at 100.0%. Four functions remain, each within one to thirteen instructions with its cause written down; the next session cracks them by hand, then the phase closes.