Commit Graph

3929 Commits

Author SHA1 Message Date
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 3f8f0a5fe3 docs(phase-32): T3 LAUNCHED — 47 targets, 20 drafters running (16 Opus / 3 Sonnet / 1 Haiku), 27 Haiku queued behind the 20-concurrent cap; recovery route logged 2026-09-05 00:59:06 -06:00
Drew T 7ce1cd1801 docs(phase-32): T2c CLOSE — 20 free banks, R22 218/218 rc 0, census 54 stubs / 6,376 ins; disc-completeness P32 section (parked ledger EMPTY, audit-disc UNCLAIMED 0 of 220); regenerated fleet/disc/dup digests; T2d not needed 2026-09-05 00:49:07 -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 8b2bbff831 fix(phase-32): T2c (1) — split_indicator's population is derived from the yamls (was a stale stored 213-name list; tools-health said "213 OK of 213" over 218 binaries); R32 denominator assertion 2026-09-05 00:08:44 -06:00
Drew T 6853c0c341 docs(phase-32): cookbook §499 (static base evidence for a never-onboarded payload; the first build is a NULL oracle for fine base errors) + decision-log P32 S81 (R31: six instrument defects, one shape) 2026-09-04 23:55:26 -06:00
Drew T 6501c74652 docs(phase-32): T2b CLOSE — all five parked payloads onboarded (fleet 213 -> 218, +56 stubs); CURRENT_PHASE log + checkpoint 2026-09-04 23:53:35 -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
Drew T f698cf7630 docs(phase-32): T1b/T1c/T2a CLOSE — 3 banks, census 21 -> 18, R22 213/213 rc 0 after the T1b+T1c batch; CURRENT_PHASE log + checkpoint 2026-09-04 23:43:34 -06:00
Drew T 848c7c50ab feat(phase-32): T2a — tools/payload_base_evidence.py (controls-gated static base evidence) + memory-map §S45 p7: the parked five get candidate bases
- the instrument: module-id word, TEXT_LO estimate, absolute-pointer set, lui hi-half histogram, and a
  jal->function-start VOTE (starts = prologues ∪ the word after every `jr $ra`+delay — leaf functions have no
  prologue, the recall killer of S45's vote_base 4/12); scores a BOUNDED candidate list (5 §S44 slots ∪ 134
  IDXTAB DESTPTRs ∪ vote bases): STRONG / CONSISTENT / INCONSISTENT / NO-EVIDENCE; AMBIGUOUS tie sets are
  printed, never picked; a payload with no self-reference is REFUSED as base-independent (R43)
- R39 controls run before any emission: md_MAIN_008/011/013/042, md_SC03_073, md_SC02_009, md_SC07_004
  re-derive their byte-proven bases top-ranked from their payloads alone (7/7); TEXT_LO estimates == yaml
  (incl. the header-table modules 0x7C/0x14/0x158). The first draft of the scorer FAILED 5/7 (prologue-only
  starts; a top-rank assertion on modules the bytes cannot discriminate) — fixed by the controls, not shipped
- the five (G5 static-derived, US): MAIN/7 STRONG 0x800CEDF8 (9/9 jals, 14/16 ptrs on starts); MAIN/9 STRONG
  0x800CD348 (6/6, 9/9); SC03/53 + SC03/54 CONSISTENT with 0x801EF468 top of a 12-way tie; SC03/56 SPLIT
  (jal vote 0x80178C8C vs pointers/lui ~0x801CBB50). T2b probes each with new_binary.sh — the byte gate decides
- SETUP row (R21); evidence rows .run/P32/t2a/evidence.json
2026-09-04 23:42:53 -06:00
Drew T 059266afca feat(phase-32): T1c — md_MAIN_034: func_800CB00C (123 ins) BANKED byte-identical 46153c06 from the stored S72 body; its S68 "compiler wall" pin dropped
- the census's best_draft (.run/wave_g0c/shard30, 174 ins, 7 pins) was a DIFFERENT, wrong body under the bare
  name (R48); the journal (R38) named the real one — .run/O21/opus/func_800CB00C.c (88 lines, 7 BLOCK-scope
  callee externs: gcc-2.7.2 demotes the later-definition type conflict to a warning at block scope). rtu_match
  MATCH 123/123 in the real TU (the S75 redraft too); the S72 resolver had gated only the wrong file, 3x.
- raw splice into src/md_MAIN_034/md_MAIN_034.c; module island pads derived at build (§303); make build
  BINARY=md_MAIN_034 -j8 rc 0, sha 46153c06bca859dec05aff59fb1a77d3add3d02b == check (R53); verbatim strict ok
