diff --git a/docs/backlog.md b/docs/backlog.md index 8e540e7677..34255d732e 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -2,7 +2,7 @@ > 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:** 115 · by status {'near': 72, 'failed': 43} · by class {'WAVE': 20, 'plumbing': 15, 'schedule': 28, 'struct': 15, 'regalloc-order': 27, 'remat': 2, 'other': 5, 'iv-combine': 2, 'loop-guard': 1} +**Open near-misses:** 147 · by status {'near': 101, 'failed': 46} · by class {'WAVE': 20, 'plumbing': 21, 'schedule': 30, 'struct': 33, 'regalloc-order': 30, 'remat': 2, 'other': 8, 'iv-combine': 2, 'loop-guard': 1} | # | addr | reach | class | nins | status | closeness | where it stuck | best draft | |--:|------|------:|-------|-----:|--------|----------:|----------------|------------| @@ -121,3 +121,35 @@ | 113 | func_8014F74C | 134 | other | 174 | failed | | none — MATCH (174 ins). Keys: sibling func_8014FA70 template; in/out/sp20 u8[8] short-trio bufs (lwl/lwr/swl/swr unaligned copies); load each a0 field once into b0/b1/b2 (stored to both sp20+out, reused in the 0x146-add block); 3-way memcpy branch on s1 (0x2000->D_801152A8, 0x4000->D_801152B0, else->D_800D3918); goto-form cmp-chain; final `""::: "memory"` barrier blocks gcc store-flag fold of (in4==out4)<<15 back to a branch | `.run/backlog_drafts/func_8014F74C.c` | | 114 | func_80156B74 | 134 | struct | 214 | failed | | none — MATCH | `.run/backlog_drafts/func_80156B74.c` | | 115 | func_80144B9C | 134 | other | 770 | failed | | -O0 cluster fn (prologue 21F0A003, fp-frame, all locals spilled+reloaded, load-delay nops). match_one compiles -O2 so it CANNOT match this; needs its own per-file -O0 split (Makefile CC1FLAGS:=-O0), like ov_SC01_077_o0.c. Body below is the faithful -O0 source; gate via whole-binary -O0 build only. | `.run/backlog_drafts/func_80144B9C.c` | +| 116 | func_80151944 | 4 | struct | 15 | near | 0 | none — MATCH (fn-pointer table dispatch; array-of-ptr indexing folds %lo) | `.run/backlog_drafts/func_80151944.c` | +| 117 | func_8016039C | 2 | struct | 15 | near | 1 | none — MATCH (function-pointer table dispatch indexed by unsigned-halfword field) | `.run/backlog_drafts/func_8016039C.c` | +| 118 | func_8015CC74 | 2 | struct | 15 | failed | | none — MATCH (analog func_8015BE38 idiom: D_80189354[a0->idx]() with Obj.idx at off 2) | `.run/backlog_drafts/func_8015CC74.c` | +| 119 | func_8015DAF8 | 1 | struct | 15 | near | 0 | none — MATCH (proxy); identical idiom to matched func_8016901C in same overlay | `.run/backlog_drafts/func_8015DAF8.c` | +| 120 | func_801577C8 | 1 | plumbing | 16 | near | 0 | none — MATCH expected (scalar global store + two sequential calls, param preserved across first call) | `.run/backlog_drafts/func_801577C8.c` | +| 121 | func_80178B70 | 1 | struct | 18 | near | 0 | none — MATCH; local ptr p=&D_8018A458 used for store AND (int)p-0xC arg forces $s0-base reuse across call1, param_1 into $s1 | `.run/backlog_drafts/func_80178B70.c` | +| 122 | func_8017F240 | 1 | regalloc-order | 20 | near | 0 | none — MATCH (base &D_801270D0 pinned to $s0 holds across call; one lui/addiu reused for load+store) | `.run/backlog_drafts/func_8017F240.c` | +| 123 | func_80157D20 | 1 | plumbing | 21 | near | 0 | none — MATCH expected (call, indexed u16-global load as 2nd arg, then call; param_1 saved across all three calls) | `.run/backlog_drafts/func_80157D20.c` | +| 124 | func_80163408 | 1 | struct | 21 | near | 0 | local 8-byte struct copied from D_801D8BB0, © passed as 5th arg (s32) | `.run/backlog_drafts/func_80163408.c` | +| 125 | func_80175184 | 1 | struct | 21 | near | 0 | none — MATCH (fnptr-array %lo-fold dispatch; idx = *(u16*)(a0+2) < 2 ? D_8018A1A4[idx]() : func_80175268()) | `.run/backlog_drafts/func_80175184.c` | +| 126 | func_8014FBC0 | 1 | schedule | 22 | near | 0 | none — MATCH (22 ins). Stack-switch primitive: register $sp var, manual save/switch/restore around the call. | `.run/backlog_drafts/func_8014FBC0.c` | +| 127 | func_80178B18 | 1 | other | 22 | near | 0 | none — MATCH | `.run/backlog_drafts/func_80178B18.c` | +| 128 | func_8017B8E8 | 1 | plumbing | 22 | near | 0 | none — MATCH (two inlined unaligned 8-byte memcpy blocks: src[0..7]->D_801DA794, src[8..15]->D_801DA78C) | `.run/backlog_drafts/func_8017B8E8.c` | +| 129 | func_80182988 | 1 | plumbing | 22 | near | 0 | none — MATCH (u16 store of 0xAA10 forces ori, not sign-extended addiu) | `.run/backlog_drafts/func_80182988.c` | +| 130 | func_801609B8 | 1 | struct | 28 | near | 0 | none — MATCH (pending byte-gate); function-pointer table %lo-fold via extern array | `.run/backlog_drafts/func_801609B8.c` | +| 131 | func_8017E224 | 1 | struct | 29 | near | 0 | none — MATCH (unaligned 8-byte memcpy of global onto stack + cond byte incr) | `.run/backlog_drafts/func_8017E224.c` | +| 132 | func_80165140 | 1 | regalloc-order | 30 | near | 0 | none — MATCH (pin i=$v1/eight=$a0/p=$a2; DON'T pin param — let it self-copy to $a3 first; memcpy 8/4 unaligned) | `.run/backlog_drafts/func_80165140.c` | +| 133 | func_80161D20 | 1 | struct | 14 | near | 1 | none — MATCH (array-of-u16 %lo-fold, §18) | `.run/backlog_drafts/func_80161D20.c` | +| 134 | func_8015F00C | 1 | struct | 15 | near | 1 | none — MATCH | `.run/backlog_drafts/func_8015F00C.c` | +| 135 | func_8015FAAC | 1 | struct | 15 | near | 1 | none — MATCH expected; fn-ptr table indexed by u16 field at +2, *4 scaled load then jalr | `.run/backlog_drafts/func_8015FAAC.c` | +| 136 | func_8016084C | 1 | struct | 15 | near | 1 | none — MATCH (jump-table dispatch via array-of-fn-ptr %lo-fold) | `.run/backlog_drafts/func_8016084C.c` | +| 137 | func_801429C4 | 1 | struct | 19 | near | 1 | none — MATCH expected (guard short + fnptr table indexed by halfword field) | `.run/backlog_drafts/func_801429C4.c` | +| 138 | func_8017F714 | 1 | plumbing | 27 | near | 1 | none — MATCH (27/27 ins, match_one verified) | `.run/backlog_drafts/func_8017F714.c` | +| 139 | func_80142A10 | 1 | struct | 28 | near | 1 | none — MATCH (pending byte-gate) | `.run/backlog_drafts/func_80142A10.c` | +| 140 | func_80161C24 | 1 | struct | 29 | near | 1 | none — MATCH (array-of-struct %lo-fold; even/odd u16 fields at off 0/2, stride 4) | `.run/backlog_drafts/func_80161C24.c` | +| 141 | func_801549F8 | 1 | schedule | 31 | near | 3 | 3-ins rotation — bound-copy `addu $a3,$v0,0` schedules ONE slot too early (before the hoisted jtbl lui/addiu); target emits it LAST in the preheader. Body+regalloc all match; pure list-scheduler priority tie (permuter-class). | `.run/backlog_drafts/func_801549F8.c` | +| 142 | func_8014D3E0 | 1 | other | 22 | near | 6 | none — MATCH | `.run/backlog_drafts/func_8014D3E0.c` | +| 143 | func_80164E40 | 1 | struct | 25 | near | 8 | none — MATCH expected; byte 0 keeps base $v1 (reused by final lw word), bytes 1/2 standalone | `.run/backlog_drafts/func_80164E40.c` | +| 144 | func_80161CD0 | 1 | regalloc-order | 20 | near | 14 | param_2 must survive the call in $s0; try plain C first then pin to $16 | `.run/backlog_drafts/func_80161CD0.c` | +| 145 | func_8018301C | 1 | plumbing | 28 | near | 24 | none — MATCH (straight-line, statement-order; verify with match_one) | `.run/backlog_drafts/func_8018301C.c` | +| 146 | func_80160B34 | 1 | struct | 15 | failed | | none — MATCH | `.run/backlog_drafts/func_80160B34.c` | +| 147 | func_80182338 | 1 | other | 26 | failed | | none — straight-line init; rely on gcc scheduler to hoist $a1/$v0=6 into prologue/delay-slot | `.run/backlog_drafts/func_80182338.c` | diff --git a/docs/progress.fleet.md b/docs/progress.fleet.md index d0856c7108..f41dfd43f3 100644 --- a/docs/progress.fleet.md +++ b/docs/progress.fleet.md @@ -3,11 +3,11 @@ # source-derived (committed src/*.c + config/dedup.us.yaml). Live byte gate: `make check-all`; # cross-binary collapsible-byte leverage: docs/duplicates.cross.md. -FLEET REAL substantive : 208751 (of which dedup-shared 208246 via 1566 groups / 208290 instances) +FLEET REAL substantive : 208859 (of which dedup-shared 208246 via 1566 groups / 208290 instances) FLEET LINKED PsyQ objs : 959 -FLEET byte-identical : 210398 / 344010 = 61.16% (REAL+LINKED+empties) +FLEET byte-identical : 210506 / 344010 = 61.19% (REAL+LINKED+empties) FLEET NON_MATCHING : 7 (0 in any default build — G4) -FLEET INCLUDE_ASM stubs : 133605 +FLEET INCLUDE_ASM stubs : 133497 FLEET matchable : 344010 | binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % | @@ -22,7 +22,7 @@ FLEET matchable : 344010 | ov_SC01_008 | 1550 | 1550 | 0 | 1552 | 2428 | 63.9% | | ov_SC01_009 | 1550 | 1550 | 0 | 1551 | 2510 | 61.8% | | ov_SC01_074 | 1550 | 1550 | 0 | 1552 | 2427 | 63.9% | -| ov_SC01_077 | 1848 | 1518 | 0 | 1850 | 2586 | 71.5% | +| ov_SC01_077 | 1956 | 1518 | 0 | 1958 | 2586 | 75.7% | | ov_SC01_080 | 1554 | 1554 | 0 | 1554 | 2515 | 61.8% | | ov_SC01_084 | 1554 | 1554 | 0 | 1559 | 2581 | 60.4% | | ov_SC02_000 | 1558 | 1558 | 0 | 1565 | 2684 | 58.3% | diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index ab9eeeb127..daaa0b4096 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -14,7 +14,19 @@ > Everything below this section (the prior ×134 QUEUED-RUN block, TRIP HAND-OFF, POST-REBOOT, etc.) is a > HISTORICAL session-layer kept for the trail. **THIS section is the current state + the fresh-session plan.** -**Fleet ≈ 61.16% byte-identical** · 136/136 binaries byte-identical · 0 NON_MATCHING. +**★ SESSION UPDATE 2026-06-23 (waves 17–22, reach-1 harvest LIVE — Drew's `/loop`):** Fleet **61.19%** · +banked_total **165** (session **+108** reach-1 ×1 banks over 6 waves; close-rate 0.63→0.91→0.67 as the size-band +climbed 14→31 ins) · 136/136 byte-identical · 0 NON_MATCHING throughout (per-wave byte-gate, G3/P9). **4 new +cookbook idioms distilled** (`commit:0225` u16-store→`ori` · `commit:0227` $sp-switch trampoline + 3 maspsx rules · +`commit:0230` byte-predecrement `+0xFF` not `-1` · `commit:0232` combined store-and-capture call-result). **Pool-exclusion +bug FIXED** (`commit:0228`): `wave_targets.plumbing_blocked()` now scans ALL raw backlog records (was `load_best()`, +which masked `none — MATCH` self-match-gate-reject records) → 83 churners correctly skipped from waves (hand-finish +fuel). **STOP left in place per Drew** (AskUserQuestion: kill switch = interrupt / `auto_stop.sh`, NOT the file). +Orch_state: `pool=reach1`, `waves=22`. The fresh-session cycle below is unchanged. Honest ROI note: reach-1 is ×1, +so fleet barely moves per wave — the value is `ov_SC01_077` completeness + the distilled idioms (reach-134-applicable +→ a future wall re-attempt could bank ×134). + +**Fleet ≈ 61.16% byte-identical** *(↑ 61.19% — see SESSION UPDATE above)* · 136/136 binaries byte-identical · 0 NON_MATCHING. **Nothing running** — grinder STOPPED (Drew; `.run/auto/STOP` present), no worker wave in flight. Paused at a clean, committed checkpoint (HEAD = the reach-1 handoff commit). Committed locally; **not pushed** (R6 — Drew pushes).