Commit Graph

4013 Commits

Author SHA1 Message Date
Drew T 4bb29544a2 feat(phase-33): A3 the with/without-SDK dual — NO_SDK=1 knob (skips the eleven psyq_integrate rewrites AND the -T externals fragments), make sdk-dual (refuses without all 11 SDK object dirs; WITH → extract → rm build/psyq → NO_SDK=1 → extract → WITH restore; map assertions; both legs == config/check.us.sha), wired into tools-health with a [skip] when the SDK is absent; proven: main 143dbb89… byte-identical WITH (1,288 psyq objects) and WITHOUT (12 libcd1 stub tiles), 28 s wall; SETUP P33 A3 (R21) 2026-09-06 18:51:19 -06:00
Drew T b23300fc21 feat(phase-33): A2 reporting instruments — make sig-main rewritten (tools/main_seed_ends.py: main's game-code boundaries DERIVED from the link map + objects, tiling asserted; 809 fns / 45,150 ins), progress.py weighs main by the build-derived sig and EXITS with no sig (R32), the digest's oracle clause derived live (0 phantom / 0 truncated / 0 pad-tail), backlog.linked_closed retires the LINKED-range legacy row (0 open), dup_report on the derived sig; CORRECTED main denominator 45,150 (Ghidra's flow boundaries left 3,628 words of game code unowned) — fleet instr 13,492,113 / distinct 5,820,205, all 100%; make report BINARY=main EXIT=0, audit-digest OK; SETUP §6.8 + P33 A2 rows (R21) 2026-09-06 18:46:52 -06:00
Drew T 73068f39f0 docs(phase-33): A1 governance — R65–R73 ratified at gate 1 (DIGEST §3), CURRENT_PHASE.md opened with the approved plan (verbatim) + the first 🛑 checkpoint; harness task list built (41 items, R28) 2026-09-06 18:30:30 -06:00
Drew T b5b79b3ac1 chore(phase-32): CLOSE — the frontier is empty: 0 stubs across 218 binaries, fleet 100.00 / 100.0 / 100.0, main 2,091/2,091 (v1.31.0)
- PhaseEnd_Phase32.md written; CURRENT_PHASE.md archived to phase-ends/logs/Phase32.md (R19); DIGEST.md §0/§2/§3 appended (step 3b)
- 5 sessions (S81–S85): the parked 5 onboarded (fleet 213 -> 218, UNCLAIMED 0 of 220); 77 functions banked (T1 3, T2c 20,
  T3 39, T4b 13, T4c 2) incl. the §474 PROVED wall, six candidate walls and the two S84 verdicts; every final bank pin-free
- fleet R22 after the last bank: 218 passed / 0 failed (exits 0/0/0, 16:13:17 MDT); make report 363,214/363,214 ·
  13,488,497/13,488,497 · 5,816,589/5,816,589; main REAL 789 · LINKED 1,256 · VERBATIM 3 · stubs 0 · 143dbb89;
  verbatim 5==5; wave_exclude 0; make tools-health OK (EXIT=0, .run/P32/t4e/tools_health.log)
- cookbook §496–§501-R (§501-Q the combine self-update ghost slot; §501-R the three-times-read hoisted invariant);
  accelerators (8)–(16); tools payload_base_evidence / ghost_census / agent_drafts_restore / cc1_dumps_tu / alloc_table
- rules: R64 ratified (the session-start digest); candidates (i)–(ix) recorded for Drew
- Roadmap delta: P32 consumed; P33 = verify + public flip + Gen2 exit
- v1.30.0 -> v1.31.0; committed by Claude at Drew's request (gate 2 confirmed 2026-09-06); Drew pushes (R6)
2026-09-06 16:29:00 -06:00
Drew T ea27bceb1e docs(phase-32): T4c CLOSE — fleet R22 after the last banks 218 passed / 0 failed (exits 0/0/0, 16:13:17 MDT); make report: 100.00% / 100.0% / 100.0%, INCLUDE_ASM 0, main 2,091/2,091 (143dbb89); gate 2 confirmed by Drew 2026-09-06 16:20:59 -06:00
Drew T 6e37e8ec62 docs(phase-32): T4c harvest + checkpoint — the frontier is EMPTY (census 0 stubs / 0 ins); cookbook §501-Q (the combine self-update ghost slot) + §501-R (a hoisted invariant read three times: inline temps merged by combine_movables, u16 as a cse firewall, the allocation order IS the callee-saved bank; every pin came off), accelerators (15)(16), decision-log P32 S85 T4c, tools/cc1_dumps_tu.sh + tools/alloc_table.py promoted (+ SETUP rows, cc1_dumps.sh -dL), wave_exclude 0 entries, backlog 1 legacy row, .run/P32/t4e (56 variants, 18+8 reproducers, NOTES, banks, slates); 🛑 checkpoint refreshed as the T5 seed (the fleet R22 + report chain runs in the background — its logs are recorded by the next session) 2026-09-06 16:13:19 -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 fe2f34b9f4 docs(phase-32): T4b CLOSE — hand pass complete (13/15 banked + 2 final verdicts); fleet R22 after the last bank 218 passed / 0 failed (exits 0/0/0, 13:21:49 MDT); make report: instr 13,487,557/13,488,497 = 100.0% · distinct 100.0% · fn-count 100.00% · INCLUDE_ASM 2; main 2,089/2,091 = 99.90% (143dbb89); tools-health OK; audit-disc UNCLAIMED 0; 🛑 checkpoint refreshed as the T5 seed
- .run/P32/t4d/: r22_{clean,extract,check}.log, report_close.log, report_main_close.log, tools_health.log, audit_disc.log, exclude_audit.log
- docs/progress.fleet.md + .run/backlog.jsonl regenerated by make report (backlog prune)
- CURRENT_PHASE.md: T4b ticked, the close log entry, the 🛑 block rewritten for the T5 successor (numbers, ledger, procedure, gotchas)
- NEXT = T5: milestone demo → WAIT for gate 2 → PhaseEnd_Phase32.md + DIGEST step 3b → git mv → R23 → uncommitted for Drew (R6) → HARD STOP
2026-09-06 13:38:01 -06:00
Drew T 0ab474ed5d docs(phase-32): T4b hand pass — row (d) harvest: cookbook §501-P (the atlas's 0.55 "weak cousin" was the same-shape sibling; its natural spelling ported with ZERO pins/fences; the 12-variant element census), accelerators (14), decision-log P32 S85, NOTES + 12 measured variants + rtu logs; backlog 3 open; census 2 stubs / 940 ins; T4b hand pass COMPLETE (13/15 banked + 2 verdicts)
- ov_SC03_105:func_80185810 banked in commit:4004 (bank.sh: rtu MATCH 489/489, build rc 0, sha d305ff6d… == config)
- §501-P: shape-grep the idiom's constants (`'0x200) << 2'`) and objdump the sibling's window before any dial; a pin/fence a draft
  "needs" is a property of its other dials — remove every pin after a sibling port (d9 = no pins = MATCH); census: F2 polarity 42,
  2-set uu 63, ot16 pin load-bearing only next to 2-set neighbours (d3 = 4); the S83 "hard reg hides nonzero_bits" guess refuted (d5)
- post-bank: twin_rescan 2 open / 0 free; verbatim_check --strict 5==5; backlog.py render 3 open; frontier_t4b_final.json 2 / 940
- .gitignore allowlist for .run/P32/t4d/ (variants, logs, notes, the banked body; rtu/ compile dirs stay ignored)
- fleet R22 running in the background (.run/P32/t4d/r22_*.log) — recorded at the T4b close
2026-09-06 13:21:29 -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 e7679b51ff docs(phase-32): T4b hand pass — row (c) func_80039308 PLATEAU at 4 (§501-O phantom-slot census for a leaf; ledger row); 🛑 CHECKPOINT refreshed for the pause: (a) PROVED · (b) BANKED commit:4001 · (c) PLATEAU 4 · (d) NEXT (sibling search first), then T4b close and T5
- (c): cnt's slot is spill_stack_slot[23] (evicted from $s7), so the phantom @0x8 must be an initial-loop no-traffic slot; every producer refuted on dump facts (leaf: no save area; LO spilled after GR and products alternate to GR_REGS — C3 measured; no unallocated single-block equiv pseudo; expand-time locals precede; 13 lh single-use, no lb). Rows 49/50 = two move_movables hoists in body order.
- row (d) read only (rtu DIFF 13 re-verified); brief + step 0 (§501-N banked-sibling search on its symbol set) in the checkpoint
- no src/ change in this commit; fleet R22 owed at the T4b close (last check-all 218/218 before the (b) bank)
2026-09-06 12:31:08 -06:00
Drew T 3e90db193f docs(phase-32): T4b hand pass — row (b) harvest: cookbook §501-N (port the banked sibling's spelling; the asm-label u32 array alias unlocks cse's OT base binding), accelerators (13), NOTES + 7 measured variants; ledger 4 open; bank.sh session trailer from $CLAUDE_SESSION
- func_800CF408 banked in commit:4001 (rtu MATCH 178/178 in the real TU; make build BINARY=md_MAIN_007 -j8 rc 0; sha 2ff702b6… == config/check.md_MAIN_007.sha)
- post-bank: twin_rescan 3 open / 0 newly free; verbatim_check --strict 5==5; backlog render 4 open (row pruned)
- CURRENT_PHASE.md: S84 log entry + checkpoint refreshed (rows (c)(d) next; fleet R22 owed at the T4b close)
2026-09-06 12:08:11 -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 b6fd3fff28 docs(phase-32): T4b hand pass — func_80032A74 PROVED at 1 by producer census (§501-M); ghost_census.py + cc1_dumps.sh repair; backlog tie-break repair
- main:func_80032A74 (422 ins, closeness 1): the residual is ONE reload-time slot at sp+0x48 (u16 draft = 422/422 code, DIFF 22 frame
  rows; s16 draft = DIFF 1 at idx 244 lh vs lhu). Every post-parameter slot producer enumerated from gcc-2.7.2 (reload1.c:658 ghost
  alter_reg / caller-save.c:249 area / reload1.c:879 invalid-equiv / reload1.c:3499 spill_stack_slot) and refuted on the bytes: combine's
  newi2pat ghosts re-derive a narrow load and the site is lhu (no lb, no double load); a save area without sw/lw needs sched.c:4962
  staleness and no register-only insn shares a block with a call; $t0 holds no pseudo; LO mult results retry into GR_REGS. Verdict
  PROVED at 1 (pin kept with the verdict; ledger WALL-PROVED).
- NEW mechanism measured: local-alloc.c optimize_reg_copy_2 (tmp = x; tmp op= c; x = tmp) mints a ghost with stale refs, but after
  regclass -> GR_REGS, allocated, no slot (P13/P14). 18 isolated reproducers, 0 draft variants; cookbook §501-M; accelerators (12).
- tools/ghost_census.py (new): ghosts in a .lreg dump with their class (ST_REGS => slot). tools/cc1_dumps.sh: prints the .frame line,
  ins count, spill lines and the census; the under-counting standalone-(use) grep is gone. SETUP rows (R21).
- tools/backlog.py: load_best kept the EARLIEST record at equal closeness (docstring said latest) — the S84 row never rendered; fixed.
- CURRENT_PHASE.md: S84 log + refreshed 🛑 checkpoint (rows (b)(c)(d) next, then T5). No src/config/carve change; fleet check-all
  218/218 rc 0 at the S84 preflight.
2026-09-06 11:44:40 -06:00
Drew T bfeef0c3a1 docs(phase-32): backlog ledger rows from the T4b close (render-time pruning of the banked rows) 2026-09-05 23:56:32 -06:00
Drew T f1f3346cdf docs(phase-32): T4b close — make tools-health OK quoted in the 🛑 checkpoint; log kept 2026-09-05 23:56:17 -06:00
Drew T efdb4c12a2 docs(phase-32): 🛑 CHECKPOINT — T4b first pass complete (11 of 15 banked, 4 carried with hand-crack briefs; Drew: hand-crack next session, no agents); fleet R22 218/218 at 23:36; make report instr 100.0% / distinct 100.0% (90,982/90,984) / fn 100.00% / 4 stubs; census 4 / 1,607 ins 2026-09-05 23:52:36 -06:00
Drew T fcec654163 docs(phase-32): cookbook §501-L — when two dials share a slot they couple (func_800CF408's floater cure vs the qty_compare contest; the decoupling lever) 2026-09-05 23:34:08 -06:00
Drew T 77b63f0bb5 docs(phase-32): T4b — func_800CF408 49 -> 3 NEAR, zero pins (Fable, 499k tokens): §501-H closers; residual = §501-H's floater mechanism coupled to the $t2/$t3 qty_compare contest; backlog row with the decoupling lever; all 15 first-pass rows complete (11 MATCH / 4 NEAR) 2026-09-05 23:33:33 -06:00
Drew T 90b2425ee0 docs(phase-32): cookbook §501-J (a proved tree wall is not an RTL wall — §474's floor built at RTL level via EXPAND_SUM, func_80011380) + §501-K (sched2's /s-store exemption and a pseudo's own slot vs a hand pad, func_800CF6D0); checkpoint §1b: 11 banked, 1 in flight, 1 pin left 2026-09-05 23:23:31 -06:00
Drew T 6f2731f0db docs(phase-32): T4b (11) ledger — func_800CF6D0 banked, backlog re-rendered, the Fable draft + report + verdict kept 2026-09-05 23:22:56 -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 444e8ab4b5 docs(phase-32): T4b (10) ledger — func_80011380 unpinned (1 wall remains: func_80032A74), backlog re-rendered, the Fable draft + report + verdict kept 2026-09-05 23:22:09 -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 395333f233 docs(phase-32): decision-log P32 S83 T4b (R31) — the final-15 directive: hand pass 0 banks, Fable agents 9 of 12 (six former walls), costs and outages; accelerators (10) Fable on the compiler-internals class, (11) attribute the residual to a pass before sweeping 2026-09-05 23:16:50 -06:00
Drew T d7d484abab docs(phase-32): T4b — Drew: no second round this session; close order after the three in-flight rows (R22, report, census, decision-log, accelerators, checkpoint) 2026-09-05 23:14:51 -06:00
Drew T 5e8e22a93c docs(phase-32): 🛑 checkpoint §1b — T4b state: 9 banked (commits listed), 3 NEAR improved with next levers, 3 agents in flight, queue empty; fleet R22 pending before any close 2026-09-05 19:26:57 -06:00
Drew T 9189a7caed docs(phase-32): T4b — func_80039308 17 -> 4 NEAR (Fable, 655k tokens): the alias block + rows 390/391 closed; residual = a phantom 8-byte spill slot at sp+8 (reload's $s7 spill register) + the hoisted constant's preheader order; corrected law: equal-priority load/store ties go to the store via potential_hazard; backlog row + draft + report kept 2026-09-05 19:26:19 -06:00
Drew T da90d3fc28 docs(phase-32): cookbook §501-I — manufacturing §172 producer-2 orphans (an s16 read from memory at each use), the shared-scratch store dependence, the laundered first-statement address (func_8017DC80); T4b row (9 banked) 2026-09-05 19:19:42 -06:00
Drew T d753c44172 docs(phase-32): T4b (9) ledger — func_8017DC80 banked (ov_SC07_002), backlog re-rendered, the Fable draft + report + verdict kept; queue updated 2026-09-05 19:19:06 -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 99b65ef94a docs(phase-32): T4b — func_80185810 35 -> 13 NEAR (Fable, 471k tokens): 3 of 4 windows closed (P_TAG bitfield qty priorities, sched1 flush_pending_lists load order, hard-reg dests not boosted); residual = the cl second-set fence; backlog row + draft + report kept 2026-09-05 19:09:36 -06:00
Drew T 066a2f1cce docs(phase-32): cookbook §501-H — large constants are unboosted floaters; the prologue weave is decided by which ready-list stalls eat them (func_800CD92C, zero pins); T4b row (8 banked) 2026-09-05 18:55:38 -06:00
Drew T 511afcf75c docs(phase-32): T4b (8) ledger — func_800CD92C banked (md_MAIN_009 100% C), backlog re-rendered, the Fable draft + report + verdict kept; queue updated 2026-09-05 18:55:02 -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 d7561f2680 docs(phase-32): cookbook §501-G — three passes, three dials (sched1 birthing boost / a phantom USE nop in sched2's model / a local-alloc tie broken by the P_TAG bitfield's flow ref count; func_800CF3E8); T4b row (7 banked, 1 near-proved) 2026-09-05 18:43:53 -06:00
Drew T 5d8b8478fa docs(phase-32): T4b (7) ledger — func_800CF3E8 banked (md_MAIN_003 100% C), backlog re-rendered, the Fable draft + report + verdict kept; queue updated 2026-09-05 18:43:11 -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 3c6d20991f docs(phase-32): T4b — func_80032A74 stays NEAR 1 (Fable, 402k tokens): the 0x48 slot is a GHOST pseudo (combine.c:2306-2313), the caller-save-area hypothesis REFUTED with citations, the only memory-value ghost species is the lh SIGN_EXTEND split; pin annotated, backlog row, draft + report kept 2026-09-05 18:35:27 -06:00
Drew T ce4cdaf750 docs(phase-32): cookbook §501-F — split the CSE quantity when loop.c proves the hoist split unreachable (hard-reg dividend copy + hoisted sign; func_801834A4); T4b row (6 banked) 2026-09-05 18:26:11 -06:00
Drew T 1081b02b66 docs(phase-32): T4b (6) ledger — func_801834A4 unpinned (2 walls remain), backlog re-rendered, the Fable draft + report + verdict kept; queue updated 2026-09-05 18:25:29 -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 78613864e4 docs(phase-32): cookbook §501-E — a register pin forbids that register to every retried allocno (regs_ever_live → bad_spill_regs → retry_global_alloc; func_80020DA4); T4b row (5 banked) 2026-09-05 18:16:51 -06:00
Drew T 9564314095 docs(phase-32): T4b (5) ledger — func_80020DA4 unpinned (3 walls remain), backlog 11 open, the Fable draft + report + verdict kept; resume queue (3-at-a-time) tracked 2026-09-05 18:16:50 -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 ad62b693a1 docs(phase-32): cookbook §501-D — one value-returning call makes the call a birthing insn (reg_n_sets[$v0]==1 → sched1 max priority → the def above the jal); a second $v0 set via the callee's real return type (func_8017DF28); T4b row (4 banked) 2026-09-05 13:29:17 -06:00
Drew T 32ff170bf3 docs(phase-32): T4b (4) ledger — func_8017DF28 unpinned (4 walls remain), backlog re-rendered, the Fable draft + report + verdict kept; bank.sh takes SPLIT for _jr_ TUs and prints rtu's tail when no verdict line appears 2026-09-05 13:28:35 -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 1f024f8e4b docs(phase-32): cookbook §501-C — the dying-input suggestion vs the birthing boost (func_800CD674); backlog 13 open; bank.sh DRAFT_DIR + R43 hardening; T4b row (3 banked) 2026-09-05 13:26:52 -06:00