docs(phase-31): S79 #7 close — cookbook §492 (plumbing was three things: a raw-splice bank, an -O0 checker flag, two R48 same-name phantoms), census 32, report, backlog ledger, checkpoint (task #8 brief); func_80011380 pinned as the §474 proved wall

Stubs 35 -> 32 after the #7 banks (commit:3873 commit:3874); R22 fleet 213/213 (.run/S79_check_all_7.log).
ov_SC05_018:func_80180BE0 and ov_SC06_010:func_801809E4 have NO draft: their ledger drafts were other
overlays' same-named functions (.run/backlog_drafts/<fn>.c is keyed by bare fn name) -> drafting pool.
config/wave_exclude.txt: main:func_80011380 pinned WALL with the §474 proof (fold-const split_tree +
stupid.c adjacency), 4 entries.
This commit is contained in:
Drew T
2026-09-04 18:34:34 -06:00
parent 42d432770d
commit 80ddd40d23
7 changed files with 87 additions and 43 deletions
-3
View File
@@ -1,10 +1,7 @@
{"ts": "2026-08-25 23:39:15", "addr": "0x80180b3c", "name": "func_80180B3C", "reach": null, "klass": null, "nins": 297, "status": "near", "closeness": 125, "where_stuck": "resolver DIFF (real-TU rtu_match, 20260825-233820): mine=296 target=297", "best_draft": ".run/wave_eo/shard478/func_80180B3C.c", "binary": "ov_SC02_027", "source": "resolver", "residual": null, "passes_tried": null}
{"ts": "2026-08-29 17:19:19", "addr": "0x80181804", "name": "func_80181804", "reach": null, "klass": null, "nins": null, "status": "near", "closeness": 0, "where_stuck": "match_one MATCH but the whole-binary gate rejected \u2014 CAUSE NOT DETERMINED. FIRST re-derive the destination TU from the asm subdir: asm/<ov>/nonmatchings/<TU_stem>/<fn>.s => src/<ov>/<TU_stem>.c (the third path component IS the TU). Only then look for a decl conflict or a codegen residual.", "best_draft": ".run/backlog_drafts/func_80181804.c", "binary": "ov_SC04_018", "source": "family-remap", "residual": null, "passes_tried": null}
{"ts": "2026-08-25 23:39:15", "addr": "0x800d06e8", "name": "func_800D06E8", "reach": null, "klass": null, "nins": null, "status": "failed", "closeness": null, "where_stuck": "resolver CC1 (real-TU rtu_match, 20260825-233820): .run/resolver/work/resident__func_800D06E8/c0/rtu/func_800D06E8/t.c:1770: conflicting types for `Struct80078E78'", "best_draft": ".run/wave_ch/shard62/func_800D06E8.c", "binary": "resident", "source": "resolver", "residual": null, "passes_tried": null}
{"ts": "2026-08-26 02:23:19", "addr": "0x80180b3c", "name": "func_80180B3C", "reach": null, "klass": null, "nins": 21, "status": "near", "closeness": 287, "where_stuck": "resolver DIFF (real-TU rtu_match, 20260826-022235): mine=287 target=21", "best_draft": ".run/wave_eq/shard63/func_80180B3C.c", "binary": "ov_SC07_000", "source": "resolver", "residual": null, "passes_tried": null}
{"ts": "2026-08-26 05:32:16", "addr": "0x800cb00c", "name": "func_800CB00C", "reach": null, "klass": null, "nins": 123, "status": "near", "closeness": 168, "where_stuck": "resolver DIFF (real-TU rtu_match, 20260826-053145): mine=174 target=123", "best_draft": ".run/wave_g0c/shard30/func_800CB00C.c", "binary": "md_MAIN_034", "source": "resolver", "residual": null, "passes_tried": null}
{"ts": "2026-08-29 17:19:19", "addr": "0x80181cb8", "name": "func_80181CB8", "reach": null, "klass": null, "nins": null, "status": "near", "closeness": 0, "where_stuck": "match_one MATCH but the whole-binary gate rejected \u2014 CAUSE NOT DETERMINED. FIRST re-derive the destination TU from the asm subdir: asm/<ov>/nonmatchings/<TU_stem>/<fn>.s => src/<ov>/<TU_stem>.c (the third path component IS the TU). Only then look for a decl conflict or a codegen residual.", "best_draft": ".run/backlog_drafts/func_80181CB8.c", "binary": "ov_SC04_018", "source": "family-remap", "residual": null, "passes_tried": null}
{"ts": "2026-09-01 20:34:37", "addr": "0x80062144", "name": "func_80062144", "reach": null, "klass": null, "nins": null, "status": "failed", "closeness": null, "where_stuck": "won't compile standalone (loose-typing / missing decl)", "best_draft": null, "binary": "main", "source": "S70-332b", "residual": null, "passes_tried": null}
{"ts": "2026-09-03 00:04:37", "addr": "0x80180b3c", "name": "func_80180B3C", "reach": null, "klass": null, "nins": null, "status": "failed", "closeness": null, "where_stuck": "won't compile standalone (loose-typing / missing decl)", "best_draft": ".run/backlog_drafts/func_80180B3C.c", "binary": "ov_SC02_027", "source": "s75-redraft", "residual": null, "passes_tried": null}
{"ts": "2026-09-03 19:09:54", "addr": "0x800cb17c", "name": "func_800CB17C", "reach": null, "klass": null, "nins": null, "status": "near", "closeness": 0, "where_stuck": "match_one MATCH but the whole-binary gate rejected \u2014 CAUSE NOT DETERMINED. FIRST re-derive the destination TU from the asm subdir: asm/<ov>/nonmatchings/<TU_stem>/<fn>.s => src/<ov>/<TU_stem>.c (the third path component IS the TU). Only then look for a decl conflict or a codegen residual.", "best_draft": ".run/backlog_drafts/func_800CB17C.c", "binary": "md_MAIN_020", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-09-03 19:42:37", "addr": "0x80181e04", "name": "func_80181E04", "reach": null, "klass": null, "nins": null, "status": "failed", "closeness": null, "where_stuck": "won't compile standalone (loose-typing / missing decl)", "best_draft": ".run/backlog_drafts/func_80181E04.c", "binary": "ov_SC01_001", "source": "worker", "residual": null, "passes_tried": null}
+1
View File
@@ -5,3 +5,4 @@
md_MAIN_034:func_800CB00C # WALL: compiler wall (merged from S68_walls_332.txt)
ov_SC03_105:func_801834A4 # WALL: loop.c movable ordering, closeness 6 (S71)
ov_SC06_022:func_8017DF28 # WALL: expand_block_move copy_addr_to_reg pseudo + cse reuse, closeness 2 (S71)
main:func_80011380 # WALL: §474 PROVED C-level floor (closeness 6) — fold-const.c:882 split_tree merges MULT(MULT(i,2),2); the two escapes each cost one instruction (stupid.c:497 adjacency / expand_decl use-brackets); §388 -O0 colouring oracle. Pinned S79 #8.
+8 -11
View File
@@ -2,17 +2,14 @@
> Generated by `tools/backlog.py render` from `.run/backlog.jsonl`. These are functions the Phase-21 automation got **close** on but did NOT byte-match. The whole-binary byte-gate is the sole arbiter (G3/P9): **byte-matches bank and are NOT listed here** — only genuine near-misses/blockers are. Ranked by hand-session priority: **reach** (×N propagation leverage) → **closeness** (match_one mismatch count, lower = closer) → **size**. Each row's `best_draft` is the closest C the machine reached — resume from there.
**Open near-misses:** 10 · by status {'near': 6, 'failed': 4} · by class {None: 10}
**Open near-misses:** 7 · by status {'near': 3, 'failed': 4} · by class {None: 7}
| # | addr | reach | class | nins | status | closeness | where it stuck | best draft |
|--:|------|------:|-------|-----:|--------|----------:|----------------|------------|
| 1 | func_80181804 | None | | None | near | 0 | match_one MATCH but the whole-binary gate rejected — CAUSE NOT DETERMINED. FIRST re-derive the destination TU from the asm subdir: asm/<ov>/nonmatchings/<TU_stem>/<fn>.s => src/<ov>/<TU_stem>.c (the third path component IS the TU). Only then look for a decl conflict or a codegen residual. | `.run/backlog_drafts/func_80181804.c` |
| 2 | func_80181CB8 | None | | None | near | 0 | match_one MATCH but the whole-binary gate rejected — CAUSE NOT DETERMINED. FIRST re-derive the destination TU from the asm subdir: asm/<ov>/nonmatchings/<TU_stem>/<fn>.s => src/<ov>/<TU_stem>.c (the third path component IS the TU). Only then look for a decl conflict or a codegen residual. | `.run/backlog_drafts/func_80181CB8.c` |
| 3 | func_800CB17C | None | | None | near | 0 | match_one MATCH but the whole-binary gate rejected — CAUSE NOT DETERMINED. FIRST re-derive the destination TU from the asm subdir: asm/<ov>/nonmatchings/<TU_stem>/<fn>.s => src/<ov>/<TU_stem>.c (the third path component IS the TU). Only then look for a decl conflict or a codegen residual. | `.run/backlog_drafts/func_800CB17C.c` |
| 4 | func_80180B3C | None | | 297 | near | 125 | resolver DIFF (real-TU rtu_match, 20260825-233820): mine=296 target=297 | `.run/wave_eo/shard478/func_80180B3C.c` |
| 5 | func_800CB00C | None | | 123 | near | 168 | resolver DIFF (real-TU rtu_match, 20260826-053145): mine=174 target=123 | `.run/wave_g0c/shard30/func_800CB00C.c` |
| 6 | func_80180B3C | None | | 21 | near | 287 | resolver DIFF (real-TU rtu_match, 20260826-022235): mine=287 target=21 | `.run/wave_eq/shard63/func_80180B3C.c` |
| 7 | func_800D06E8 | None | | None | failed | | resolver CC1 (real-TU rtu_match, 20260825-233820): .run/resolver/work/resident__func_800D06E8/c0/rtu/func_800D06E8/t.c:1770: conflicting types for `Struct80078E78' | `.run/wave_ch/shard62/func_800D06E8.c` |
| 8 | func_80062144 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | |
| 9 | func_80180B3C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80180B3C.c` |
| 10 | func_80181E04 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181E04.c` |
| 1 | func_80180B3C | None | | 297 | near | 125 | resolver DIFF (real-TU rtu_match, 20260825-233820): mine=296 target=297 | `.run/wave_eo/shard478/func_80180B3C.c` |
| 2 | func_800CB00C | None | | 123 | near | 168 | resolver DIFF (real-TU rtu_match, 20260826-053145): mine=174 target=123 | `.run/wave_g0c/shard30/func_800CB00C.c` |
| 3 | func_80180B3C | None | | 21 | near | 287 | resolver DIFF (real-TU rtu_match, 20260826-022235): mine=287 target=21 | `.run/wave_eq/shard63/func_80180B3C.c` |
| 4 | func_800D06E8 | None | | None | failed | | resolver CC1 (real-TU rtu_match, 20260825-233820): .run/resolver/work/resident__func_800D06E8/c0/rtu/func_800D06E8/t.c:1770: conflicting types for `Struct80078E78' | `.run/wave_ch/shard62/func_800D06E8.c` |
| 5 | func_80062144 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | |
| 6 | func_80180B3C | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80180B3C.c` |
| 7 | func_80181E04 | None | | None | failed | | won't compile standalone (loose-typing / missing decl) | `.run/backlog_drafts/func_80181E04.c` |
+9 -4
View File
@@ -2,7 +2,7 @@
> **Generated by `tools/cookbook_index.py` — do not hand-edit** (R33). Regenerate after adding a cookbook section.
>
> `docs/matching-cookbook.md` is ~716 KB / 1159 sections. Grepping it blind is how three P30 wave-1 agents each "discovered" an idiom that was already written down. **Start here, then read the section.** A section appears under every symptom it addresses.
> `docs/matching-cookbook.md` is ~716 KB / 1160 sections. Grepping it blind is how three P30 wave-1 agents each "discovered" an idiom that was already written down. **Start here, then read the section.** A section appears under every symptom it addresses.
**How to use:** name what you SEE in the diff (a stolen delay slot, an extra `la`, a swapped register pair, a `conflicting types` error), find that symptom below, read those sections first. If nothing fits, THEN grind — and add a section when you win.
@@ -841,7 +841,7 @@
- **§3-D.** — AN OFFLINE JTBL-RODATA PLACEMENT AUDIT (CLAIMED: `md_MAIN_034:func_800CB00C` — did NOT bank, and that is the point) <sub>L35008</sub>
- **§491** — ★★ — THE MECHANICAL LEFTOVERS (P31 S79 #6): A PHANTOM STUB, TWO JTBL TWINS, ONE EXACT CLONE — AND THREE TOOL GAPS THE BANKS EXPOSED <sub>L36346</sub>
### optimisation level (-O0/-O2) (25)
### optimisation level (-O0/-O2) (26)
- **§6** — Per-module optimization mixing — the -O0 boot module (Phase 7) <sub>L265</sub>
- **Detecting** — the opt level (do this first) <sub>L273</sub>
@@ -868,6 +868,7 @@
- **§466** — `main` (509 ins, -O0): ADDRESS CONTEXT EMITS `mult` INDEX-FIRST <sub>L35310</sub>
- **§474** — A *PROVED* C-LEVEL FLOOR: `split_tree` + `stupid.c` (-O0), from `main:func_80011380` <sub>L35544</sub>
- **§486** — ★★★ — CARVING AN `-O0` ISLAND IN **main**: FIVE COUPLED PIECES, AND THE TWO THAT ANNOUNCE THEMSELVES (P31 S77) <sub>L36105</sub>
- **§492** — ★★ — "C-PLUMBING" WAS THREE DIFFERENT THINGS (P31 S79 #7): A RAW SPLICE THE GATE'S LADDER BROKE, TWO -O0 BODIES THE CHECKER COMPILED AT -O2, AND TWO DRAFTS THAT BELONGED TO OTHER OVERLAYS <sub>L36392</sub>
### family propagation & sweeps (123)
@@ -995,7 +996,7 @@
- **§421** — ★★★ — A `la $tN` + `addiu` PAIR CAN BE A **RELOAD** ARTIFACT THAT NO C SPELLING REACHES (P31 S71; byte-proven `md_SC07_003/func_801A293C`, 313 ins, 6 → 0) <sub>L33729</sub>
- **§446** — ★★★ — "RELOC-ONLY REMAP GATED DIFF" IS A CARVE VERDICT, NOT A CODEGEN VERDICT, UNTIL YOU DIFF THE `.text` (P31 S75; 4 siblings + 1 latent, ~1,300 ins) <sub>L34807</sub>
### integration / TU plumbing (83)
### integration / TU plumbing (84)
- **§8c** — Splitting a TU means rebuilding its DECLARATION ENVIRONMENT, not moving text (Phase 26 session 6) <sub>L456</sub>
- **§8d** — Templating a body INTO a TU must not CHANGE its declaration environment — demote the carried data externs (Phase 26 session 8, byte-proven on `func_8015AE2C` ×133) <sub>L502</sub>
@@ -1080,8 +1081,9 @@
- **§440** — ★★★ — A `.rodata` CARVE PIECE BINDS TO A SUBSEG, NOT TO A FUNCTION: EXTEND THE CARVE INSTEAD OF ISOLATING (P31 S74; 6 banked, resident included) <sub>L34576</sub>
- **§442** — ★★★ — A RECOVERY RUNG THAT REWRITES A LEGAL CONSTRUCT INTO AN ILLEGAL ONE READS EXACTLY LIKE A CODEGEN WALL (P31 S75; `reconcile_tu`, 344 ins unblocked) <sub>L34647</sub>
- **§477** — ★★★ — THE `self_decl_tu` CLASS IS A SOLVED, MECHANICAL LANE: 16 DRAFTS, 16 BANKS (P31 S77) <sub>L35713</sub>
- **§492** — ★★ — "C-PLUMBING" WAS THREE DIFFERENT THINGS (P31 S79 #7): A RAW SPLICE THE GATE'S LADDER BROKE, TWO -O0 BODIES THE CHECKER COMPILED AT -O2, AND TWO DRAFTS THAT BELONGED TO OTHER OVERLAYS <sub>L36392</sub>
### build graph, splat & the harness (211)
### build graph, splat & the harness (212)
- **§4** — Flag/toolchain gotchas <sub>L190</sub>
- **Build** — mechanism — per-file opt override (splat resegmentation) <sub>L307</sub>
@@ -1294,6 +1296,7 @@
- **§489** — ★★★ — SCATTERED `.bss` IS A PARTITION PROBLEM: SPLIT THE SECTION INTO PER-BASE PIECES AT LINK-PREPARE (P31 S78 #4; closes the §9.1 exclusion class 3/3) <sub>L36242</sub>
- **§490** — ★★★ — THE "WALL" BAND WAS A LIBRARY VERSION AWAY: LIBPAD 4.2.1 + LIBAPI 4.2 FOUND, THE WHOLE 0x8005CE18–0x8005FC68 BAND + THE APICARD REGION LINKED FROM REAL OBJECTS (P31 S79 #13/#5) <sub>L36300</sub>
- **§491** — ★★ — THE MECHANICAL LEFTOVERS (P31 S79 #6): A PHANTOM STUB, TWO JTBL TWINS, ONE EXACT CLONE — AND THREE TOOL GAPS THE BANKS EXPOSED <sub>L36346</sub>
- **§492** — ★★ — "C-PLUMBING" WAS THREE DIFFERENT THINGS (P31 S79 #7): A RAW SPLICE THE GATE'S LADDER BROKE, TWO -O0 BODIES THE CHECKER COMPILED AT -O2, AND TWO DRAFTS THAT BELONGED TO OTHER OVERLAYS <sub>L36392</sub>
### process, measurement & doctrine (141)
@@ -2941,6 +2944,7 @@
- **§489** — ★★★ — SCATTERED `.bss` IS A PARTITION PROBLEM: SPLIT THE SECTION INTO PER-BASE PIECES AT LINK-PREPARE (P31 S78 #4; closes the §9.1 exclusion class 3/3) <sub>L36242</sub>
- **§490** — ★★★ — THE "WALL" BAND WAS A LIBRARY VERSION AWAY: LIBPAD 4.2.1 + LIBAPI 4.2 FOUND, THE WHOLE 0x8005CE18–0x8005FC68 BAND + THE APICARD REGION LINKED FROM REAL OBJECTS (P31 S79 #13/#5) <sub>L36300</sub>
- **§491** — ★★ — THE MECHANICAL LEFTOVERS (P31 S79 #6): A PHANTOM STUB, TWO JTBL TWINS, ONE EXACT CLONE — AND THREE TOOL GAPS THE BANKS EXPOSED <sub>L36346</sub>
- **§492** — ★★ — "C-PLUMBING" WAS THREE DIFFERENT THINGS (P31 S79 #7): A RAW SPLICE THE GATE'S LADDER BROKE, TWO -O0 BODIES THE CHECKER COMPILED AT -O2, AND TWO DRAFTS THAT BELONGED TO OTHER OVERLAYS <sub>L36392</sub>
---
@@ -4112,3 +4116,4 @@ Notes routinely quote that as a section id. This table resolves it. Grep bait: `
| L36242 | §489 | ★★★ — SCATTERED `.bss` IS A PARTITION PROBLEM: SPLIT THE SECTION INTO PER-BASE PIECES AT L |
| L36300 | §490 | ★★★ — THE "WALL" BAND WAS A LIBRARY VERSION AWAY: LIBPAD 4.2.1 + LIBAPI 4.2 FOUND, THE WHO |
| L36346 | §491 | ★★ — THE MECHANICAL LEFTOVERS (P31 S79 #6): A PHANTOM STUB, TWO JTBL TWINS, ONE EXACT CLON |
| L36392 | §492 | ★★ — "C-PLUMBING" WAS THREE DIFFERENT THINGS (P31 S79 #7): A RAW SPLICE THE GATE'S LADDER |
+28
View File
@@ -36389,3 +36389,31 @@ standard tail carve at gate time, no draft exists. `md_MAIN_003:func_800D0100` (
`func_80010B40`): `family_remap` raises on `main` as a source (its image reader expects a flat overlay blob) —
hand-remap or the C-PLUMBING route (#7).
#### §492 ★★ — "C-PLUMBING" WAS THREE DIFFERENT THINGS (P31 S79 #7): A RAW SPLICE THE GATE'S LADDER BROKE, TWO -O0 BODIES THE CHECKER COMPILED AT -O2, AND TWO DRAFTS THAT BELONGED TO OTHER OVERLAYS
**The class as the census named it:** five stubs whose bodies were "proven close=0" and whose TU spelling
refused them. The real-TU compile (`rtu_match`, §491's route) sorted them into three unrelated cases:
**(a) The gate's ladder mutated a correct body.** `md_MAIN_020:func_800CB17C` (30 ins) was `rtu_match`
MATCH and `parallel_gate` NEAR (`near: 1, failed: 0`) — the "match_one MATCH but the whole-binary gate
rejected — CAUSE NOT DETERMINED" verdict the census had carried. Hand-splicing the raw draft into the TU
and running `make build` was byte-identical first try. `gate_stage`'s stages (`canon_resident_calls` →
`cast_call_sites` → `sig_unify`) are pure draft rewrites that usually help; here one of them changed the
codegen. When rtu_match says MATCH and the gate says NEAR, the raw splice is the bank (or `--skip-stages`).
**(b) An -O0 island TU.** `md_MAIN_003:func_800D06BC` (33) and `func_800D0100` (29) live in
`md_MAIN_003_o0e`, a TU the Makefile's `-O0` wildcard compiles at -O0; their close-0 drafts had simply never
been gated (attempts=0). `rtu_match` without `--o0` showed the target's `$fp` frames against an empty
"mine" column — the checker's flag, not the draft, was wrong; with `--o0` both MATCH, and the worktree gate
banked both (the build already compiled the TU right).
**(c) Same name, other overlay (R48).** `ov_SC05_018:func_80180BE0` (target 65 ins) and
`ov_SC06_010:func_801809E4` (33) had "drafts" of 15 and 220 ins: every on-disk `func_801809E4.c` is
ov_SC01_080's function of that name (the `sweep_bb` dirs), and `.run/backlog_drafts/<fn>.c` is keyed by the
bare function name, so the census's `drafts`/`closeness` columns and the ledger's `best_draft` pointed at a
different function that happens to share the address. Two of five "plumbing" rows were phantoms: those two
functions have NO draft and go to the drafting task. Fix to make: key `backlog_drafts` and the journal join
by `(binary, fn)` — the same defect class as R48's three collisions.
Net: 3 banks, 2 reclassified, 0 tokens; stubs 35 → 32.
+8 -8
View File
@@ -4,16 +4,16 @@
# cross-binary collapsible-byte leverage: docs/duplicates.cross.md.
# THREE progress metrics (all matter — see the labels):
FLEET fn-count byte-ident: 363122 / 363157 = 99.99% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
FLEET instr-weighted : 13479710 / 13485889 = 100.0% (shipped .text across main + resident + 211 overlays; the decomp.dev-DISPLAY number)
FLEET distinct-code(uniq): 5807817 / 5813996 = 99.9% (90910/90929 unique fns; the DISTINCT-RE number)
FLEET fn-count byte-ident: 363125 / 363157 = 99.99% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
FLEET instr-weighted : 13479802 / 13485889 = 100.0% (shipped .text across main + resident + 211 overlays; the decomp.dev-DISPLAY number)
FLEET distinct-code(uniq): 5807909 / 5813996 = 99.9% (90913/90929 unique fns; the DISTINCT-RE number)
MAIN game-code weighted : 38748 / 41534 = 93.3% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-08-05; boundaries INDEPENDENTLY VERIFIED since P31 S77 — `make sig-main-oracle` + `make audit-corpus`: 0 phantom, 0 truncated, 1 explained pad-tail)
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 13440962 / 13444355 = 100.0%)
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 13441054 / 13444355 = 100.0%)
FLEET REAL substantive : 360645 (of which dedup-shared 255632 via 2220 groups / 255708 instances)
FLEET REAL substantive : 360647 (of which dedup-shared 255632 via 2220 groups / 255708 instances)
FLEET LINKED PsyQ objs : 1256
FLEET NON_MATCHING : 0 (0 in any default build — G4)
FLEET INCLUDE_ASM stubs : 35
FLEET INCLUDE_ASM stubs : 32
FLEET matchable : 363157
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
@@ -21,7 +21,7 @@ FLEET matchable : 363157
| main | 773 | 2 | 1256 | 2075 | 2091 | 99.2% |
| resident | 141 | 0 | 0 | 143 | 145 | 98.6% |
| md_MAIN_001 | 11 | 0 | 0 | 11 | 11 | 100.0% |
| md_MAIN_003 | 53 | 0 | 0 | 59 | 64 | 92.2% |
| md_MAIN_003 | 55 | 0 | 0 | 61 | 64 | 95.3% |
| md_MAIN_008 | 6 | 0 | 0 | 6 | 6 | 100.0% |
| md_MAIN_011 | 20 | 0 | 0 | 21 | 21 | 100.0% |
| md_MAIN_013 | 16 | 0 | 0 | 16 | 16 | 100.0% |
@@ -31,7 +31,7 @@ FLEET matchable : 363157
| md_MAIN_017 | 10 | 0 | 0 | 10 | 10 | 100.0% |
| md_MAIN_018 | 10 | 0 | 0 | 11 | 11 | 100.0% |
| md_MAIN_019 | 22 | 0 | 0 | 22 | 22 | 100.0% |
| md_MAIN_020 | 12 | 0 | 0 | 13 | 14 | 92.9% |
| md_MAIN_020 | 12 | 0 | 0 | 14 | 14 | 100.0% |
| md_MAIN_021 | 10 | 0 | 0 | 11 | 11 | 100.0% |
| md_MAIN_022 | 31 | 0 | 0 | 33 | 33 | 100.0% |
| md_MAIN_023 | 5 | 1 | 0 | 6 | 6 | 100.0% |
+33 -17
View File
@@ -139,6 +139,17 @@ Instead of roadmap-v2 P31's per-function grind, Phase 31 organizes the 12,059 re
still needs its pad-spec entry; parallel_gate merges leave the main tree's split stale → extract first).
tools-health/report regenerated; R22 fleet **213/213** (`.run/S79_check_all_6.log`); twin_rescan: 2 open
stubs keep a banked twin (ov_SC02_017 d=2, md_MAIN_003 d=1), nothing newly free.
**#7 DONE (S79, 2026-09-04; `commit:3873` `commit:3874` `commit:orphan-26`):** the "C-PLUMBING 5" were three
things (cookbook **§492**): (a) `md_MAIN_020:func_800CB17C` — `rtu_match` MATCH, `parallel_gate` NEAR
("CAUSE NOT DETERMINED" explained: gate_stage's transform ladder altered a correct body) → banked by a RAW
splice (0990e041); (b) `md_MAIN_003:func_800D06BC` + `func_800D0100` — an -O0 island TU; the standalone
checker needed `--o0`, the drafts had never been gated (attempts=0) → both banked via parallel_gate
(dd1b32ec); (c) `ov_SC05_018:func_80180BE0` (65) and `ov_SC06_010:func_801809E4` (33) — their "drafts" were
OTHER overlays' same-named functions (`.run/backlog_drafts/<fn>.c` and the journal join are keyed by bare
fn name, R48) → NO draft exists; reclassified to the drafting pool (#9). Stubs 35 → **32** (main 16,
md_MAIN_003 3, resident 2, ov 11). R22 fleet **213/213** (`.run/S79_check_all_7.log`); twin_rescan 1 twin
left (ov_SC02_017 d=2). `main:func_80011380` pinned WALL (§474 proof) in `config/wave_exclude.txt`.
Defect to fix later: key `backlog_drafts`/journal lookups by (binary, fn).
- [ ] **Tclose — PhaseEnd** (gate 2). (Max)
## Standing verification (every task)
@@ -8056,13 +8067,14 @@ for free. Three of our own measuring tools were lying (one hid a broken build, o
saved names, one under-counted the main program by 32 points); all fixed, and the main program is now
honestly 91.8% real C. Next: a small piece of linker surgery so two more Sony objects can be linked.
## 🛑 SESSION CHECKPOINT — S79 FINAL (2026-09-04). SUPERSEDES every earlier block in this file. Phase 31 T10 CONTINUES — the COMPLETION SPRINT, tasks #7 → #11 remain (#4, #13, #5 and #6 DONE this session).
## 🛑 SESSION CHECKPOINT — S79 FINAL (2026-09-04). SUPERSEDES every earlier block in this file. Phase 31 T10 CONTINUES — the COMPLETION SPRINT, tasks #8 → #11 remain (#4, #13, #5, #6 and #7 DONE this session).
Written for a FRESH SESSION with none of this context. Read it in full before doing anything.
**HEAD = the S79 task-#6 docs commit, on top of the #6 bank commits (`commit:3868` `commit:3869` `commit:3870`
`commit:3871`), #5 `commit:3867`, #13 `commit:3866`, #4 `commit:3865` (Drew pushes, R6); no `Claude-Session:`/
`Co-Authored-By` trailers (R5 + the S78 decision).** Model Fable 5.1; effort **xHigh** default for #7–#10,
**Max** for #11 (R27: prompt Drew and WAIT for the actual `/effort` line). No Ultracode / no waves in this sprint. The Ghidra MCP server
**HEAD = the S79 task-#7 docs commit (`commit:orphan-26`, amended with this block), on top of the #7 banks
(`commit:3873` `commit:3874`), the #6 commits (`commit:3868` `commit:3869` `commit:3870` `commit:3871` `commit:3872`), #5
`commit:3867`, #13 `commit:3866`, #4 `commit:3865` (Drew pushes, R6); no `Claude-Session:`/`Co-Authored-By` trailers
(R5 + the S78 decision).** Model Fable 5.1; effort **xHigh** default for #8–#10, **Max** for #11 (R27: prompt
Drew and WAIT for the actual `/effort` line). No Ultracode / no waves in this sprint. The Ghidra MCP server
restarts via the SessionStart hook → Drew runs `/mcp` (R29); no RE task is next, so no G2 ping needed
until one is. Ghidra DB churn (`db.*.gbf`, `~index`) is R23 restart-noise: do NOT stage it.
@@ -8073,6 +8085,8 @@ dir (`.run/obj40` + `.run/obj42`; `.run/S79_build_band_sdk.log`) and WITHOUT the
(+ main), check-all **213 passed, 0 failed of 213** (rc=0, 2m32s); `frontier_classify` regenerated after it:
**39 rows = 38 stubs + the data word**, main 16. After #6: fleet again **213 / 213** (`.run/S79_check_all_6.log`,
2m35s); census **35 rows = 35 stubs** (main 16 · md_MAIN_003 5 · resident 2 · ov_SC03_105 2 · 10 singles).
After #7: fleet **213 / 213** (`.run/S79_check_all_7.log`); census **32 stubs** (main 16 · md_MAIN_003 3 ·
resident 2 · ov_SC03_105 2 · 9 singles).
(The task-#4 state was verified the same way earlier in the session: `.run/S79_check_all.log` 213/213.)
# 1. THE SESSION IN ONE PARAGRAPH
@@ -8100,14 +8114,14 @@ for the plumbing route).
# 2. THE CENSUS (S79 close; every number with its denominator, R41)
* **Stubs: 35 of 363,157 matchable (`.run/frontier_s79.json`, `tools/frontier_classify.py` — regenerated after
the #6 fleet; #5 removed the 13 band stubs, #6 removed 3 + the data-word row).** Classes:
* **Stubs: 32 of 363,157 matchable (`.run/frontier_s79.json`, `tools/frontier_classify.py` — regenerated after
the #7 fleet; #5 removed the 13 band stubs, #6 removed 3 + the data-word row, #7 removed 3).** Classes:
B-CARVE jtbl 5 (resident `func_800D06E8` 344 [close 292 — really F-FAR] + `func_800D128C` 243 [close-0
draft; the carve is refused NON-CONTIGUOUS → subseg split], ov_SC02_017 `func_80186C64` 209 [same refusal;
d=2 twin ov_SC02_016], md_MAIN_034 `func_800CB00C` 152 [leading-island table + wrong-sized draft],
ov_SC05_010 `func_8017FFA8` 88 [tail carve fine, no draft]) · C-PLUMBING close=0 5 (ov_SC05_018
`func_80180BE0` 65, ov_SC06_010 `func_801809E4` 33, md_MAIN_003 `func_800D06BC` 33 + `func_800D0100` 29
[d=1 twin of main `func_80010B40`], md_MAIN_020 `func_800CB17C` 30) · D-NEAR ≤25 6 (main
ov_SC05_010 `func_8017FFA8` 88 [tail carve fine, no draft]) · "C-PLUMBING" 2 — really NO-DRAFT (ov_SC05_018
`func_80180BE0` 65, ov_SC06_010 `func_801809E4` 33: the census's close=0 came from same-named functions in
other overlays, R48; drafting pool) · D-NEAR ≤25 6 (main
`func_80011380` 192 boot -O0 floor §474, `func_80015760` 106, `func_80015608` 86, `func_80039B20` 79,
`func_80038698` 74; ov_SC03_105 `func_801834A4` 106) · F-FAR 9 (main `func_80032A74` 422, `func_80015B6C`
120, `func_8002AC98` 114, `func_80020DA4` 100, `func_800391D4` 75, `func_80039DEC` 74, `func_8002FDE8` 73,
@@ -8115,11 +8129,12 @@ for the plumbing route).
`func_8001EFE0` 468, `func_80023BF0` 281; ov_SC03_105 `func_80185810` 489; md_MAIN_003 `func_800CF3E8`
469 + `func_800D1D14` 65 + `func_800D0174` 36; ov_SC07_002 `func_8017DC80` 346; ov_SC01_001 `func_80181E04`
269; ov_SC06_022 `func_8017DF28` 119) · H-VIRGIN 1 (md_MAIN_003 `D_800D3200`, a data word → splat fix).
Per binary: **main 16 (2,786 ins)** · resident 2 · md 7 · overlays 10 across 8 binaries. The 13 that
Per binary: **main 16 (2,786 ins)** · resident 2 · md 4 · overlays 10 across 8 binaries. The 13 that
left with #5: PadInfoAct, `_padSetMainMode`, `_padInitSioMode`, `func_8005D734`, `PadInitDirect`,
`func_80062144`, `func_8005F290`, `_dirFailAuto`, `_padStartCom`, `func_8005ECC0`, `func_8005F830`,
`func_8005ED4C`, `func_8005F450` — all libpad 4.2.1 / libapi 4.2 objects. The 3 + 1 that left with #6:
ov_SC04_018 `func_80181804`/`func_80181CB8`, ov_SC05_005 `func_80181828`, and the `D_800D3200` row.
ov_SC04_018 `func_80181804`/`func_80181CB8`, ov_SC05_005 `func_80181828`, and the `D_800D3200` row. The 3
that left with #7: md_MAIN_020 `func_800CB17C`, md_MAIN_003 `func_800D06BC` + `func_800D0100`.
* **Verbatim `__asm__` bodies: 6 in tree** (main 3 + md_MAIN_003 2 + ov_SC03_107 1); manifest
`config/verbatim_manifest.json` = **6 rows** after two subtractive `--update`s this session (200 → 33 → 6):
crt0 `start`/`__main`/`__do_global_dtors` (CRT, PERMANENT), GAME-ASM `md_MAIN_003:func_800D3204/3234`
@@ -8141,7 +8156,7 @@ for the plumbing route).
libcd 18/2, libgs 34/8, libetc 5/1, libgpu 3/2, libmcrd 2/2, libc2 17/2, libgte 70/30, snd 63/12,
apicard 26/7 (libapi 4.2 + libcard 4.0), libapi42 23/2, libpad421 7/2 — 268 objects / 70 blocks.
# 3. THE TASK LIST (harness tasks; Drew-confirmed order 2026-09-04) — DONE: #1 #2 #12 #3 #4 #13 #5 #6
# 3. THE TASK LIST (harness tasks; Drew-confirmed order 2026-09-04) — DONE: #1 #2 #12 #3 #4 #13 #5 #6 #7
| # | task | status | effort |
|---|---|---|---|
@@ -8153,8 +8168,8 @@ for the plumbing route).
| 13 | bounded hunt for LIBPAD.LIB 4.2.1 / 4.3 — **FOUND** (RTL 4.2 + the J421PD 4.2.1 patch; 46/46 byte-identical) | DONE S79 `commit:3866` | — |
| 5 | the band + the apicard region LINKED from libpad 4.2.1 + libapi 4.2 (`libapi1/2`, `libpad1/2`, `apicard5-7`; 13 stubs, 4 TUs, the reorder island gone) | DONE S79 `commit:orphan-24` | — |
| 6 | mechanical: `D_800D3200` + the 2 ov_SC04_018 twins + ov_SC05_005's clone banked; the 5 carves deferred with named blockers (§491) | DONE S79 | — |
| **7** | **C-PLUMBING 5 via `recover_route` / `rtu_match` / §376–§378 (bodies proven close=0)** | **NEXT** | **xHigh** |
| 8 | D-NEAR non-band 6: permuter/ILS/§31 or §474 wall-proof each | pending | xHigh |
| 7 | C-PLUMBING: 3 banked (raw splice; -O0 checker flag), 2 were phantoms (R48 same-name drafts) → drafting pool | DONE S79 | — |
| **8** | **D-NEAR 6: permuter ILS on the four permuter-class residuals; §474 wall pinned for `func_80011380`; the S71 pin for ov_SC03_105 stands** | **NEXT** | **xHigh** |
| 9 | F-FAR 10 + G-UNKNOWN 12: one journal-noted agent per function | pending | xHigh |
| 10 | verbatim end-state + PERMANENT ratification + `main()` | pending | xHigh |
| 11 | Tclose PhaseEnd on the corrected denominators | pending | Max |
@@ -8303,5 +8318,6 @@ program — twelve functions carried as "compiler walls", plus the controller an
now links straight from Sony's library instead of being rewritten by hand. Main's open functions went from 29
to 16 and the whole game's from 51 to 38; nothing about the game changed. The mechanical leftovers then
went: the mis-typed data word, two twin functions and one exact clone banked for free (38 → 35), and each
remaining jump-table case now has a named reason it is not free. Next: the five functions whose bodies are
already right and only the file's declarations refuse them.
remaining jump-table case now has a named reason it is not free. Of the five functions whose bodies were
"already right", three really were and are banked (35 → 32); the other two had no draft at all — the ledger had
handed us other overlays' functions of the same name. Next: the six near-misses.