mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 15:43:06 -04:00
feat(phase-29): T0.3b autopsy — 44% of the "near-miss backlog" are not near-misses; 315 are plumbing-blocked MATCHes
Recomputed every backlog residual from the bytes (1,699 rows, -j 12, zero agent tokens) through the validated match_one path, deriving asm-subdir + -O0 from corpus.py. R34 cross-check PASSED (closeness agreed with masked_diff.structured_diff on all 1,610 built rows, 0 classifier errors); 89 nobuild rows REPORTED not dropped (R32). BUCKETS: redraft 707 | structural 528 | integration 315 | permuter 57 | unknown 3. 1. HONESTY CORRECTION: 707 of 1,610 (44%) are class SIZE-MISMATCH — the stored best-draft is a PARTIAL, an incomplete attempt logged with a closeness score (the func_80183814 666-of-5,122 shape). docs/backlog.md has been overstating readiness by ~44%. These route to a FRESH CRACK, not to a wall and not to the permuter. 2. ACTIONABLE: 315 entries are match_one MATCH *right now*, blocked only on the reconcile ladder — recomputing beat trusting the stored label because the tree moved since they were logged. ~108,959 gain-ins; top func_80174CB0 (16,482), func_801463A0 (13,534). §52b still applies: ~half of close=0 drafts fail the whole-binary gate, so these are CANDIDATES not banks. 3. The permuter bucket is 57/1,610 = 3.5% (Task-13B measured 7.7% and called targeting the problem). Extending the mutation set is CONFIRMED not the big lever — small, real, now bounded. 4. R34 again: 3 of 4 comparable labels DISAGREE with measurement — func_80140D68 / func_8012A328 / func_801549F8 recorded "schedule" but measure ADDRESSING -> cse. The grinder was aimed wrong. CONVERGENCE: T0.2 (8/8 failures PLUMBING, 0 walls) and T0.3b (315 integration) independently point at the SAME lever — the declaration/integration reconcile ladder, worth the 224,410-ins FREE pool AND ~108,959 backlog gain-ins. Two keys eliminated today; untried: canon_sig_reconcile v3.2 and reconcile_decls.py (the DATA-symbol analog — one T0.2 failure text was a DATA symbol).
This commit is contained in:
+39
-36
@@ -4,36 +4,35 @@
|
||||
|
||||
> A verdict here is a **candidate**, never a bank: the whole-binary byte-gate remains the sole arbiter (G3/P9).
|
||||
|
||||
**Corpus:** 1752 record(s) · 1659 classified · status {'near': 1354, 'nobuild': 93, 'match': 305}
|
||||
**Corpus:** 1699 record(s) · 1610 classified · status {'near': 1295, 'nobuild': 89, 'match': 315}
|
||||
|
||||
|
||||
## Buckets — what tool each failure actually wants
|
||||
|
||||
| bucket | fns | reach-weighted | meaning |
|
||||
|--------|----:|---------------:|---------|
|
||||
| redraft | 699 | 2162 | the stored draft is NOT this function — un-attempted work misfiled as a near-miss; route to a fresh crack, not to a wall |
|
||||
| structural | 578 | 7761 | local mutation CANNOT introduce it — wants a C-level idiom, not CPU |
|
||||
| integration | 305 | 2303 | byte-correct standalone; blocked on plumbing (§58/§59 reconcile ladder) |
|
||||
| permuter | 75 | 740 | local mutation CAN reach it — permuter fuel (a plateau here is a **missing-transform** candidate) |
|
||||
| unknown | 2 | 2 | the residue the LLM tier is for |
|
||||
| redraft | 707 | 1638 | the stored draft is NOT this function — un-attempted work misfiled as a near-miss; route to a fresh crack, not to a wall |
|
||||
| structural | 528 | 5067 | local mutation CANNOT introduce it — wants a C-level idiom, not CPU |
|
||||
| integration | 315 | 2454 | byte-correct standalone; blocked on plumbing (§58/§59 reconcile ladder) |
|
||||
| permuter | 57 | 855 | local mutation CAN reach it — permuter fuel (a plateau here is a **missing-transform** candidate) |
|
||||
| unknown | 3 | 140 | the residue the LLM tier is for |
|
||||
|
||||
## Classes
|
||||
|
||||
| class | fns | reach-weighted | bucket | permuter profile |
|
||||
|-------|----:|---------------:|--------|------------------|
|
||||
| SIZE-MISMATCH | 699 | 2162 | redraft | — |
|
||||
| LENGTH-DRIFT | 394 | 6380 | structural | — |
|
||||
| MATCH | 305 | 2303 | integration | — |
|
||||
| OPCODE-MIXED | 80 | 878 | structural | — |
|
||||
| WIDTH | 44 | 310 | structural | — |
|
||||
| SIZE-MISMATCH | 707 | 1638 | redraft | — |
|
||||
| LENGTH-DRIFT | 353 | 4223 | structural | — |
|
||||
| MATCH | 315 | 2454 | integration | — |
|
||||
| OPCODE-MIXED | 79 | 478 | structural | — |
|
||||
| WIDTH | 46 | 449 | structural | — |
|
||||
| IMM-OFFSET | 38 | 38 | structural | — |
|
||||
| DELAY-SLOT | 23 | 289 | permuter | schedule |
|
||||
| BRANCH-POLARITY | 22 | 155 | structural | — |
|
||||
| REGALLOC-PERM | 18 | 151 | permuter | regalloc |
|
||||
| ADDRESSING | 17 | 150 | permuter | cse |
|
||||
| IMM-VALUE | 10 | 143 | permuter | cse |
|
||||
| SCHEDULE-REORDER | 7 | 7 | permuter | schedule |
|
||||
| MIXED | 2 | 2 | unknown | — |
|
||||
| BRANCH-POLARITY | 21 | 21 | structural | — |
|
||||
| ADDRESSING | 19 | 418 | permuter | cse |
|
||||
| DELAY-SLOT | 18 | 284 | permuter | schedule |
|
||||
| REGALLOC-PERM | 7 | 7 | permuter | regalloc |
|
||||
| IMM-VALUE | 4 | 4 | permuter | cse |
|
||||
| MIXED | 3 | 140 | unknown | — |
|
||||
|
||||
## Top clusters (the batch-autopsy work items)
|
||||
|
||||
@@ -41,31 +40,35 @@ One representative per signature diagnoses the whole cluster — that is what ma
|
||||
|
||||
| # | signature | fns | reach-weighted | example |
|
||||
|--:|-----------|----:|---------------:|---------|
|
||||
| 1 | `SIZE-MISMATCH/short` | 604 | 1801 | func_8017E918 (close=4, 2 ins) |
|
||||
| 2 | `MATCH` | 305 | 2303 | func_80168B70 (close=0, 27 ins) |
|
||||
| 3 | `LENGTH-DRIFT/-1?` | 116 | 1712 | func_8018312C (close=5, 7 ins) |
|
||||
| 4 | `SIZE-MISMATCH/long` | 95 | 361 | func_8017E06C (close=6, 9 ins) |
|
||||
| 5 | `LENGTH-DRIFT/-2?` | 70 | 1268 | func_80190480 (close=3, 4 ins) |
|
||||
| 6 | `OPCODE-MIXED` | 67 | 599 | func_80161D20 (close=1, 14 ins) |
|
||||
| 7 | `LENGTH-DRIFT/1?` | 63 | 595 | func_80187074 (close=4, 7 ins) |
|
||||
| 8 | `LENGTH-DRIFT/2?` | 51 | 450 | func_80181B8C (close=5, 11 ins) |
|
||||
| 1 | `SIZE-MISMATCH/short` | 614 | 1545 | func_8017FF90 (close=4, 2 ins) |
|
||||
| 2 | `MATCH` | 315 | 2454 | func_80168B70 (close=0, 27 ins) |
|
||||
| 3 | `LENGTH-DRIFT/-1?` | 112 | 1047 | func_8018312C (close=5, 7 ins) |
|
||||
| 4 | `SIZE-MISMATCH/long` | 93 | 93 | func_8017E06C (close=6, 9 ins) |
|
||||
| 5 | `LENGTH-DRIFT/-2?` | 70 | 1272 | func_80190480 (close=3, 4 ins) |
|
||||
| 6 | `OPCODE-MIXED` | 67 | 466 | func_80161D20 (close=1, 14 ins) |
|
||||
| 7 | `LENGTH-DRIFT/1?` | 62 | 461 | func_80187074 (close=4, 7 ins) |
|
||||
| 8 | `LENGTH-DRIFT/2?` | 50 | 316 | func_80181B8C (close=5, 11 ins) |
|
||||
| 9 | `LENGTH-DRIFT/-7` | 32 | 32 | func_80184590 (close=9, 2 ins) |
|
||||
| 10 | `LENGTH-DRIFT/+1` | 21 | 21 | func_8017DCE4 (close=3, 8 ins) |
|
||||
| 11 | `IMM-OFFSET/1` | 17 | 17 | func_801827C4 (close=1, 13 ins) |
|
||||
| 12 | `DELAY-SLOT/1` | 13 | 146 | func_8016BA68 (close=1, 29 ins) |
|
||||
| 13 | `BRANCH-POLARITY/bnez!=beqz` | 11 | 144 | func_80185E38 (close=1, 12 ins) |
|
||||
| 14 | `IMM-VALUE` | 10 | 143 | func_8018A640 (close=2, 4 ins) |
|
||||
| 15 | `WIDTH/lhu!=lh` | 9 | 9 | func_80142A10 (close=1, 28 ins) |
|
||||
| 16 | `LENGTH-DRIFT/-3?` | 8 | 1072 | func_8012CC88 (close=13, 102 ins) |
|
||||
| 17 | `OPCODE-MIXED/addressing,width` | 8 | 274 | func_8017F114 (close=5, 75 ins) |
|
||||
| 18 | `DELAY-SLOT/2` | 8 | 141 | func_80158638 (close=2, 87 ins) |
|
||||
| 10 | `IMM-OFFSET/1` | 17 | 17 | func_801827C4 (close=1, 13 ins) |
|
||||
| 11 | `DELAY-SLOT/1` | 10 | 143 | func_8016BA68 (close=1, 29 ins) |
|
||||
| 12 | `BRANCH-POLARITY/bnez!=beqz` | 10 | 10 | func_80185E38 (close=1, 12 ins) |
|
||||
| 13 | `WIDTH/lhu!=lh` | 9 | 9 | func_80142A10 (close=1, 28 ins) |
|
||||
| 14 | `BRANCH-POLARITY/beqz!=bnez` | 8 | 8 | func_8017FDB0 (close=1, 12 ins) |
|
||||
| 15 | `OPCODE-MIXED/addressing,width` | 6 | 6 | func_8017F114 (close=5, 75 ins) |
|
||||
| 16 | `DELAY-SLOT/2` | 6 | 139 | func_80158638 (close=2, 87 ins) |
|
||||
| 17 | `ADDRESSING/lui!=addiu` | 6 | 139 | func_8012A328 (close=3, 60 ins) |
|
||||
| 18 | `WIDTH/sh!=lw` | 5 | 5 | func_8018AFDC (close=3, 8 ins) |
|
||||
| 19 | `WIDTH/lw!=lhu` | 4 | 270 | func_8015FBE0 (close=1, 58 ins) |
|
||||
| 20 | `LENGTH-DRIFT/+1` | 4 | 4 | func_8017DCE4 (close=3, 8 ins) |
|
||||
|
||||
## Second oracle — deterministic verdict vs the recorded label
|
||||
|
||||
The recorded `klass` is what a wave agent typed months ago; the verdict is derived from today's bytes. Neither is authoritative — **the disagreement is the finding**, and it is exactly the `mis-classified` bucket (a wrongly-labelled residual sends the directed search at the wrong levers, so it plateaus and then reads as a wall).
|
||||
|
||||
- labelled records comparable: **4** · agree **3** · disagree **1**
|
||||
- labelled records comparable: **4** · agree **1** · disagree **3**
|
||||
|
||||
| fn | recorded label | label routes to | measured class | measured routes to |
|
||||
|----|----------------|-----------------|----------------|--------------------|
|
||||
| func_80140D68 | `schedule` | schedule | ADDRESSING | cse |
|
||||
| func_8012A328 | `schedule` | schedule | ADDRESSING | cse |
|
||||
| func_801549F8 | `schedule` | schedule | ADDRESSING | cse |
|
||||
|
||||
@@ -4507,3 +4507,45 @@ resolves. T0.1/T0.3 only read sigs/configs and write `.run/` + `docs/` ⇒ safe
|
||||
**⇒ The single highest-value backlog action is to RUN `residual_class.py` over the 1,486 unlabelled
|
||||
entries** (deterministic, LLM-free, reads the bytes) so the 333 close=0 + 184 close-1-4 band can be
|
||||
routed to the right lever instead of grinding undirected. That is a zero-token tooling run.
|
||||
|
||||
- **✅ 2026-07-26 (SESSION-20) — T0.3b AUTOPSY: every backlog residual RECOMPUTED from the bytes
|
||||
(1,699 rows, `-j 12`, zero agent tokens). Three findings, one of them a large honesty correction.**
|
||||
`autopsy.py collect` re-derives each residual through the validated `match_one` path, deriving the
|
||||
asm subdir AND the `-O0` flag from `corpus.py` (both are documented silent-artefact generators).
|
||||
**R34 cross-check PASSED: closeness agreed with `masked_diff.structured_diff` on all 1,610 built
|
||||
rows, 0 classifier errors.** 89 `nobuild` rows REPORTED, not silently dropped (R32).
|
||||
**THE BUCKETS (reach-weighted in parens):**
|
||||
| bucket | fns | meaning |
|
||||
|---|---|---|
|
||||
| **redraft** | **707** (1,638) | *the stored draft is NOT this function* — un-attempted work MISFILED as a near-miss |
|
||||
| **structural** | **528** (5,067) | local mutation cannot introduce it — wants a C-level idiom, not CPU |
|
||||
| **integration** | **315** (2,454) | **byte-correct standalone; blocked on PLUMBING** |
|
||||
| permuter | **57** (855) | local mutation CAN reach it — the only true permuter fuel |
|
||||
| unknown | 3 (140) | the residue the LLM tier is for |
|
||||
**① THE HONESTY CORRECTION — 707 of 1,610 (44%) of the "near-miss backlog" ARE NOT NEAR-MISSES.**
|
||||
Class `SIZE-MISMATCH` (614 `short` + 93 `long`): the stored best-draft is a PARTIAL — an agent's
|
||||
incomplete attempt logged with a closeness score, exactly like `func_80183814`'s 666-of-5,122 recon.
|
||||
**`docs/backlog.md` — "the phase's other durable deliverable" (PhaseEnd 21) — has been overstating
|
||||
readiness by ~44% ever since.** These route to a FRESH CRACK, not to a wall and not to the permuter.
|
||||
**② THE ACTIONABLE POOL — 315 entries are `match_one` MATCH RIGHT NOW**, blocked only on the
|
||||
§58/§59 reconcile ladder. Recomputing beat trusting the stored label exactly as the tool's docstring
|
||||
argued: the tree has moved (type-lifts, shared-header work) since these were logged. Top by value:
|
||||
`func_80174CB0` (123×134 = 16,482) · `func_801463A0` (101×134 = 13,534) · `func_80173A60` (59×134) ·
|
||||
`func_80176144` (53×138) · `func_8012F49C` (51×138); **total ≈108,959 gain-ins** where reach is
|
||||
known. Spread across ~40 binaries (35 in ov_SC01_077). **⚠️ §52b still applies — ~half of close=0
|
||||
drafts fail the whole-binary gate — so this is 315 CANDIDATES, not 315 banks.**
|
||||
**③ THE PERMUTER BUCKET IS 57.** Task-13B measured 75/972 (7.7%) permuter-shaped and concluded
|
||||
*"the problem was TARGETING, not a missing transform"*; the fresh recompute says **57 of 1,610
|
||||
(3.5%)**. **Extending the mutation set is confirmed NOT the big lever** — it is a small, real, and
|
||||
now precisely-bounded one.
|
||||
**④ R34 EARNS ITS KEEP AGAIN — 3 of 4 comparable labels DISAGREE with the measurement:**
|
||||
`func_80140D68`, `func_8012A328`, `func_801549F8` were all recorded **schedule** (→ schedule levers)
|
||||
but measure **ADDRESSING** (→ cse levers). **The grinder was being pointed at the wrong levers for
|
||||
these**, which is precisely the `mis-classified` bucket the autopsy exists to find.
|
||||
**⇒ STRATEGIC CONVERGENCE (the answer to "what one thing unlocks the most"):** T0.2's gate probe
|
||||
(8/8 failures PLUMBING, 0 walls) and T0.3b's autopsy (315 integration-class) **independently point
|
||||
at the SAME lever — the declaration/integration reconcile ladder.** It is worth the 224,410-ins FREE
|
||||
pool *and* ~108,959 backlog gain-ins. Two candidate keys were eliminated today (`--fix-def-sig`
|
||||
regresses; `--normalize-self-decls` 0/123); the untried ones are **`canon_sig_reconcile` v3.2** and
|
||||
**`reconcile_decls.py`** (the DATA-symbol analog — and one of T0.2's two failure texts was a DATA
|
||||
symbol, `conflicting types for 'D_800A651C'`, which neither tested flag targets).
|
||||
|
||||
Reference in New Issue
Block a user