Commit Graph

2453 Commits

Author SHA1 Message Date
Drew T e79cfcc06d build(phase-35): T3 — ov_SC03_119 TWIN_OF ov_SC03_118 and ov_SC02_003 TWIN_OF ov_SC02_000 (equal carves): the twins' source dirs deleted, create_c_files: False, both twins and both primaries BYTE-IDENTICAL, audit-binaries OK, dedup-check per twin 0 failed 2026-09-08 17:15:01 -06:00
Drew T 9b0816e74a build(phase-35): T3 probe — ov_SC01_006 is a TWIN of ov_SC01_005: one source directory per payload. Makefile twin rules (build/src/<twin>/<twin>%.o <- src/<primary>/<primary>%.c, same recipe, -O0 objects kept), overlays.mk TWIN_OF + SRC_DIR, the twin's yaml create_c_files: False, src/ov_SC01_006/ (30 files) deleted; twin + primary BYTE-IDENTICAL (56760dbe), the concurrent race test green, every consumer sees the twin through the oracle; share_census: copies = distinct sites, TWIN-COVERED reported (575 classes for the pair) 2026-09-08 17:10:00 -06:00
Drew T af482a02d4 docs(phase-33): D2 — LICENSE (AGPL-3.0 verbatim from gnu.org), src/NOTICE.md (reimplementation for study/preservation, © 1998 Square acknowledged, no license asserted, no 'clean-room'), THIRD_PARTY.md (17 rows, every license read from the upstream LICENSE file or the GitHub API; old-gcc and ghidra_psx_ldr publish none — download-only; the SDK never distributed), tools/README.md (the one AGPL statement); checkpoint -> NEXT = D3 2026-09-07 00:53:58 -06:00
Drew T 4f7c3b64a3 docs(phase-33): commit-map + citations resolved to the rewritten history (C4–C7 — the tip commit)
- docs/commit-map.tsv: 4,032 rows (ordinal of the ORIGINAL main -> rewritten hash, author/committer dates, subject);
  1 pruned row of zeros (ordinal 1712, "session archive update"); 0 old hashes asserted; ordinal 1 unchanged by the
  rewrite (byte-identical)
- resolve_tokens: 1,238 commit:NNNN tokens -> shortest-unique new hashes in 98 files (docs, phase-ends, logs, tool
  docstrings, 2 C comments, the A5 evidence logs); residue left as tokens: commit:1712 x4 (the pruned commit),
  commit:orphan-24 x2, commit:orphan-26, commit:orphan-35 (cited commits that exist in no lineage)
- the rewrite (C4): filter-repo 2.47.0 on a bare clone of the C2 tip, 311 s, exactly 1 pruned, main 4,032 -> 4,031;
  the pre-rewrite history is mirrored in the private archive repo and in the local bundle
- the proof (C5): verify_rewrite 4,031 pairs / 0 failures; absent_scan 0 offenders; gate_scan 0 offenders on the clone
- adoption (C6): 100 text files differ at the tip, 0 purge paths, 0 added/deleted; leftover refs dropped; no gc yet
- resolver skips tools/public_rewrite/ (its self-test fixtures are the token grammar, not citations); repo-local
  identity is the GitHub noreply address from here on; CURRENT_PHASE: C4–C7 logged, checkpoint -> NEXT = C8
