mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 07:40:42 -04:00
docs(phase-29): the 2 typedef-blocked drafts are §65g-class — 0/2, blockers stack 3 deep
- Did it properly: per-TU provided set via cdecl.typedef_names(tu_path) (217/215 names; it takes a PATH), strip_provided_typedefs dropped 2/2 typedef lines from each draft, then the DRIVER's ladder. pass 1 banked 0/2; src/ restored exactly. - The stack: func_80156670 S8 -> B8 -> conflicting types for D_801270A8 (a DATA extern); func_80174CB0 MATRIX/SVECTOR -> conflicting types for func_80012ABC (a callee conflict cast_call_sites did not clear). cc1 reveals only the first layer each time (§65). - NEW STATIC-ORACLE BLIND SPOT (R34 earning its keep): func_80156670's data conflict is CC1-ONLY — the static oracle says `none` while real cc1 fails. First cc1-only case measured (SESSION-16 was 36/36 agreement). A `static: none` verdict is not evidence a draft is clean. - Stripped drafts kept at .run/perm_s17j/ so the next attempt starts 3 layers in. ~+0.4pp if solved.
This commit is contained in:
@@ -1730,3 +1730,7 @@
|
||||
{"ts": "2026-07-24 19:49:12", "addr": "0x80174cb0", "name": "func_80174CB0", "reach": 138, "klass": "regalloc-order", "nins": 123, "status": "near", "closeness": 52, "where_stuck": "none \u2014 MATCH (123 ins)", "best_draft": ".run/backlog_drafts/func_80174CB0.c", "binary": "ov_SC01_077", "source": "t6-recover", "residual": [[3, "afb20048 sw\ts2,72(sp)", "afb10044 sw $s1, 0x44($sp)"], [4, "00a09021 move\ts2,a1", "00a08821 addu $s1, $a1, $zero"], [6, "afb10044 sw\ts1,68(sp)", "afb20048 sw $s2, 0x48($sp)"], [50, "3c110000 lui\ts1,0x0", "3c128012 lui $s2, %hi(D_80126940)"], [51, "26310000 addiu\ts1,s1,0", "26526940 addiu $s2, $s2, %lo(D_80126940)"], [54, "86230000 lh\tv1,0(s1)", "86430000 lh $v1, 0x0($s2)"], [74, "8605001a lh\ta1,26(s0)", "27a40010 addiu $a0, $sp, 0x10"], [75, "27a40010 addiu\ta0,sp,16", "00118c00 sll $s1, $s1, 16"], [76, "00b22821 addu\ta1,a1,s2", "8605001a lh $a1, 0x1A($s0)"], [78, "30a50fff andi\ta1,a1,0xfff", "00b12821 addu $a1, $a1, $s1"], [79, "86050018 lh\ta1,24(s0)", "0c004956 jal func_80012558"], [81, "27a40010 addiu\ta0,sp,16", "86050018 lh $a1, 0x18($s0)"], [82, "86020028 lh\tv0,40(s0)", "0c0049b1 jal func_800126C4"], [83, "86230000 lh\tv1,0(s1)", "27a40010 addiu $a0, $sp, 0x10"], [84, "00000000 nop", "86020028 lh $v0, 0x28($s0)"], [85, "00431021 addu\tv0,v0,v1", "86430000 lh $v1, 0x0($s2)"], [86, "afa20024 sw\tv0,36(sp)", "00000000 nop"], [87, "8602002a lh\tv0,42(s0)", "00431021 addu $v0, $v0, $v1"], [88, "3c030000 lui\tv1,0x0", "afa20024 sw $v0, 0x24($sp)"], [89, "84630000 lh\tv1,0(v1)", "8602002a lh $v0, 0x2A($s0)"], [90, "27a40010 addiu\ta0,sp,16", "3c038012 lui $v1, %hi(D_80126942)"], [91, "00431021 addu\tv0,v0,v1", "84636942 lh $v1, %lo(D_80126942)($v1)"], [92, "afa20028 sw\tv0,40(sp)", "27a40010 addiu $a0, $sp, 0x10"], [93, "8602002c lh\tv0,44(s0)", "00431021 addu $v0, $v0, $v1"]], "passes_tried": null}
|
||||
{"ts": "2026-07-24 19:49:45", "addr": "0x80169228", "name": "func_80169228", "reach": 138, "klass": "struct", "nins": 105, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (105 ins). Modeled on matched sibling DEFINE_func_80169A4C (engine_core.h):", "best_draft": ".run/backlog_drafts/func_80169228.c", "binary": "ov_SC01_077", "source": "t6-recover", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-24 19:50:19", "addr": "0x8012b4b8", "name": "func_8012B4B8", "reach": 138, "klass": "regalloc-order", "nins": 84, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (84 ins)", "best_draft": ".run/backlog_drafts/func_8012B4B8.c", "binary": "ov_SC01_077", "source": "t6-recover", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-24 20:23:40", "addr": "0x80156670", "name": "func_80156670", "reach": 138, "klass": "regalloc-order", "nins": 83, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (83 ins). param_2/param_3 as s32 (not u16) flips the $s5/$s6 tie-break", "best_draft": ".run/backlog_drafts/func_80156670.c", "binary": "ov_SC01_077", "source": "t6-recover", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-24 20:23:40", "addr": "0x80174cb0", "name": "func_80174CB0", "reach": 138, "klass": "regalloc-order", "nins": 123, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (123 ins)", "best_draft": ".run/backlog_drafts/func_80174CB0.c", "binary": "ov_SC01_077", "source": "t6-recover", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-24 20:24:20", "addr": "0x80156670", "name": "func_80156670", "reach": 138, "klass": "regalloc-order", "nins": 83, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (83 ins). param_2/param_3 as s32 (not u16) flips the $s5/$s6 tie-break", "best_draft": ".run/backlog_drafts/func_80156670.c", "binary": "ov_SC01_077", "source": "t6-recover", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-24 20:24:20", "addr": "0x80174cb0", "name": "func_80174CB0", "reach": 138, "klass": "regalloc-order", "nins": 123, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (123 ins)", "best_draft": ".run/backlog_drafts/func_80174CB0.c", "binary": "ov_SC01_077", "source": "t6-recover", "residual": null, "passes_tried": null}
|
||||
|
||||
@@ -2830,3 +2830,25 @@ conditional) · main-EXE/B9 + GLM/B6 + resident's 14 walls (P30) · behemoths B7
|
||||
> (`--check-only` first; targeted `--addr` only) · `p16_permute.setup` WIPES `.run/permuter/<fn>/` —
|
||||
> copy a best waypoint out before re-running (§66d-2).
|
||||
> **DO NOT close P29 on ROI** — burn-down floor still undetermined.
|
||||
|
||||
- **⛔ 2026-07-24 (SESSION-17) — the 2 typedef-blocked drafts do NOT bank: blockers stack THREE deep,
|
||||
and the last layer is a class the existing transforms do not reach. 0/2, tree restored exactly.**
|
||||
Did it properly this time: computed each draft's **own TU's** provided-typedef set via
|
||||
`cdecl.typedef_names(tu_path)` (217 / 215 names — note it takes a **PATH**, not text) →
|
||||
`strip_provided_typedefs` dropped **2 of 2** typedef lines from each draft → ran the **driver's
|
||||
ladder** (`--stages ""`, so `canon_resident_calls → cast_call_sites → sig_unify → gate`).
|
||||
**Result: pass 1 banked 0/2**, `src/` restored exactly (only `.run/backlog.jsonl` moved).
|
||||
**The stack, layer by layer** (cc1 reveals ONLY the first, so each fix exposes the next — §65):
|
||||
| fn | layer 1 | layer 2 | layer 3 (now) |
|
||||
|---|---|---|---|
|
||||
| `func_80156670` | `S8` dup typedef | `B8` dup typedef | **`conflicting types for D_801270A8`** — a DATA-extern conflict |
|
||||
| `func_80174CB0` | `MATRIX`/`SVECTOR` dup typedefs | — | **`conflicting types for func_80012ABC`** — a callee conflict `cast_call_sites` did NOT clear |
|
||||
**⚠️ A NEW STATIC-ORACLE BLIND SPOT, and the two-oracle design is what caught it (R34):**
|
||||
`func_80156670`'s data-extern conflict is **CC1-ONLY** — `blocker_probe`'s static oracle reports
|
||||
`none` while real cc1 fails. That is the first CC1-ONLY case measured (SESSION-16's 36-draft probe was
|
||||
36/36 agreement, 0 cc1-only). The static side needs a data-extern comparison it currently lacks; until
|
||||
it has one, a `static: none` verdict is NOT evidence that a draft is clean.
|
||||
**⇒ Honest status: these two are §65g-class** — not "run one more tool", but "needs a transform that
|
||||
does not exist yet" (a data-extern reconcile that `reconcile_tu` does not reach, and a callee
|
||||
reconcile `cast_call_sites` does not reach). **Estimated value if solved: ≈ +0.4pp.** Fully-stripped
|
||||
drafts preserved at `.run/perm_s17j/` so the next attempt starts three layers in, not from scratch.
|
||||
|
||||
Reference in New Issue
Block a user