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).
4.3 KiB
Autopsy — the permuter's failures, classified
Generated by
tools/autopsy.py reportfrom.run/autopsy/residuals.jsonl(built bycollect, which recompiles every open backlog draft throughtools/match_one.pyand classifies the FULL residual withtools/residual_class.py).
A verdict here is a candidate, never a bank: the whole-binary byte-gate remains the sole arbiter (G3/P9).
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 | 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 | 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 | — |
| 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)
One representative per signature diagnoses the whole cluster — that is what makes the LLM pass a batch autopsy rather than N per-function reads.
| # | signature | fns | reach-weighted | example |
|---|---|---|---|---|
| 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 | 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 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 |