2026-09-06 23:28:39 -06:00
Drew T 9be6364a5b feat(phase-33): B2 portable includes — 34 absolute #include lines in 19 overlay sources (15 binaries) respelled to ../shared/ (30 engine_core.h + 4 engine_types.h); audit_text_sources.py gains the portable-include class (absolute / angle-bracket / unresolvable / outside-repo), controls 34 offenders before -> 0 after over 4,299 sources; the 15 binaries re-gated byte-identical (15/15 OK, 29 s wall); SETUP P33 B2 (R21) 2026-09-06 19:06:03 -06:00
Drew T ffb1949a1b feat(phase-32): T4c hand pass — main:func_80039308 (518 ins) BANKED byte-identical with ZERO pins: the phantom frame slot is a combine ghost (a self-update chain on the s0[1] load), the hoisted volume base is three inline (b2 * 0x100) temps merged by loop.c's combine_movables with a u16 vol accumulator so cse leaves the arms on the hoisted register, and the else head reuses the note-on arm's s17/s18 (S85) — main has NO INCLUDE_ASM stubs left
- gate_main .run/P32/t4e/slate_39308.json --apply: "slate 1 -> 1 compatible … BANKED 1 main functions -- 143dbb89f34491258bbc27810d0a12ec8b43a8dd BYTE-IDENTICAL" (clean main rebuild)
- draft .run/P32/t4e/bank/func_80039308.c = b56 (no register pins, no fences, no asm bodies); the 56-variant route is in .run/P32/t4e/NOTES.md
- the S84 PLATEAU's two causes were both compiler mechanisms missing from the censuses: combine.c:2306 (i2dest_in_i2src skips the ref decrement → reload1.c:658 slot) and loop.c:695-700 (a named variable set after a jump is never a movable; cse.c make_regs_eqv folds the arms onto the later-mentioned copy target unless the copy is a subreg move)
- fleet: INCLUDE_ASM stubs 2 -> 0; every game-code function of every binary is C
2026-09-06 16:02:03 -06:00
Drew T f9a90affbd feat(phase-32): T4c hand pass — main:func_80032A74 (422 ins) BANKED byte-identical: the "PROVED" 8-byte orphan slot was a missed producer — a combine ghost minted by a self-update whose deleted insn re-mentions its own dest (combine.c:2306 skips the ref decrement); a three-statement chain on the dd->unk07 compare buys the slot at zero instruction cost (S85)
- gate_main .run/P32/t4e/slate_32a74.json --apply: "slate 1 -> 1 compatible … BANKED 1 main functions -- 143dbb89f34491258bbc27810d0a12ec8b43a8dd BYTE-IDENTICAL" (clean main rebuild)
- draft .run/P32/t4e/bank/func_80032A74.c = the S84 u16 TU-clean body (422/422 code) + `gx = dd->unk07; gx -= 0x100; flag = (u32)sub < (u32)(u8)gx;`
- mechanism + 18 isolated reproducers: .run/P32/t4e/ghost/ (k4/k5/k7/k14/k16/k17 mint the slot; byte-store hosts do not); cookbook §501-Q to follow
- main: stubs 2 -> 1 (func_80039308 remains, now DIFF 2 in the real TU via the same ghost + the s17/s18 variable reuse)
2026-09-06 15:03:24 -06:00
Drew T cdd9a2cb8e feat(phase-32): T4b hand pass — ov_SC03_105:func_80185810 (489 ins) BANKED byte-identical: the banked cousin ov_SC02_027:func_80180B3C's packet-window spelling ported (cookbook §501-P); zero pins, zero fences, zero asm dials (S85)
- func_80185810: draft .run/P32/t4d/bank/func_80185810.c (hand agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=ov_SC03_105 -j8 rc 0; sha1 d305ff6da199b52d0d44023766643a8b661ed524 == config/check.ov_SC03_105.sha (BYTE-IDENTICAL)
- src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: 1 INCLUDE_ASM left
2026-09-06 13:12:18 -06:00
Drew T 8fa12bc226 feat(phase-32): T4b hand pass — md_MAIN_007:func_800CF408 (178 ins) BANKED byte-identical: the banked sibling func_800CD92C's spelling ported (libgpu P_TAG shape, u32 array view of the OT symbol via the fleet's asm-label alias); zero pins, zero asm bodies (S84)
- func_800CF408: draft .run/P32/t4c/bank/func_800CF408.c (hand agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_007 -j8 rc 0; sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
- src/md_MAIN_007/md_MAIN_007.c: 0 INCLUDE_ASM left
2026-09-06 12:06:00 -06:00
Drew T 228928dbec feat(phase-32): T4b (11) — md_MAIN_007: func_800CF6D0 (249 ins) BANKED byte-identical 2ff702b6 — the 137-row plateau falls with zero pins: the QI/HI store split was sched2's true_dependence exemption for /s varying stores (cast field stores restore it), ob assigned before block 1 wins the $t2/$t3 flow ref-count tie, and the folded-sum pseudo's own 4-byte slot IS the 0x18 frame (Fable agent)
- func_800CF6D0: draft .run/P32/t5x/fable/func_800CF6D0.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_007 -j8 rc 0; sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
- src/md_MAIN_007/md_MAIN_007.c: 1 INCLUDE_ASM left
2026-09-05 23:22:46 -06:00
Drew T 35fa116741 feat(phase-32): T4b (10) — main: func_80011380 (192 ins, boot -O0) BANKED byte-identical 143dbb89 via gate_main — the §474 "PROVED C-level floor" falls: a proved TREE wall is not an RTL wall — (D_80074784 * 2 + 1) * 2 - 2 keeps MULT(PLUS(MULT(i,2),1),2) past fold and the expander's distributive law rebuilds the nested multiply (Fable agent)
- pinned since S76/S79 as PROVED (§474: fold-const.c:882 split_tree merges MULT(MULT(i,2),2) in every C spelling; the two escapes
  each cost one instruction — stupid.c adjacency / expand_decl use-brackets); 20 spellings + statement-expression + register
  temp forms measured; the S83 hand pass measured four block-scoped forms at 193/131
- the mechanism (dumps + source): split_tree only decomposes MULT/PLUS/MINUS and never distributes MULT over PLUS, so
  MULT(PLUS(MULT(i,2),1),2) survives fold; expr.c:5368's EXPAND_SUM distributive law returns (plus (mult (mult X 2) 2) 2);
  both_summands (expr.c:5248) + plus_constant cancel the +2 against the -2 into the bare symbol; memory_address -> force_operand
  expands the two expand_mult copy;sll pairs adjacent (expmed.c:2227/2244) with no note or variable, so stupid.c's born+2
  rule 2-colours v1/a0 exactly as the target and expand_binop's late copy_to_mode_reg(sym) gives la $a0 / addu / lbu 0()
- ruled out from source: a hard-reg pin + shift outer form (191, LENGTH-DRIFT — a REG index makes (plus sym reg) a legitimate
  MIPS address so la/addu vanish: the target's la;addu;lbu shape REQUIRES the index to reach memory_address as a MULT rtx),
  COMPOUND_EXPR shield (fold distributes), SAVE_EXPR via ?:, COND shields, builtin pseudo-constants, pin+MULT
- draft .run/P32/t5x/fable/func_80011380.c; report .run/P32/t5x/reports/func_80011380.md; coordinator rtu_match MATCH 192/192
  in src/boot.c (--o0); gate_main slate_11380: BANKED, 143dbb89 BYTE-IDENTICAL; all 15 jal callees + data-symbol counts equal
- main open 3 -> 2 (func_80032A74 pinned NEAR 1; func_80039308 NEAR 4)
2026-09-05 23:21:54 -06:00
Drew T 825da37bc0 feat(phase-32): T4b (9) — ov_SC07_002: func_8017DC80 (346 ins) BANKED byte-identical — the historic -33 LENGTH wall's last 46 rows: two combine USE-orphans from reading the s16 mode from memory at each use (§172 producer 2), ONE scratch variable carrying the len byte and the tpage word (the sb's anti-dependence), and a laundered first-statement arg = &D_800AF648 (Fable agent)
- func_8017DC80: draft .run/P32/t5x/fable/func_8017DC80.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=ov_SC07_002 -j8 rc 0; sha1 fad71342019704d1dd6ec25f2f3934c97e322624 == config/check.ov_SC07_002.sha (BYTE-IDENTICAL)
- src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c: 2 INCLUDE_ASM left
2026-09-05 19:18:45 -06:00
Drew T 4a9a67c59e feat(phase-32): T4b (8) — md_MAIN_009: func_800CD92C (247 ins) BANKED byte-identical d270f695 — the prologue-weave NEAR falls with ZERO pins: m24 wins $t1 by flow ref count (the P_TAG bitfield's foldable re-mask), and the tpage constants float to the top because a multi-set tag load (bitfield RMW shape) fills the RMW latency stalls instead of being birthing-boosted (Fable agent); md_MAIN_009 is 100% C
- func_800CD92C: draft .run/P32/t5x/fable/func_800CD92C.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_009 -j8 rc 0; sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
- src/md_MAIN_009/md_MAIN_009.c: 0 INCLUDE_ASM left
2026-09-05 18:54:50 -06:00
Drew T cb871087ec feat(phase-32): T4b (7) — md_MAIN_003: func_800CF3E8 (469 ins) BANKED byte-identical — the 27-off alias basin falls: a second live set of the loaded tag kills sched1's birthing boost, the phantom ot-USE that filled the load-delay slot only in the scheduler's model is removed, and the OT link spelled as libgpu's P_TAG bitfield lifts m24's flow ref count so it wins $a2 in local-alloc (Fable agent)
- func_800CF3E8: draft .run/P32/t5x/fable/func_800CF3E8.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_003 -j8 rc 0; sha1 dd1b32ecf1103c6f7cf1943d25546a3046e17b14 == config/check.md_MAIN_003.sha (BYTE-IDENTICAL)
- src/md_MAIN_003/md_MAIN_003.c: 0 INCLUDE_ASM left
2026-09-05 18:43:03 -06:00
Drew T ff86e25729 feat(phase-32): T4b (6) — ov_SC03_105: func_801834A4 (106 ins) BANKED byte-identical — a pinned WALL falls: a CSE-quantity split hoists only the division's sign correction (sign = half >> 31 at the loop top; the divide reads a hard-register copy so its mult is not a movable; expand_divmod's sra is CSE'd into sign) (Fable agent)
- func_801834A4: draft .run/P32/t5x/fable/func_801834A4.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=ov_SC03_105 -j8 rc 0; sha1 d305ff6da199b52d0d44023766643a8b661ed524 == config/check.ov_SC03_105.sha (BYTE-IDENTICAL)
- src/ov_SC03_105/ov_SC03_105_jr_80181C84.c: 2 INCLUDE_ASM left
2026-09-05 18:25:13 -06:00
Drew T b47bc2ea0b feat(phase-32): T4b (5) — main: func_80020DA4 (100 ins) BANKED byte-identical 143dbb89 via gate_main — a pinned WALL falls: the $6 pin on e0 FORBADE $a2 at reload's retry_global_alloc (regs_ever_live seeds bad_spill_regs), so the product took $t0; unpinned + two zero-byte launders steer local-alloc's qty_compare to the target's allocation (Fable agent)
- pinned since S79 as "mflo destination $t0 vs $a2 (REGALLOC-PERM), pinning regresses to 79"; 5 attempts 51->20->14->8->2 +
  permuter_ils null (S80); T4 re-probed DIFF 2; the S83 hand pass measured the variable-reuse form at 80
- mechanism (dumps + source): the mult results are GLOBAL allocnos (mulsi3_internal '=l', mips.md:848; 'pref LO_REG');
  global.c parks m3/m8/m13 in LO, reload spills LO ("Spilling reg 65") and retries via retry_global_alloc (reload1.c:3497)
  with losers = forbidden_regs, seeded from bad_spill_regs = regs_explicitly_used = regs_ever_live at reload entry
  (reload1.c:486, 3651-3660, 709) — the S76 `register s32 e0 __asm__("$6")` made $a2 ever-live, so m13's retry could not
  take it and first-fit gave $t0 ("Register 102 now in 8")
- fix: unpin e0; `__asm__("" : "=r"(e1) : "0"(e1))` immediately before `dst[6] = -e1` (e1's qty 6666 -> 8750, allocated
  before e0's 7894, holds $v1, e0's first fit drops to $a2) + `__asm__("" : "=r"(p1) : "0"(p1))` between p1's andi and sll
  (undoes the global-allocno tie the first launder created; the $t6/$t7/$t8 rotation). Ladder 2 (pinned) -> 37 (unpinned)
  -> 15 -> 6 -> MATCH; a byte-identical alternate launders addr1 after its addu
- draft .run/P32/t5x/fable/func_80020DA4.c; report .run/P32/t5x/reports/func_80020DA4.md; coordinator rtu_match MATCH
  100/100 in src/800.c; gate_main slate_20DA4: BANKED, 143dbb89 BYTE-IDENTICAL
- main open 4 -> 3 (2 pinned walls + func_80039308 NEAR)
2026-09-05 18:16:01 -06:00
Drew T b31084300f feat(phase-32): T4b (4) — ov_SC06_022: func_8017DF28 (119 ins) BANKED byte-identical — a pinned WALL falls: one value-returning call made reg_n_sets[$v0]==1 and sched1's birthing boost scheduled it above the &mtx def (reorg then filled the jal slot); a second $v0 set via RotMatrixY's real pointer-returning type puts the def after the call and reorg fills the bnez slot (Fable agent)
- func_8017DF28: draft .run/P32/t5x/fable/func_8017DF28.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=ov_SC06_022 -j8 rc 0; sha1 2a7d7d4e2fe2f87a83a065686731c7942b3c70ef == config/check.ov_SC06_022.sha (BYTE-IDENTICAL)
- src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c: 3 INCLUDE_ASM left
2026-09-05 13:28:24 -06:00
Drew T b13e824f76 feat(phase-32): T4b (3) — md_MAIN_009: func_800CD674 (174 ins) BANKED byte-identical d270f695 — the $a3<->$t1 REGALLOC-PERM plateau falls: prim 4 gets a fresh single-death masked-p (local-alloc's dying-input suggestion needs a pseudo BORN at the and) and prim 3's copy gets a trailing zero-byte asm set that defeats sched1's birthing boost (Fable agent). CORRECTION: commits commit:3962 and commit:3963 claimed this bank before it happened — bank.sh had been called without the function name, then with the wrong draft dir; both times it refused or built the unchanged tree
- func_800CD674: draft .run/P32/t5x/fable/func_800CD674.c (fable agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_009 -j8 rc 0; sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
- src/md_MAIN_009/md_MAIN_009.c: 1 INCLUDE_ASM left
2026-09-05 13:25:57 -06:00
Drew T e8c2b6baa0 feat(phase-32): T4b (2) — main: func_80039DEC (74 ins) BANKED byte-identical 143dbb89 via gate_main — a pinned WALL falls: the natural switch with DUPLICATED case tails (cross-jump merges them post-reload), so a2's raw copy keeps 4 refs and wins $a3 (Fable agent)
- pinned since S79 as "the $a3<->$t0 swap of the two K&R raw-preserve parameter copies is fixed by ARGUMENT POSITION" —
  3 attempts + permuter_ils 9->2 (S80); T4 re-probed DIFF 2 in a sandbox TU; the S83 hand pass hypothesised a local pseudo
  in $a3 (global.c find_reg pass-1 local_reg_n_refs) — REFUTED by the agent: that check is only in the best_reg<0 retry
- the real mechanism (global.c:587-608 allocno_compare, pri = floor_log2(n_refs)*n_refs/live_length; find_reg hands the
  lowest free reg to whichever parm copy is allocated FIRST): every prior draft merged the 0x14/0x28 tails at C level
  (goto L_merge + a `kind` temp), deleting one `sb a2` use, so a2-raw had 3 refs/45 (pri 666) and lost $a3 to a1-raw
  (3 refs/26, pri 1153). Writing the 3-case `switch (a2)` with the tails DUPLICATED (the original's tails are merged by
  jump.c cross-jump AFTER allocation) gives a2-raw 4 refs/41 (floor_log2(4)=2 -> pri 1951) -> allocated first -> $a3; a
  block-scope `u8 *p` per case; no pins, no fences, no do-while (dumps .run/c294/dumps_t5x_9DEC_sw2: `73 in 8  75 in 7`)
- the permuter's closeness-2 draft was R63-unsound (`tmp` uninitialised on the default path — its pseudo took $a3)
- draft .run/P32/t5x/fable/func_80039DEC.c; report .run/P32/t5x/reports/func_80039DEC.md; coordinator rtu_match MATCH 74/74 in
  src/800_c.c (the no-proto TU decl from commit:3953 admits the K&R definition); gate_main slate_39DEC: BANKED, 143dbb89 BYTE-IDENTICAL
- main open 5 -> 4 (3 pinned walls + func_80039308 NEAR)
2026-09-05 13:20:25 -06:00
Drew T 1e54e88a81 feat(phase-32): T4b (1) — main: func_800391D4 (75 ins) BANKED byte-identical 143dbb89 via gate_main — a pinned WALL falls: the sign-extend must be preheader SOURCE code, and the loop.c insn_count knife-edge re-padded (Fable agent)
- pinned since S79 as "move_movables splices hoisted invariants after preheader flow code, so off's init cannot follow arg1's
  hoisted sign-extend from C" — 4 prior attempts + S79 Sonnet (64→3) + permuter_ils null (S80); T4 re-probed DIFF 3 in a
  sandbox TU; the S83 hand pass measured the explicit promotion at 18 and stopped
- the Fable agent read the .loop dump: with `a1v = arg1;` written BEFORE `off = 0;` the extend IS emitted first (T1 of the
  hand-pass NOTES) — the 18 was a CASCADE: removing the two extend insns from the body dropped the loop's insn_count 59→57,
  flipping loop.c:1631's desirability test (threshold 58 ≥ 57) so the D_800C6DD0 address got hoisted (+2 preheader insns and a
  register cascade). Nine `__asm__("")` pads instead of seven restore insn_count 59 → "not desirable" → the target's preheader
  tail `sll/sra $a1; move $t0,$zero`. Kept: the `$7` pin on i (a hard reg is not a biv, loop.c:3572) and the [][1] table type
- draft .run/P32/t5x/fable/func_800391D4.c; report .run/P32/t5x/reports/func_800391D4.md; coordinator rtu_match MATCH 75/75 in
  src/800_c.c; gate_main slate_391D4: BANKED, 143dbb89f34491258bbc27810d0a12ec8b43a8dd BYTE-IDENTICAL (.run/P32/t4b/gate/gate_391D4.log)
- main open 6 -> 5 (4 pinned walls + func_80039308 NEAR)
2026-09-05 13:15:20 -06:00
Drew T e392290513 chore(phase-32): T4b plumbing — src/800_c.c: func_80039DEC decl → no-proto; D_80073140 externs (×4) → [][1] with (s32*) casts at the 3 uses — byte-neutral (in-tree clean extract+build 143dbb89)
- the two TU-side declaration walls of the pinned main rows (§500-I); needed so the func_80039DEC / func_800391D4 drafts can be
  verified and gated in the REAL TU (T4b hand-crack pass, Drew's directive)
- arbiter: make extract BINARY=main && make build BINARY=main -j8 → EXIT 0/0, sha1 143dbb89f34491258bbc27810d0a12ec8b43a8dd
  (.run/P32/t4b/plumb2_result.log). NOTE: gate_main --assert-baseline --allow-dirty RESTORES the working tree's TUs before
  building (its GREEN measured the committed tree, not the edit) — use the in-tree extract+build for an uncommitted TU edit
2026-09-05 12:36:39 -06:00
Drew T 836181a6c2 feat(phase-32): T3 (38) — main: func_8001BC6C (69 ins) BANKED byte-identical 143dbb89 via gate_main — permuter_ils found the two levers, the coordinator dropped its wrong-width mutation (R63) and re-spelled them well-defined
- seed: the Opus NEAR-6 draft (.run/P32/t3/opus/func_8001BC6C.c; §500-C REGALLOC-PERM $v0<->$v1 across the six OT-chain insns,
  local-alloc qty_compare one span unit). permuter_ils 8x150s -j3 --klass REGALLOC: cycles 6/7/8 = 6, 5, 1 (output-1-1)
- R63 read of the "1": three mutations — (a) `idx` computed AFTER `color`, (b) an early dead `tag = (a1 << 8) | k;` before
  k's assignment, (c) `(D_800B9A02 & 0xFFu) << 14` — and (c) turns the target's `lhu` into an `lbu` (semantically WRONG:
  the masked score rewards it; second witness after S80). (a)+(b) alone = leaf MATCH 69/69; (a) alone 8, (b) alone 21
- well-defined re-spelling: `k = 0; tag = (a1 << 8) | k;` at the top (I1) MATCHES; k-initialised-first (15), tag=a1<<8 (19),
  tag=a1 (8), tag=(a1<<8)|K (20), tag=0 (8), tag-then-k (8) all regress — the lever is the early BIRTH of the tag/k pseudos
  (§47 live-length: qty_compare = floor_log2(n_refs)·n_refs·size/(death−birth)), documented in the source comment
- rtu_match MATCH 69/69 in src/800.c; gate_main slate_main3: "slate 1 -> 1 compatible … BANKED 1 of 1 … 143dbb89 BYTE-IDENTICAL",
  EXIT 0 (.run/P32/t3s3/gate/gate_main3.log); main open 7 -> 6 (5 pinned walls + func_80039308 NEAR 17)
- func_800CD674's ILS plateaued at the SAME $a3<->$t1 pair (output-2-1 = 2 rows, no drift) — ledgered with its cost (R41)
- variants kept under .run/P32/t3s3/p1bc6c/ (the 11 spellings measured)
2026-09-05 11:35:41 -06:00
Drew T fc922a4ccb feat(phase-32): T3 (34) — md_MAIN_009: func_800CD520 (22 ins) BANKED byte-identical d270f695 — §304 self-defining rodata (D_800CD364, 8 words incl. the island's trailing junk) via the ov_SC03_011:0x8017dbd8 twin; the agent's (void*) prototype for func_8001AD38 re-spelled to the TU's (const char*) after the sibling banks landed (§376)
- func_800CD520: draft .run/P32/t3/haiku/func_800CD520.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_009 -j8 rc 0; sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
- src/md_MAIN_009/md_MAIN_009.c: 2 INCLUDE_ASM left
2026-09-05 11:02:03 -06:00
Drew T f461715d05 feat(phase-32): T3 (37) — md_SC03_056: func_801CBB80 (23 ins) BANKED byte-identical bc768a6b via the ov_SC06_025:0x8017ded8 twin (d=5) — the module is 100% C
- func_801CBB80: draft .run/P32/t3/haiku/func_801CBB80.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_SC03_056 -j8 rc 0; sha1 bc768a6b7baa911e0a0cb9175b33550851d6c1eb == config/check.md_SC03_056.sha (BYTE-IDENTICAL)
- src/md_SC03_056/md_SC03_056.c: 0 INCLUDE_ASM left
2026-09-05 11:01:08 -06:00
Drew T 582bcab70e feat(phase-32): T3 (35)+(36) — md_SC03_054: func_801F0048 (20 ins) + func_801F00C8 (15 ins) BANKED byte-identical 06bd73df — the module is 100% C
- func_801F0048: draft .run/P32/t3/haiku/func_801F0048.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- func_801F00C8: draft .run/P32/t3/haiku/func_801F00C8.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_SC03_054 -j8 rc 0; sha1 06bd73dfbdb10748adcbac7093ead5d76131206a == config/check.md_SC03_054.sha (BYTE-IDENTICAL)
- src/md_SC03_054/md_SC03_054.c: 0 INCLUDE_ASM left
2026-09-05 11:01:07 -06:00
Drew T f20e42259f feat(phase-32): T3 (27)–(33) — md_MAIN_009: seven Haiku rows BANKED byte-identical d270f695 (func_800CD3B8 21, func_800CD408 23, func_800CD464 25, func_800CD4C8 22, func_800CD558 24, func_800CD5B8 23, func_800CD614 22)
- func_800CD3B8: draft .run/P32/t3/haiku/func_800CD3B8.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- func_800CD408: draft .run/P32/t3/haiku/func_800CD408.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- func_800CD464: draft .run/P32/t3/haiku/func_800CD464.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- func_800CD4C8: draft .run/P32/t3/haiku/func_800CD4C8.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- func_800CD558: draft .run/P32/t3/haiku/func_800CD558.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- func_800CD5B8: draft .run/P32/t3/haiku/func_800CD5B8.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- func_800CD614: draft .run/P32/t3/haiku/func_800CD614.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_009 -j8 rc 0; sha1 d270f695b793b5c03db159b7aabcc066daa87eda == config/check.md_MAIN_009.sha (BYTE-IDENTICAL)
- src/md_MAIN_009/md_MAIN_009.c: 3 INCLUDE_ASM left
2026-09-05 11:00:44 -06:00
Drew T 5160775a14 feat(phase-32): T3 (26) — md_MAIN_007: func_800CF220 (19 ins) BANKED byte-identical 2ff702b6 — Haiku via the ov_SC03_001:0x80182860 twin (d=4)
- func_800CF220: draft .run/P32/t3/haiku/func_800CF220.c (haiku agent, agent MATCH re-verified by coordinator rtu_match in the real TU)
- one build for the same-TU batch: make build BINARY=md_MAIN_007 -j8 rc 0; sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
- src/md_MAIN_007/md_MAIN_007.c: 2 INCLUDE_ASM left
2026-09-05 11:00:43 -06:00
Drew T 5aab66b2de feat(phase-32): T3 (21)–(25) — md_MAIN_007: five Haiku rows BANKED byte-identical 2ff702b6 (func_800CF0F4 21, func_800CF1CC 21, func_800CF268 21, func_800CF33C 21, func_800CEFF8 13)
- the first five verdicts of the 17-row Haiku launch (10:57 MDT, one Agent-tool subagent per function, prompts
  .run/P32/t3s3/prompts/<fn>.txt); drafts .run/P32/t3/haiku/<fn>.c; each agent-reported MATCH re-verified by the
  coordinator with rtu_match in the real TU (.run/P32/t3s3/verify3/); verbatim grep 0; one build for the same-TU
  batch: make build -j8 rc 0; sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha
- func_800CEFF8 (13) came from the ov_SC02_005:0x801865d0 twin route; the other four are the module's
  func_800167F0(k)&0xFFFF -> D_800D1374++ shape, ~45-50k tokens each
- md_MAIN_007 stubs 8 -> 3 (func_800CF220 MATCH pending, func_800CF408 NEAR 49, func_800CF6D0 NEAR 137)
2026-09-05 11:00:17 -06:00
Drew T 8ca9d53cad feat(phase-32): T3 (15)–(20) — md_MAIN_007: six Haiku MATCH rows BANKED byte-identical 2ff702b6 (func_800CEEFC 25, func_800CEF94 25, func_800CF068 20, func_800CF148 33, func_800CF2BC 32, func_800CF3B0 22)
- drafts .run/P32/t3/haiku/<fn>.c, each rtu_match MATCH in the real TU twice (S82 + this session, after the
  byte-neutral func_800CF3B0 decl commit commit:3939); one build for the same-TU batch; make build -j8 rc 0;
  sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha; stubs 14 -> 8
- two integration classes the per-draft rtu_match is BLIND to (it splices one draft at a time):
  (1) same-TU drafts spelling one global differently — func_800CEEFC `extern s16 D_800B99E8` (file scope) vs
      func_800CEF94 block-scope `extern u16 D_800B99E8` -> `conflicting types` only once both are spliced; the
      file-scope decl became u16 (func_800CEEFC only stores zero, so the sign is inert there; the u16 load in
      func_800CEF94 is the byte-bearing one)
  (2) §304 self-defining rodata — func_800CF068's stub .s was the ONLY owner of `dlabel D_800CEDFC`
      (".asciz C:\TIMPACK\OPDEMO0.PAT"); banking the body deleted the definition -> `undefined reference to
      D_800CEDFC` at LINK (compile-only rtu_match cannot see it). Fix: `const char D_800CEDFC[] = "..."` at file
      scope at the extern's position (directly after INCLUDE_RODATA D_800CEDF8, so the island order 0x0/0x4 holds
      under the §303 derive stage) + a (void *) cast at the func_8001AA98 call
- closers (cookbook §500-B): func_800CF148's block-scope redecl of func_800CF3B0 now agrees with the TU's no-proto
  decl; func_800CF2BC post-increment passes the old counter; func_800CEEFC/func_800CEF94 goto shape +
  `(result << 16) == 0`; func_800CF068 hand-drafted from the md_MAIN_008:0x800cee44 twin's shape (remap refused,
  reloc 6≠7); func_800CF3B0 leaf-exact 22/22 admitted by the decl fix
2026-09-05 10:40:25 -06:00
Drew T 9e84ce2cd8 chore(phase-32): T3 plumbing — md_MAIN_007: func_800CF3B0 decl → no-proto extern s32 func_800CF3B0(); (byte-neutral, sha 2ff702b6 unchanged)
- the S77 law: fix the TU by a byte-neutral plumbing commit BEFORE any gate. The asm returns s32 in $v0 and takes no
  arguments; the TU's `extern void func_800CF3B0(void *a0, void *a1, void *a2);` (line 91) refused the leaf-exact
  22/22 draft (`conflicting types`, a §376/§495 def-side declaration wall — the Haiku FAIL row)
- the no-proto spelling keeps the BANKED 3-arg caller func_800CF390 legal in C89 and admits the `s32 (void)` definition
- make build -j8 rc 0; sha1 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c == config/check.md_MAIN_007.sha (BYTE-IDENTICAL)
2026-09-05 10:37:22 -06:00
Drew T aa773c8fb0 feat(phase-32): T3 (14) — md_SC03_054: func_801EF6D8 (604 ins + 7 jump tables) BANKED byte-identical 06bd73df — no carve: §303 island pads derived at build
- Opus draft (.run/P32/t3/opus/func_801EF6D8.c): 12-arm dispatcher on *(u16*)(a0+0x34) with a 7-arm sub-state-machine
  on D_801F1480 duplicated in outer cases 6–11. Idiom 1: `2($sN)` off a lui/addiu-materialised base = a POINTER LOCAL
  (`p = &D_801F1480; p[0]/p[1]`), placed BEFORE the switch although the address computation appears after the load
  (42 of the 44-ins gap). Idiom 2: a constant-arm ternary consumed directly as a call ARGUMENT lays the third arm in
  its own block + j; the if/else-if STATEMENT chain reproduces the target (cookbook §500-B). 85/85 relocations in order
- carve route: jtbl_carve --probe REFUSED the tail carve (the seven tables jtbl_801EF46C..jtbl_801EF53C sit in the
  §154-A leading island at file 0x4..0xF0) and named §260; §303 supersedes it for md_* modules — the Makefile's
  `jtbl_rodata_pads --derive md_SC03_054` stage produced the spec 0,0t1,0t1,0t1,0t1,0t1,0 at build time; NO yaml /
  overlays.mk change (R60 untouched), no isolation (the T1c md_MAIN_034 precedent)
- rtu_match MATCH 604/604 in the real TU (this session); make build -j8 rc 0;
  sha1 06bd73dfbdb10748adcbac7093ead5d76131206a == config/check.md_SC03_054.sha; 2 stubs left (func_801F0048, func_801F00C8)
2026-09-05 10:36:54 -06:00
Drew T e2aee8e274 feat(phase-32): T3 (12)+(13) — main: func_80015B6C (120 ins) + func_8002FDE8 (73 ins) BANKED byte-identical 143dbb89 via gate_main
- gate_main .run/P32/t3s3/gate/slate_main2.json --apply: "slate 2 -> 2 compatible, 0 dropped"; clean EXE rebuild
  (extract + build) -> "BANKED 2 main functions -- 143dbb89f34491258bbc27810d0a12ec8b43a8dd BYTE-IDENTICAL", EXIT 0
  (.run/P32/t3s3/gate/gate_main2.log)
- func_80015B6C (src/800.c, Opus .run/P32/t3/opus/func_80015B6C.c): both journal walls fell — the "$v0/$v1 swap" was an
  artefact of the s32 wh[3] frame-slot hack; the corner-copy wall is cse.c canon_reg (make_regs_eqv keeps the FIRST
  register canonical) -> a barrier on the SOURCE variable `__asm__("" : "=r"(x) : "0"(x))`; four empty volatile fences
  partition block 2 into five phases at zero cost; the 0xE1000200 trailer lui hoist = reuse the $6-pinned tag variable
- func_8002FDE8 (src/800_b_2.c, Opus .run/P32/t3/opus/func_8002FDE8.c): the "regalloc-priority wall" at 35 was the ARRAY
  spelling of D_800A46D2 — the block-scope SCALAR `extern s16 D_800A46D2;` (as same-TU func_8002FF0C/func_800301C8) gives
  35 -> 3; third `return 1` inside the == -1 arm; the §47 live-length slider COMPUTED from -dl -dg (one fence where the
  constant is live and `data` dead); `one = 1;` and `i4 = idx * 4;` as separate statements
- both rtu_match MATCH in the real TU (S82 re-verification); cookbook §500-B carries the closers
- main: 12 -> 7 open (5 pinned walls + 2 NEAR)
2026-09-05 10:34:35 -06:00
Drew T 9887e69872 feat(phase-32): T3 (11) — md_SC03_053: func_801EF7E4 (72 ins) BANKED byte-identical c0848f30 — the module is 100% C
- Sonnet draft (.run/P32/t3/sonnet/func_801EF7E4.c): §339's redundant-default test is the switch tell; combined case
  labels `case 0: case 3:` place the shared body FIRST, while two textually-duplicated bodies relying on cross_jump
  land it LAST next to the epilogue regardless of source order (cross-jump placement is not steerable from C, §500-B)
- rtu_match MATCH 72/72 in the real TU (this session); make build -j8 rc 0;
  sha1 c0848f308342e499e2bd8c2db86f6225a29e1592 == config/check.md_SC03_053.sha
- src/md_SC03_053/md_SC03_053.c has 0 INCLUDE_ASM left — md_SC03_053 reaches 100% C
2026-09-05 10:33:03 -06:00
Drew T d3f05998d5 feat(phase-32): T3 (10) — md_SC03_053: func_801EF734 (44 ins) BANKED byte-identical c0848f30 — §224 pinned pointer + three literal uniform arms for cross_jump
- Sonnet draft (.run/P32/t3/sonnet/func_801EF734.c) after the Haiku FAIL at 47: register-pin the actor pointer
  ($16, like sibling func_801EF624) and write the shared func_80178CBC(s0, &D_xxx) call LITERALLY in each of three
  uniform if / else if / else arms with no early return; cross_jump merges the three jal+epilogue tails and lands
  move a0,s0 in each arm's delay slot
- Haiku's plateau was a register-COALESCING failure (early-return if + separate nested if/else → $s0 AND $s1 for one
  value: spurious move, extra sw/lw, frame 32 vs 24), not the missing merge it reported (cookbook §500-B)
- rtu_match MATCH 44/44 in the real TU (this session, .run/P32/t3s3/verify/); make build -j8 rc 0;
  sha1 c0848f308342e499e2bd8c2db86f6225a29e1592 == config/check.md_SC03_053.sha
- fleet baseline before the bank: make check-all 218 passed / 0 failed of 218, EXIT 0 (.run/P32/t3s3/r22_check.log)
2026-09-05 10:32:35 -06:00
Drew T 0240fa5f62 feat(phase-32): T3 (9) — main: func_80038698 (74 ins) BANKED byte-identical 143dbb89 via gate_main — the "sched1 DAG-priority + self-coalesce wall" was VARIABLE SCOPE
- gcc-2.7.2 runs local_alloc (single-block pseudos) BEFORE global_alloc (multi-block pseudos): the three BE-16
  hi-bytes are ONE function-scope variable reused across blocks -> global_alloc's $a1 bank, cannot self-coalesce
  with the block-local shift dest (the target's `sll $v1,$a1,8` tell) — and its longer live range fixed the p[8]/p[7]
  sched1 hoist for free. The prior NEAR-11 drafts pinned hi=$5 at one site only.
- plus an in-place compound on a block temp (u32 t = hi<<8; t |= p[11]) to tie the or to the shift (§219 family), and
  ONE pin register u32 len asm("$6") to rotate p/len (all 24 declaration orders inert, as this TU's func_80035270 notes)
- MIDI MThd header parser; no relocations. rtu_match MATCH 74/74 (coordinator-verified); gate_main 1/1 BANKED
- harvest: "multi-block variable = global_alloc bank" — a shift whose dest differs from its $aN source means a
  function-scope variable reused across blocks; no statement order reaches it from a per-site temp
2026-09-05 01:07:13 -06:00
Drew T 0276aaec68 feat(phase-32): T3 (8) — main: func_80023BF0 (281 ins) BANKED byte-identical 143dbb89 via gate_main — the OT link is libgpu's P_TAG 24-bit BITFIELD store (§364), not a hand-written mask/or
- the 11-18 plateau had two mutually-exclusive halves under (A & 0xFF000000) | (B & 0xFFFFFF): preheader hoist order
  of the two masks vs &otab[idx], and the $t3/$t4 pairing of the mask register and the slot pointer. store_field ->
  store_fixed_bit_field expands the RHS bitfield extract BEFORE the destination read, which fixes loop.c's movable
  order [&otab[idx]; 0xFFFFFF; 0xFF000000] AND the ior operand roles at once (operand swap alone = 35). Third witness
  for §364's -O2 half (func_8001D3FC/func_80021284/func_80023570 in the same TU already use the idiom).
- kept from the S79 90->18 chain (re-measured): the §194-A fence in both arms, `code` split from its base with
  compound accumulation, register u32 base __asm__("$3"), and exactly 13 zero-byte fences after pkt = D_800A5E60
  (0->15, 8->13, 10/11/12->7, 13->MATCH). Dropped as now inert: the m24 $11 and e1 $4 pins.
- the S80 permuter waypoint (closeness 11) was semantically UNSOUND (m24 sunk into one arm) and was not used (R63).
- rtu_match MATCH 281/281 (coordinator-verified); gate_main --apply 1/1, main byte-identical
2026-09-05 01:06:17 -06:00
Drew T ec8a305d75 feat(phase-32): T3 (7) — md_MAIN_007: func_800CEE2C (52 ins) BANKED byte-identical 2ff702b6 (Sonnet drafter; an early u8 *base local keeps &D_800AF630 in $s0 across two calls, the neighbour global read by raw offset with no relocation; one captured pointer local for a shared address) 2026-09-05 01:05:31 -06:00
Drew T c6c1352d20 feat(phase-32): T3 (6) — md_SC03_053: func_801EF624 (35 ins) BANKED byte-identical c0848f30 (Haiku drafter; a $16 register pin holds the state pointer across both arms) 2026-09-05 01:05:04 -06:00
Drew T d50576f729 feat(phase-32): T3 (5) — md_SC03_053: func_801EF6B0 (33) + func_801EF95C (20) BANKED byte-identical c0848f30 (Haiku drafters: a switch on the u16 state; a twin remap + one guarding beqz) 2026-09-05 01:04:27 -06:00
Drew T 3995237eb0 feat(phase-32): T3 (4) — main: func_80039B20 (79 ins) BANKED byte-identical 143dbb89 via gate_main — the S80 permuter plateau at 7 was an ALIAS FLAG, not a scheduler tie
- the redundant D_80073140[i] re-read was spelled *(s32*)(base1 + i*4): a cast-wrapped PLUS is DENIED the /s
  (MEM_IN_STRUCT_P) grant (expr.c:4570-4576, §30a#1), so true_dependence kept the edge to the fixed-address
  D_800C7D20 store and pinned the re-read below it. ((s32*)base1)[i] makes the INDIRECT_REF operand a top-level
  PLUS_EXPR -> /s granted -> the load hoists into the D_800C7D20 load-delay slot. Zero drift, first compile.
  Load-bearing kept: $6/$7 pins on i/off (-23 without), the volatile launder on the D_80073140 base (-39 without).
- lesson for the router: "redundant re-read scheduled at point-of-use" -> §30 first, never the permuter (it cannot
  reach an alias flag from C — why S80's ILS plateaued at 7 from a seed of 7). Harvest note in .run/P32/t3/.
- rtu_match MATCH 79/79 (coordinator-verified); gate_main --apply: 1/1 compatible, BANKED, main byte-identical
2026-09-05 01:03:40 -06:00
Drew T 5ff842dfd3 feat(phase-32): T3 (3) — resident: func_800D06E8 (344 ins) BANKED byte-identical 8e17e02f — THE RESIDENT IS 100% C (145/145)
- the Opus drafter recovered the closeness-0 body the journals (attempts 1-3) pointed at (.run/S71b_1/fable/) — the
  pack's inline 292-draft was the wrong one — and found the real blocker: the TU defines Struct80078E78 AFTER the
  slot with a layout lacking bytes 0x36/0x37; only a BLOCK-scoped typedef under a distinct tag (Blk80078E78) + a
  block-scoped extern compiles (decl-hoisting resolver variants recreate the S7x 'conflicting types'). Idioms:
  §162k1 QImode (u8)(c-3)<2; explicit flag temp t=(u32)(r-0x64)<0x1E, s1=t^1; switch decision trees for both
  currentLocationId dispatches. reloc_identity AGREE 50/50; rtu_match MATCH 344/344 (verified by the coordinator)
- jtbl_carve --func: jtbl_80113FA4 (5 words, the old tail2) joins the resident_jr_800D00E4 .rodata piece
  (0x450e0..0x451c0, JTBL_PADS 0,0,0,0, tables +0x0/+0x3c/+0xb4/+0xcc); carve set 5 -> 4 pieces, --pre kept
- make extract + make build BINARY=resident -j8 rc 0; sha 8e17e02ff8954d07c979449198f7e1645046b353 == check;
  pads_audit ok/ok; interleave_check ALIGNED n=4
2026-09-05 01:03:07 -06:00
Drew T ceeb1a1eb2 feat(phase-32): T3 (2) — md_SC03_053: func_801EF49C (49 ins) BANKED byte-identical c0848f30 (Haiku drafter; explicit goto labels reproduce the beqz/beq layout) 2026-09-05 01:01:13 -06:00
Drew T 4ecedb40ba feat(phase-32): T3 (1) — md_SC03_054: func_801EF558 (96 ins) BANKED byte-identical 06bd73df (Sonnet drafter, first draft; range-dispatch state setter, one reused local keeps the literal 6 in $s2 across the jals) 2026-09-05 01:01:13 -06:00
Drew T a2d28df189 feat(phase-32): T2c (4) — 7 more free banks in md_SC03_053 (byte-identical c0848f30); the five new modules are now 20/56 banked for 0 drafting tokens
- md_SC03_053: func_801EF58C (22, 8 -> 0x15) + func_801EF904 (22, 8 -> 0xA) <- ov_SC04_018:0x8017f564 ·
  func_801EF9AC (12, 0x3C9 -> 0x157) + func_801EFA0C (12, 0x3C9 -> 0x157, 1 -> 3) <- ov_SC03_006:0x80183744 ·
  func_801EF9DC (12, 0x266 -> 0x157, sh 0x102 -> 0xFC) <- ov_SC03_002:0x801822c8 · func_801EF46C (12, 0x7 -> 0xF)
  <- ov_SC03_001:0x80180a58 · func_801EF56C (8, pass-through to func_801858CC — the shape of main's func_80014128)
- one TU spelling of func_801858CC (`s32 (s32)`, the 3-arg call fn-ptr cast, §376) — six drafts from four different
  twin TUs had carried two spellings; rtu_match MATCH each; make build -j8 rc 0 (R53)
- new-module stubs 56 -> 36 (md_MAIN_007 15 · md_MAIN_009 10 · md_SC03_053 6 · md_SC03_054 4 · md_SC03_056 1)
2026-09-05 00:12:48 -06:00
Drew T 9ffd0b7ee3 feat(phase-32): T2c (3) — 5 more free banks (md_MAIN_007 ×2, md_SC03_054 ×2, md_SC03_056 ×1), byte-identical
- md_MAIN_007: func_800CF390 (8 — a 3-arg pass-through to func_800CF3B0, the shape of main's func_80014128, its
  d=0 twin) + func_800CF0B8 (15 — RELOC-ONLY twin of resident:0x800cf4d4 with the index global read as lw, s32)
- md_SC03_054: func_801F0098 + func_801F0104 (12 each — NEAR-COUSINs of ov_SC03_006:0x80183744; constants
  0x3C9 -> 0x11A, 1 -> 3, exactly as the real-TU diff named them)
- md_SC03_056: func_801CBBDC (11 — cousin of ov_SC03_001:0x8017ed8c, 2 -> 0xE)
- rtu_match MATCH each; make build -j8 rc 0: md_MAIN_007 2ff702b6 · md_SC03_054 06bd73df · md_SC03_056 bc768a6b
2026-09-05 00:12:09 -06:00
Drew T 89d177aa37 feat(phase-32): T2c (2) — 8 free banks in the five new modules (twin remaps, 0 drafting tokens), every module byte-identical
- d=0 hash twins via family_remap: md_MAIN_007 func_800CEF60 (13, <- md_MAIN_008:0x800cee8c) · md_SC03_053
  func_801EF5E4 (16, <- ov_SC01_077:0x801743f0) · md_SC03_056 func_801CBB54 (11, <- ov_SC03_001:0x80184278) +
  func_801CBC08 (16, <- ov_SC01_077:0x801743f0) · md_SC03_054 func_801F0134 (5, <- resident:0x800cf82c)
- RELOC-ONLY twins: md_MAIN_007 func_800CF02C (15, <- resident:0x800cf4d4) · md_MAIN_009 func_800CD384 (13,
  <- md_MAIN_003:0x800ceed0)
- d=1 cousin: md_SC03_053 func_801EF560 (3, <- ov_SC03_001:0x801805ec; one constant 0x2 -> 0x10 named by the
  real-TU diff)
- each rtu_match MATCH in its real TU, spliced in-tree, make build -j8 rc 0: md_MAIN_007 2ff702b6 · md_MAIN_009
  d270f695 · md_SC03_053 c0848f30 · md_SC03_054 06bd73df · md_SC03_056 bc768a6b (R53). Oracles: twin_rescan
  (now covers md_*) + seed_ref --all --near (74 open: 7 d=0, 3 RELOC-ONLY, 16 NEAR-COUSIN, 48 none)
2026-09-05 00:10:33 -06:00
Drew T 1e843c607a feat(phase-32): T2b (4) — SC03/56 ONBOARDED as md_SC03_056 @0x801CBB50 (ov_SC03_002's DESTPTR), byte-identical bc768a6b; ALL FIVE parked payloads are now binaries (fleet 213 -> 218); evidence tool v2
- md_SC03_056 (TEXT_LO 0x4, 4 stubs / 61 ins): 15/17 pointers cluster inside at 0x801CBB50; one outward call
  (0x8018151C) hits a function only 3 overlays have, ov_SC03_002 among them; req_fit 9/9 for ov_SC03_002
- payload_base_evidence.py v2 (controls 7/7 throughout): (a) STRONG = internal jals + fn-ptr-table entries on the
  module's own starts >= 2 (SC03/53 STRONG); (b) OUTWARD-EXPLAINED — a pure jal-vote base whose "internal" targets
  are function starts of the fleet's overlays is downgraded: SC03/56's 0x80178C8C was two SHARED-engine functions
  spaced like two of its five starts (and nobody's DESTPTR), a false STRONG; (c) the requester cross-check is
  informational only — shared engine code makes every requester fit (an R39 control caught it scoring: 6/7)
- memory-map §S45 p7 amended: all five rows ONBOARDED + the two instrument findings (the first build is a NULL
  oracle for FINE base errors — +8 builds byte-identical, +0x1000 fails the link; outward-explained vote bases);
  SETUP row amended. The parked-for-L3 ledger is EMPTY pending `make audit-disc` (T2c).
2026-09-04 23:52:58 -06:00
Drew T b52d67be0b feat(phase-32): T2b (3) — SC03/53 + SC03/54 ONBOARDED as md_SC03_053 / md_SC03_054 @0x801EF468 (the script slot), byte-identical c0848f30 / 06bd73df
- md_SC03_053 (TEXT_LO 0x4, 15 stubs / 372 ins) and md_SC03_054 (TEXT_LO 0xF0 — a 19-entry fn-ptr header, 7 stubs
  / 764 ins) share ov_SC03_001's DESTPTR slot 0x801EF468, the slot the S45 tracer watched other SC03 scripts load into
- BASE EVIDENCE (memory-map §S45 p7, static-derived STRONG at 0x801EF468 and nowhere else): SC03/53 — 52/75 absolute
  pointers inside, 3 of them + its one internal jal exactly on its own function starts (0 at every rival); SC03/54 —
  106/115 pointers inside, 5 header-table entries exactly on starts (0 at every rival); lui 0x801F ×18 / ×46
- first builds byte-identical (base-lenient, R34 — the base rests on the alignment; the first internal-call C bank
  byte-proves it); the §S45 p6 "onboard at 0x801EF468, let the first build decide" step, finally run
2026-09-04 23:51:45 -06:00
Drew T 10aaf5c296 feat(phase-32): T2b (2) — MAIN/9 ONBOARDED as md_MAIN_009 @0x800CD348 (TEXT_LO 0x3C), byte-identical d270f695; the OPDEMO1 module leaves the parked ledger
- tools/new_binary.sh md_MAIN_009 extracted/retail/MAIN.CD.dir/FILE_009.dir/0.1 0x800CD348 0x3C -> first build
  BYTE-IDENTICAL sha d270f695b793b5c03db159b7aabcc066daa87eda; 11 stubs (609 ins); window 0x800CD348..0x800CDD38
  lies below the resident's symbol region, so the default symbol stack stands (no A4 edit)
- BASE EVIDENCE (memory-map §S45 p7, static-derived STRONG): 6/6 internal jals and 9/9 absolute pointers land
  on the module's own function starts at exactly ONE base, 0x800CD348 — inside slot B's region (+0x82C from
  0x800CCB1C), not a previously known slot; lui 0x800C/0x800D ×51. Same caveat as md_MAIN_007: the first build
  is base-lenient (R34), the base rests on the alignment and will be byte-proven by the first internal-call C bank.
2026-09-04 23:51:08 -06:00
Drew T 1a696a851a feat(phase-32): T2b (1) — MAIN/7 ONBOARDED as md_MAIN_007 @0x800CEDF8 (TEXT_LO 0x34), byte-identical 2ff702b6; the OPDEMO0 module leaves the parked ledger
- tools/new_binary.sh md_MAIN_007 extracted/retail/MAIN.CD.dir/FILE_007 0x800CEDF8 0x34 -> first build
  BYTE-IDENTICAL sha 2ff702b605ab5cfc18474c464c4c07e5f8ffd48c; A4 applied (symbols.resident.txt not stacked —
  the window lies inside the resident's symbol region), re-extract + rebuild byte-identical; 19 stubs (802 ins)
- BASE EVIDENCE (memory-map §S45 p7, static-derived): STRONG — 9/9 internal jals and 14/16 absolute pointers
  land on the module's own function starts at 0x800CEDF8 (the boot slot of md_MAIN_001/008/011); lui 0x800C/0x800D
- HONEST CAVEAT (R34, measured 2026-09-05): the all-INCLUDE_ASM first build is a NULL oracle for FINE base
  errors — the same payload builds byte-identical at 0x800CEE00 (+8) — and catches only GROSS ones (at +0x1000
  two internal jal targets leave the window: `undefined reference to func_800CEEA4/func_800CF3F4`, link fails).
  The base therefore rests on the static alignment, and will be byte-proven by the first C bank that calls an
  internal sibling. Controls: .run/P32/t2b/{control_full,control_fine}.log
- registered in modules.mk + the report/diff dicts (R36 citizenship asserted by tools-health at T2c)
2026-09-04 23:49:05 -06:00