- config/wave_exclude.txt regenerated (exclude_audit --write): the md_MAIN_034 WALL pin labelled a wrong draft,
  not a wall — 8 -> 7 entries; docs/backlog.md re-rendered (matched rows drop)
- 0 drafting tokens; no Sonnet agent needed (plan T1c adjusted: no redraft)
2026-09-04 23:38:03 -06:00
Drew T c7f5b498ac feat(phase-32): T1b (3) — ov_SC02_017: func_80186C64 (209 ins) BANKED byte-identical c0253499 — the d=2 RELOC-ONLY twin of ov_SC02_016:func_801810C8 via family_remap + four TU spellings
- family_remap --addr 0x801810C8 --from ov_SC02_016 --to ov_SC02_017 --to-addr 0x80186C64 (23 per-overlay
  symbols remapped); rtu_match then named four §376 TU spellings (func_8012A828 (s32, void *); D_801E0F44 s32
  — address-only use; func_80131E00 (); func_80185F88 (s32) — calls already fn-ptr cast) + one TU-provided
  typedef to strip (Prim_8016E7C8, §491 gap 2) -> MATCH 209/209 in the old TU and in the new region TU
- jtbl_carve --func: jtbl_801EE414 clamped to its `sltiu 6` (6 entries) into
  [.rodata, ov_SC02_017_jr_80186C64] + tail19; JTBL_PADS 0,0; carve set 45 -> 46 pieces
- make extract + make build BINARY=ov_SC02_017 -j8 rc 0, sha c0253499eed71309d731862ffc76766d183d031e ==
  check (R53); pads_audit all ok; interleave_check ALIGNED n=46; verbatim_check --strict no drift
- 0 drafting tokens (the journal's S69/S70 lever drafts carried the same body; R38)
2026-09-04 23:36:52 -06:00
Drew T 599dba3ba0 feat(phase-32): T1b (2) — ov_SC02_017: func_80186C64 isolated into its own code subseg [0x5eb0c, c, ov_SC02_017_jr_80186C64] (byte-identical c0253499)
- jr_isolate_all ov_SC02_017 --only func_80186C64 (CLEAN after the §497 carrier fix — no source rename);
  2 region files; make extract + make build BINARY=ov_SC02_017 -j8 rc 0, sha
  c0253499eed71309d731862ffc76766d183d031e == check (R53). Carve state only; the bank is the next commit.
2026-09-04 23:35:19 -06:00
Drew T 287ea155c9 docs(phase-32): T1a CLOSE — resident func_800D128C banked, R22 213/213 rc 0; CURRENT_PHASE log + checkpoint (T1b/T1c stored MATCH bodies found via the journals, R38) 2026-09-04 23:33:34 -06:00
Drew T c513e1fbbd feat(phase-32): T1a (2) — resident: func_800D128C (243 ins) BANKED byte-identical 8e17e02f via the raw splice + a 5-piece carve; three instrument fixes (§498)
- BANK: the stored S71 closeness-0 draft spliced into src/resident/resident_jr_800D128C.c; jtbl_carve --func
  carved jtbl_80113FB8 (119 entries, 1 pad word trimmed) + jtbl_80114198 into [0x451c0, .rodata,
  resident_jr_800D128C] + [0x453c4, data, tail3]; JTBL_PADS 0,4; make extract + make build BINARY=resident -j8
  rc 0, sha 8e17e02ff8954d07c979449198f7e1645046b353 == check (R53). pads_audit ok/ok; interleave_check
  ALIGNED n=5; verbatim_check --strict 5==5. Resident stubs 2 -> 1 (func_800D06E8 remains).
- WHY THE GATE SAID DIFF (parallel_gate banked 0/DIFF on an rtu_match MATCH): jtbl_carve.set_overlays_var
  regenerated resident_JTBL_INTERLEAVE from the carve set and DROPPED the resident's `--pre hdr.rodata.o`
  (§8f leading-rodata sandwich); make extract refused (ld_interleave: hdr.rodata.o would be parked with
  .text), the build linked the STALE script (249,252 differing bytes from file offset 0x4), and
  harvest_verify._jtbl_prep_one never read the post-carve extract's exit code (R49/R61).
- FIXES (R35/R40/R57): jtbl_carve._merge_pre carries an existing --pre forward (idempotent; overlays
  unchanged, 4-shape unit control); harvest_verify refuses loudly on a failed post-carve extract and
  restores the snapshot (CARVE refusal, NOT a draft verdict); interleave_check's anchor accepts a leading
  --pre (was a false DRIFT n=0 on the resident; control ov_SC02_017 ALIGNED n=44 unchanged).
- cookbook §498 (+ the stale-asm-after-a-failed-extract sequencing law); SETUP rows for all three
2026-09-04 23:28:59 -06:00
Drew T c52190ca86 fix(phase-32): T1b (1) — jr_isolate_all keys a bodiless typedef struct Tag Alias; by the ALIAS (§497); ov_SC02_017 dry-run REFUSED -> CLEAN, no source rename
- _type_names returned the TAG for `typedef struct Rec801806C8_s Rec801806C8;`, so the typedef block and the
  tag's own packed struct definition collided under one key with different bodies and the R43 "CONFLICTING
  bodies — a rename is needed" refusal fired on legal C. Now keyed by the alias (_TYPEDEF_TAG_ALIAS); the
  `carried` set learns the alias; `typedef struct X X;` (alias == tag) keeps the old key so a second one
  still dedupes/refuses. Unit control on 7 block shapes PASS; ov_SC02_017 --only func_80186C64 --dry-run:
  2 region files, no carve repoints. cookbook §497; SETUP row.
2026-09-04 23:24:02 -06:00
Drew T 380ccdc843 feat(phase-32): T1a (1) — resident code subseg split (3 regions, byte-identical 8e17e02f) + jr_isolate_all include-derived provided types (§496)
- jr_isolate_all resident --only func_800D128C: [0x4 c resident] [0x12ec c resident_jr_800D00E4]
  [0x2494 c resident_jr_800D128C]; the banked jr func_800D00E4's .rodata carve + JTBL_PADS + --order
  repointed to resident_jr_800D00E4.o (config/overlays.mk resident block only, R60); make extract +
  make build BINARY=resident -j8 rc 0, sha 8e17e02ff8954d07c979449198f7e1645046b353 == check (R53)
- TOOL FIX (R43/R33): the carried-type test consulted _engine_types() (engine_types.h + common.h) for
  every TU, assuming each region includes engine_core.h; the resident includes only common.h, so its
  file-local `typedef struct {...} CdFileLoc;` (a name engine_types.h also defines) was silently NOT
  carried -> `parse error before cdFileLocTable` in both region TUs, build rc 2 while the stale binary
  on disk read green. Now _provided_types(header) derives the set from the TU's own #include lines
  (engine_core.h => engine_types.h + common.h, never engine_core's macro-internal typedefs; common.h
  => common.h) and _file_scope_decls(items, provided) uses it at both decision points. R39 controls:
  overlay header == legacy set (1,197 names); resident set lacks CdFileLoc. cookbook §496; SETUP row
- rtu_match func_800D128C --split resident_jr_800D128C: MATCH (243 ins) on the stored S71 draft;
  the gate is the next commit
2026-09-04 23:20:04 -06:00
Drew T a16163ebb6 chore(phase-32): T0 OPEN — Phase 32 (the last 21 + the parked 5) plan approved at gate 1; CURRENT_PHASE.md + baseline reads all green
- gate 1 approved 2026-09-05 (plan mode, Max, Fable 5.1); rules R44–R63 ratified
- CURRENT_PHASE.md: milestone + kill gate, effort/model map, the 4 approved adjustments vs
  docs/frontier-p32.md §4 (parked 5 BEFORE the crack pass — static header probe gave every payload a
  deterministic candidate base), tasks T0–T5 as checkboxes, standing procedure, blockers, checkpoint
- baseline (.run/P32/t0_baseline.log): verbatim_check --strict 5==5; exclude_audit --assert-fresh 8/8;
  frontier_classify 21 rows (B-CARVE 4 / D-NEAR 10 / F-FAR 7) == the S80 census; make tools-health OK;
  make check-all 213 passed / 0 failed (rc 0)
- harness task list #1–#11 built (R28)
2026-09-04 23:12:57 -06:00
Drew T 77df1092e2 docs(phase-31): post-close bank — accelerators.md S80 (five: loop tools must prove they iterated; the byte gate is a null oracle for 'is this C?'; a pointer-only callee's extern is unconstrained; banked-but-not-merged printed as success; Agent-tool drafters outlive the session) + wave-playbook S80 (parallel_gate's exit-2 guard and recovery route in the gate section; the one-agent-per-function shape + agent_verdicts addendum) 2026-09-04 22:36:55 -06:00
Drew T 27180c705d chore(phase-31): CLOSE — the frontier atlas & wide-tolerance campaign; fleet 95.3% -> 100.0% instr (213/213), main 1,041 -> 12 open, the last 21 ledgered (v1.30.0)
- PhaseEnd_Phase31.md written; CURRENT_PHASE.md archived to phase-ends/logs/Phase31.md (R19)
- 30 sessions (S51–S80): the atlas (T4/T5), the 6k-ins wave doctrine, the autonomous lanes,
  the completion sprint; stubs 12,059 -> 21 (4,554 ins); dedup 2,061 -> 2,220 / 0 failed
- main: SDK regions LINKED from real objects incl. the PsyQ RTL 4.2 + libpad 4.2.1 archive (S79),
  the scattered-.bss class closed (psyq_bss_split), SaveLoadRoutine banked, main's second oracle;
  REAL 777 / LINKED 1,256 / stubs 12 / 99.43% byte-identical / 95.0% game-code
- the verbatim class discovered, censused from the archive tables, reduced to the 5 PERMANENT rows
- rules: R37–R39 ratified (gate 1), R40–R43 + R61 accepted in-phase; R44–R63 proposed in the PhaseEnd
- Roadmap delta: P32 = the 21-row census + the 5 parked payloads, kill-gated (docs/frontier-p32.md)
- milestone (gate 2, Drew 2026-09-05): 213/213 byte-identical, fleet 100.0% instr, every remaining
  stub on a named ledger; roadmap v2's "main + resident at 100%" NOT literally met (12 + 2 open)
- v1.29.0 -> v1.30.0
2026-09-04 22:26:47 -06:00
Drew T 3c292ef097 docs(phase-31): S80 — docs/frontier-p32.md, the Phase-32 jumping-off document: the last 21 functions by blocker (each with its instrument's verdict, mechanism citation, best-draft path and route — the two NON-CONTIGUOUS carves dry-run/refusal detail, the RELOC-ONLY twin, the leading-island case, the 8 pinned walls, the 3 near plateaus, the 7 far drafts), the five parked disc payloads, the routes/instruments a fresh session must know, and the proposed Phase-32 shape with its kill gate 2026-09-04 22:20:20 -06:00
Drew T 452975e852 docs(phase-31): S80 #10 CLOSE — the verbatim end-state: manifest 6 → 5 rows (the five PERMANENT rows RATIFIED in _README; the GAME-C row decompiled), cookbook §495 (two def-side declaration walls, the S79 assembly "bank" P9 correction, the gate that dropped a bank on exit 0), decision-log S80 addendum (R31), SETUP rows; tools/parallel_gate.py: banked-but-not-merged now exits 2 with the worker's raw git status kept + per-run .run/pgate_runs/<ts>.json; CURRENT_PHASE #10 bullet + the S80 #10 CLOSE checkpoint (R22 213/213, tools-health OK, census 21 stubs / 4,554 ins, NEXT #11 = PhaseEnd, gate 2); regenerated digests 2026-09-04 22:07:35 -06:00
Drew T 082ddc8590 feat(phase-31): S80 #10 (2) — ov_SC03_107: func_8017D878 (45 ins, the manifest's one GAME-C verbatim, "37 stored drafts") DECOMPILED: the stored best draft was byte-correct all along — it needed only its real return type (s32: the address of func_80172710 or 0) once the TU's extern void func_8017D878(void) was corrected (commit:3893) — a def-side declaration wall, not codegen; match_one 45/45, rtu_match MATCH, worktree gate banked (its merge step adopted 0 files — spliced in-tree instead) + in-tree byte-identical 87d02b57. ov_SC03_107 is now 100% C; the game's verbatim set is the five PERMANENT rows 2026-09-04 21:49:34 -06:00
Drew T b7f73e7187 feat(phase-31): S80 #10 (1) — md_MAIN_020: func_800CB17C (30 ins) DECOMPILED — the S79 #7 "raw splice" had banked its assembly as a verbatim __asm__ body (P9 correction: that was not a decompile, verbatim_check --strict caught it as a new verbatim); the C is seven straight calls (s0 = a0; func_8012A304(*(s16*)(s0+0xA), 0x80); func_801477E8(s0, 0xFFE80000); func_80154274(s0, D_800CB1F4); func_80147324(0x47A); func_8014C010(s0, 2); func_801483E8(s0); func_80019064(D_80062BD0)) as an s32 function with no return (the target sets no $v0); the TU's block-scope struct S decl needed a file-scope tag (commit:3894); match_one 30/30, rtu_match MATCH, worktree gate + in-tree byte-identical 0990e041 2026-09-04 21:49:33 -06:00
Drew T ec15509e68 chore(phase-31): S80 #10 — md_MAIN_020: a file-scope struct S; tag so the TU's block-scope extern s32 func_800CB17C(struct S *) no longer declares a block-local tag that no file-scope definition can match (conflicting types); byte-identical 0990e041 2026-09-04 21:46:55 -06:00
Drew T dd45617982 chore(phase-31): S80 #10 — verbatim end-state plumbing, byte-neutral: (1) ov_SC03_107:func_8017D878's file-scope __asm__ block (the manifest's one GAME-C row) converted back to an INCLUDE_ASM stub with tools/verbatim_to_stub.py --gate (87d02b57 byte-identical) and the TU's extern void func_8017D878(void) corrected to the real s32 (s32) signature (only its address is taken; ov_SC03_107 rebuilt byte-identical) — the void decl was the def-side wall that refused 37 drafts; (2) md_MAIN_020:func_800CB17C — S79 #7's "raw splice" had committed the function's ASSEMBLY as a verbatim __asm__ body (every stored 'draft' was the asm; verbatim_check --strict flagged it as a new verbatim) → converted back to a stub (0990e041 byte-identical): that bank was not a decompile (P9), the function is open again; (3) manifest _README: the five PERMANENT-VERBATIM rows RATIFIED 2026-09-04 21:45:31 -06:00
Drew T 846c6d5891 docs(phase-31): S80 #9 CLOSE checkpoint — task #9 DONE (ten banks; open stubs 31 → 21; main REAL 777 / stubs 12 / game-code 95.1%; fleet instr 100.0%, 213/213 R22, tools-health OK); the frontier census regenerated (21 = 4 B-CARVE + 10 D-NEAR + 7 F-FAR, 4,554 ins); NEXT #10 with its design brief (main() is already C, the -O0 cluster is spent — #10 = ratify the 5 PERMANENT verbatims + decompile ov_SC03_107:func_8017D878); regenerated digests 2026-09-04 21:41:17 -06:00
Drew T 09e0b27811 docs(phase-31): S80 #9c — the S79 drafting task's NEAR/WALL ledger: 15 rows logged to the backlog (each with the residual's gcc mechanism), the ≤3 residuals pinned as WALL candidates in config/wave_exclude.txt after an 8-seed permuter_ils sweep on the now-permutable pinned seeds (no score-0; func_80039DEC 9→2 = the K&R raw-preserve register, func_80023BF0 18→11 ADDRESSING, func_8017DF28's "1" was a divergent store rewrite — closeness stays 2, R14); cookbook §494 v2 (ten banks, the Opus verdicts' idioms: P_TAG bitfield store, inverted arms, sibling-reading, the 518-ins spelling laws, gdb-on-cc1 allocno arithmetic, K&R s16 params, true_dependence, field-boundary fences, extendhisi2 orphans, [][1] decls) + the final ledger; .run/S79w allowlisted (27 drafts + 3 permuter waypoints + verdict ledger + briefs, 264 KB — R20) 2026-09-04 21:21:05 -06:00
Drew T 7fbdb8fd63 fix(phase-31): S80 #9c — the permuter could not permute a PINNED seed, and it was our instrument: hide_asm carried only the __asm__ spelling (3 S79 seeds use asm("$7")), permuter_ils warm-restarted from the DECODED waypoint (raw pins back in base.c → cycles 2..N were silent parser refusals reported "(unchanged)"), and defines_fn refused K&R-style definitions (436 stored backlog drafts kept out of the lane for four phases). Fixed + R39-controlled over 5,311 drafts (the bare word asm in INCLUDE_ASM path strings was a caught false positive): re-hide every waypoint, assert the definition survived, abort exit-2 on a refusal (R61a), flushed logs (R55). Every S79 pinned seed now iterates; ov_SC06_022:func_8017DF28 (pinned WALL, closeness 2) reached 1 in its first cycle. cookbook §493 S80 correction + §494 v1 (S79 idioms); SETUP rows (p16_permute/permuter_ils, agent_verdicts.py) 2026-09-04 20:59:35 -06:00
Drew T 402b7520c4 feat(phase-31): S79 #9 (10) — ov_SC02_027: func_80180B3C (297 ins, F-FAR) banked from an Opus agent's draft: recovered the S76 closeness-23 body and broke the 5-attempt plateau with four dials — tpg |= (y & 0x200) << 2; as its own accumulator statement, a register u32 c40 __asm__("$2") pin on the (w&0x40)>>6 term, the if (c) v -= 0x100 split into a second variable so sched1's birthing boost stops sinking the mask, and the inverted-arm if (!c) vv = v; else vv = v - 0x100; that keeps the &0xFFFF/-0x100 alive for the u8 store (the same arms un-inverted delete the andi); statement order INERT (792 permutations); real-TU MATCH after dropping the TU's duplicate Blk32_80180908 typedef; worktree gate + in-tree byte-identical 2026-09-04 20:50:13 -06:00
Drew T d04fe31882 feat(phase-31): S79 #9 (9) — main: func_8001EFE0 (468 ins, the largest G-UNKNOWN main body) banked from an Opus agent's draft: recovered the prior closeness-14 body from .run/match and closed all three [permuter]-filed clusters by reading the matched same-TU siblings func_8001DA34/func_8001EA14 — the addPrim tail's ot split so the sll lands between the two pinned luis, one zero-byte fence between the tpage sh and the q[7] RMW, a §419 density asm on (vh,vv2,vw) for the two-SVECTOR fill, and the shift split from its mask; rtu_match --tu src/800.c MATCH, gate_main --apply clean rebuild BYTE-IDENTICAL 143dbb89 2026-09-04 20:47:51 -06:00
Drew T 618e0907d4 feat(phase-31): S79 #9 (8) — ov_SC01_001: func_80181E04 (269 ins, the GAME-GTE 'uncertain' body) banked as compiler C by an Opus agent: sixteen D_801EDA?? globals as one 0x50-stride record array (§246-2/§200), a counted i<0x100 loop, the gte_stsz3 branch shape, and the OT insert as PsyQ's P_TAG addr:24 bitfield store (store_bit_field masks the value first); real-TU MATCH, worktree gate + in-tree byte-identical 2026-09-04 19:57:19 -06:00
Drew T 2709321082 docs(phase-31): S79 HANDOFF checkpoint mid-task #9 — 7 banks this task (open stubs 51 -> 25 this session), plateaus with residuals named, 11 drafting agents still running; tools/agent_verdicts.py extracts their final JSON verdicts from the subagent transcripts for the fresh session to aggregate (procedure + paths in the 🛑 block) 2026-09-04 19:50:01 -06:00
Drew T 96c0fc02a7 feat(phase-31): S79 #9 (7) — ov_SC05_010: func_8017FFA8 (88 ins, 6-way jtbl switch) banked from a Sonnet agent's fresh draft (loop index s32 not s16 — §241 fused sign-extend; the D_801922B8 lookup into its own temp before the found/zero stores); tail jtbl carve at gate time; worktree gate + in-tree byte-identical 2026-09-04 19:45:16 -06:00
Drew T cdf50f96d7 feat(phase-31): S79 #9 (6) — ov_SC06_010: func_801809E4 (33 ins) banked by the Sonnet escalation (the Haiku plateau's missing 2 ins was an early return that should fall through into the shared mask/store tail; the -0x10 no-save frame is two s16 locals, §186b); real-TU MATCH, worktree gate + in-tree byte-identical 2026-09-04 19:43:50 -06:00
Drew T 1961a7bfb1 feat(phase-31): S79 #9 (5) — main: func_8002AC98 (114 ins) banked: the generic arm's val = r + b routed through a fresh s32 temp ({ s32 xt = r + b; val = xt; }, with b widened to s32) so expand_binop's target==op1 swap does not fire — the same lever as func_80015608; gate_main BYTE-IDENTICAL 143dbb89 2026-09-04 19:05:29 -06:00
Drew T a296bba0f3 feat(phase-31): S79 #9 (4) — md_MAIN_003: func_800D1D14 (65 ins, -O0 island) banked as genuine C (the S76 verbatim body retired): D_800D3630 read as *(s16*)&D_800D3630[i] so gcc materialises the base instead of folding %lo through $at; byte-identical dd1b32ec 2026-09-04 19:04:55 -06:00
Drew T 0833b418e6 feat(phase-31): S79 #9 (3) — ov_SC05_018: func_80180BE0 (65 ins) banked: the S74 recipe's memcpy(12) became a jal under the TU's extern memcpy; re-spelled as a 12-byte struct assign (the TU's own Blk8 idiom) — real-TU MATCH, worktree gate + in-tree byte-identical 2026-09-04 19:03:23 -06:00