mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 07:40:42 -04:00
feat(phase-31): wave G — 36/36 drafted, 32 banked, fleet 95.4%; §174 law 1b (PsyQ symbol names)
- wave G: 36 atlas mass cards on ov_SC03_006 -> 36/36 standalone (100%, independently re-verified), 32 banked of 33 gated, ONE gate group. R22 213/213. stubs -> 11,788. - two TU-packed waves now confirm the shape: ~1 rebuild per wave instead of 23. - law 1b added to the wave prompt: agents reconstruct CODE at 91-100% but INVENT PsyQ symbol names (S80131E00->Square0, Blk20_...->RotMatrixY, SRM_...->RotTransSV). Dangerous because match_one MASKS relocations -> a wrong callee name still reports MATCH; only the whole-binary gate + symbol audit catch it, after a wasted rebuild. - 3 wave-G drafts held by that audit (would previously have crashed it pre-commit:2330).
This commit is contained in:
@@ -1731,3 +1731,7 @@
|
||||
{"ts": "2026-08-15 01:14:48", "addr": "0x80182564", "name": "func_80182564", "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_80182564.c", "binary": "ov_SC02_011", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-08-15 01:14:48", "addr": "0x80189b64", "name": "func_80189B64", "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_80189B64.c", "binary": "ov_SC02_011", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-08-15 01:14:48", "addr": "0x8018e0ac", "name": "func_8018E0AC", "reach": null, "klass": null, "nins": null, "status": "near", "closeness": 73, "where_stuck": "residual: 73 mismatch", "best_draft": ".run/backlog_drafts/func_8018E0AC.c", "binary": "ov_SC02_011", "source": "worker", "residual": [[0, "27bdffc8 addiu\tsp,sp,-56", "27bdffc0 addiu $sp, $sp, -0x40"], [7, "afbf0034 sw\tra,52(sp)", "afb30034 sw $s3, 0x34($sp)"], [9, "00008821 move\ts1,zero", "26738e78 addiu $s3, $s3, %lo(D_80078E78)"], [10, "10400006 beqz\tv0,44 <func_8018E0AC+0x44>", "afbf0038 sw $ra, 0x38($sp)"], [11, "00000000 nop", "0c0532bf jal func_8014CAFC"], [12, "3c020000 lui\tv0,0x0", "00008821 addu $s1, $zero, $zero"], [13, "90420000 lbu\tv0,0(v0)", "10400007 beqz $v0, .L8018E100"], [15, "1440003d bnez\tv0,134 <func_8018E0AC+0x134>", "3c028008 lui $v0, %hi(D_80078EAE)"], [16, "24110001 li\ts1,1", "90428eae lbu $v0, %lo(D_80078EAE)($v0)"], [18, "02002021 move\ta0,s0", "1440003c bnez $v0, .L8018E1E8"], [19, "10400039 beqz\tv0,134 <func_8018E0AC+0x134>", "00001021 addu $v0, $zero, $zero"], [20, "27a40018 addiu\ta0,sp,24", "24110001 addiu $s1, $zero, 0x1"], [21, "3c030000 lui\tv1,0x0", "0c063882 jal func_8018E208"], [22, "94630006 lhu\tv1,6(v1)", "02002021 addu $a0, $s0, $zero"], [23, "3c050000 lui\ta1,0x0", "14400003 bnez $v0, .L8018E118"], [24, "94a5000a lhu\ta1,10(a1)", "27a40018 addiu $a0, $sp, 0x18"], [25, "3c060000 lui\ta2,0x0", "0806387a j .L8018E1E8"], [26, "94c6000e lhu\ta2,14(a2)", "00001021 addu $v0, $zero, $zero"], [27, "a7a30020 sh\tv1,32(sp)", "96430006 lhu $v1, 0x6($s2)"], [28, "a7a50022 sh\ta1,34(sp)", "9645000a lhu $a1, 0xA($s2)"], [29, "a7a60024 sh\ta2,36(sp)", "9646000e lhu $a2, 0xE($s2)"], [30, "96020006 lhu\tv0,6(s0)", "a7a30020 sh $v1, 0x20($sp)"], [31, "00000000 nop", "a7a50022 sh $a1, 0x22($sp)"], [32, "00621823 subu\tv1,v1,v0", "a7a60024 sh $a2, 0x24($sp)"]], "passes_tried": null}
|
||||
{"ts": "2026-08-15 01:24:17", "addr": "0x80182564", "name": "func_80182564", "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_80182564.c", "binary": "ov_SC02_011", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-08-15 01:24:17", "addr": "0x80189b64", "name": "func_80189B64", "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_80189B64.c", "binary": "ov_SC02_011", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-08-15 01:24:17", "addr": "0x8018e0ac", "name": "func_8018E0AC", "reach": null, "klass": null, "nins": null, "status": "near", "closeness": 73, "where_stuck": "residual: 73 mismatch", "best_draft": ".run/backlog_drafts/func_8018E0AC.c", "binary": "ov_SC02_011", "source": "worker", "residual": [[0, "27bdffc8 addiu\tsp,sp,-56", "27bdffc0 addiu $sp, $sp, -0x40"], [7, "afbf0034 sw\tra,52(sp)", "afb30034 sw $s3, 0x34($sp)"], [9, "00008821 move\ts1,zero", "26738e78 addiu $s3, $s3, %lo(D_80078E78)"], [10, "10400006 beqz\tv0,44 <func_8018E0AC+0x44>", "afbf0038 sw $ra, 0x38($sp)"], [11, "00000000 nop", "0c0532bf jal func_8014CAFC"], [12, "3c020000 lui\tv0,0x0", "00008821 addu $s1, $zero, $zero"], [13, "90420000 lbu\tv0,0(v0)", "10400007 beqz $v0, .L8018E100"], [15, "1440003d bnez\tv0,134 <func_8018E0AC+0x134>", "3c028008 lui $v0, %hi(D_80078EAE)"], [16, "24110001 li\ts1,1", "90428eae lbu $v0, %lo(D_80078EAE)($v0)"], [18, "02002021 move\ta0,s0", "1440003c bnez $v0, .L8018E1E8"], [19, "10400039 beqz\tv0,134 <func_8018E0AC+0x134>", "00001021 addu $v0, $zero, $zero"], [20, "27a40018 addiu\ta0,sp,24", "24110001 addiu $s1, $zero, 0x1"], [21, "3c030000 lui\tv1,0x0", "0c063882 jal func_8018E208"], [22, "94630006 lhu\tv1,6(v1)", "02002021 addu $a0, $s0, $zero"], [23, "3c050000 lui\ta1,0x0", "14400003 bnez $v0, .L8018E118"], [24, "94a5000a lhu\ta1,10(a1)", "27a40018 addiu $a0, $sp, 0x18"], [25, "3c060000 lui\ta2,0x0", "0806387a j .L8018E1E8"], [26, "94c6000e lhu\ta2,14(a2)", "00001021 addu $v0, $zero, $zero"], [27, "a7a30020 sh\tv1,32(sp)", "96430006 lhu $v1, 0x6($s2)"], [28, "a7a50022 sh\ta1,34(sp)", "9645000a lhu $a1, 0xA($s2)"], [29, "a7a60024 sh\ta2,36(sp)", "9646000e lhu $a2, 0xE($s2)"], [30, "96020006 lhu\tv0,6(s0)", "a7a30020 sh $v1, 0x20($sp)"], [31, "00000000 nop", "a7a50022 sh $a1, 0x22($sp)"], [32, "00621823 subu\tv1,v1,v0", "a7a60024 sh $a2, 0x24($sp)"]], "passes_tried": null}
|
||||
{"ts": "2026-08-15 01:48:41", "addr": "0x8018b4a4", "name": "func_8018B4A4", "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_8018B4A4.c", "binary": "ov_SC03_006", "source": "worker", "residual": null, "passes_tried": null}
|
||||
|
||||
+701
-701
File diff suppressed because it is too large
Load Diff
@@ -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: 351330 / 363163 = 96.74% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 12892812 / 13523865 = 95.3% (shipped .text across main + resident + 211 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 5275093 / 5851972 = 90.1% (81556/90929 unique fns; the DISTINCT-RE number)
|
||||
FLEET fn-count byte-ident: 351368 / 363163 = 96.75% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 12895489 / 13523865 = 95.4% (shipped .text across main + resident + 211 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 5277770 / 5851972 = 90.2% (81594/90929 unique fns; the DISTINCT-RE number)
|
||||
MAIN game-code weighted : 436 / 79510 = 0.5% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-08-05; caveat is R34: no independent second oracle for a PS-X EXE, NOT drift)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 12892376 / 13444355 = 95.9%)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 12895053 / 13444355 = 95.9%)
|
||||
|
||||
FLEET REAL substantive : 349160 (of which dedup-shared 254534 via 2105 groups / 254610 instances)
|
||||
FLEET REAL substantive : 349198 (of which dedup-shared 254534 via 2105 groups / 254610 instances)
|
||||
FLEET LINKED PsyQ objs : 959
|
||||
FLEET NON_MATCHING : 7 (0 in any default build — G4)
|
||||
FLEET INCLUDE_ASM stubs : 11826
|
||||
FLEET INCLUDE_ASM stubs : 11788
|
||||
FLEET matchable : 363163
|
||||
|
||||
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
|
||||
@@ -106,7 +106,7 @@ FLEET matchable : 363163
|
||||
| ov_SC02_003 | 2535 | 1857 | 0 | 2535 | 2683 | 94.5% |
|
||||
| ov_SC02_004 | 2391 | 1806 | 0 | 2391 | 2401 | 99.6% |
|
||||
| ov_SC02_005 | 2547 | 1802 | 0 | 2557 | 2927 | 87.4% |
|
||||
| ov_SC02_011 | 2698 | 1810 | 0 | 2708 | 2893 | 93.6% |
|
||||
| ov_SC02_011 | 2704 | 1810 | 0 | 2714 | 2893 | 93.8% |
|
||||
| ov_SC02_015 | 2402 | 1808 | 0 | 2402 | 2414 | 99.5% |
|
||||
| ov_SC02_016 | 2485 | 1810 | 0 | 2488 | 2545 | 97.8% |
|
||||
| ov_SC02_017 | 2559 | 1810 | 0 | 2567 | 2732 | 94.0% |
|
||||
@@ -122,7 +122,7 @@ FLEET matchable : 363163
|
||||
| ov_SC03_001 | 2700 | 1807 | 0 | 2717 | 2869 | 94.7% |
|
||||
| ov_SC03_002 | 2551 | 1815 | 0 | 2566 | 2631 | 97.5% |
|
||||
| ov_SC03_003 | 2402 | 1806 | 0 | 2403 | 2423 | 99.2% |
|
||||
| ov_SC03_006 | 2572 | 1814 | 0 | 2581 | 2767 | 93.3% |
|
||||
| ov_SC03_006 | 2604 | 1814 | 0 | 2613 | 2767 | 94.4% |
|
||||
| ov_SC03_007 | 2470 | 1806 | 0 | 2474 | 2623 | 94.3% |
|
||||
| ov_SC03_010 | 2423 | 1807 | 0 | 2423 | 2471 | 98.1% |
|
||||
| ov_SC03_011 | 2426 | 1807 | 0 | 2432 | 2527 | 96.2% |
|
||||
|
||||
@@ -67,7 +67,8 @@ R22 clean-fleet **213/213** after every banked batch · tools-health green · 0
|
||||
| C | tell 11 + weak 24 | 35 | **35 (100%)** | **32** (8 propagated ×2) | ~2.39M | ~75k | Law 4 in-prompt → 0 symbol fails, 91% gate; **weak lane 24/24 on haiku — the 890-card vein is live**; 3 NEAR → grinder |
|
||||
| E-probe | mass/main (6) | 6 | 4 (67%) | **0** | ~474k | — | **main is agent-draftable but LINK-BLOCKED**: 1 byte-correct fn ⇒ 2-byte whole-EXE diff, a `jal` retargeted game-code→PsyQ-archive symbol. Not a matching wall. `gate_lane` main-blindness fixed en route |
|
||||
| D | adapt (48) | 48 | **47 (98%)** | **45** (40 main gate + 5 late-repair, 2 gates) | ~4.48M | **~100k** | repair stage rescued 5/6 first-pass DIFFs → gate them in a SECOND slate (the first slate is built before the repair stage lands); 23 gate groups for 42 drafts = the throughput ceiling → `build_wave_atlas.py` now packs by **(binary,TU)** = the real gate-group key; 1 NEAR at **close=1 DELAY-SLOT** → grinder |
|
||||
| F | **mass/atlas (60)** — the TU-packed experiment | 60 | **55 (91%)** pre-repair → **59/60** post-repair / 3,508 ins | **50** of 53 gated (94%) **in ONE gate group** | ~7.16M | ~143k | **THE WAVE SHAPE FOR THE REST OF THE CAMPAIGN.** Fresh-crack lane (no proven body to edit) converts like the seeded lanes; ~3× mass/card (avg 48 ins vs 12–42); **1 rebuild for 50 banks** vs wave D's 23 rebuilds for 45. 2 genuine STALE (agents invented `S80131E00`/`Mat32_…` where the target calls **PsyQ `Square0`/`RotMatrixY`**) held back; 5 "local-only" flags are just local type names (harmless). Straggler batch pending: the repair stage rescued ~6 more AFTER the slate was built (same lesson as wave D — **build the slate after the repair stage lands**) |
|
||||
| G | mass/atlas (36) | 36 | **36/36 = 100%** (independently re-verified) / 2,554 ins | **32** of 33 gated **in ONE gate group**; fleet 95.3→**95.4%** | ~3.16M | ~99k | **Best draft rate of the campaign, on FRESH CRACKS.** 3 held by the symfix audit for inventing symbol names where the target calls **PsyQ `RotTransSV`/`RotMatrixY`** — the just-fixed non-hex handling earned its keep immediately (pre-fix, one such name crashed the whole audit). Pattern: agents reconstruct the CODE reliably and guess PsyQ SYMBOL NAMES unreliably; the deterministic audit is what catches it |
|
||||
| F | **mass/atlas (60)** — the TU-packed experiment | 60 | **55 (91%)** pre-repair → **59/60** post-repair / 3,508 ins | **56** total (50 + 6 stragglers) of 60, **1 rebuild each** | ~7.16M | ~143k | **THE WAVE SHAPE FOR THE REST OF THE CAMPAIGN.** Fresh-crack lane (no proven body to edit) converts like the seeded lanes; ~3× mass/card (avg 48 ins vs 12–42); **1 rebuild for 50 banks** vs wave D's 23 rebuilds for 45. 2 genuine STALE (agents invented `S80131E00`/`Mat32_…` where the target calls **PsyQ `Square0`/`RotMatrixY`**) held back; 5 "local-only" flags are just local type names (harmless). Straggler batch pending: the repair stage rescued ~6 more AFTER the slate was built (same lesson as wave D — **build the slate after the repair stage lands**) |
|
||||
|
||||
- 2026-08-14 — **CAMPAIGN OPEN (T10+, Ultracode).** Wave A: 24 adapt cards → 18/24 standalone (75%) → symfix-first (0 stale — the prompt-law worked) → gate **12 banked + 1 propagation** (~117k tok/bank e2e; stubs → 12,030). 6 NEARs (3 at close ≤3) enqueued to the grinder. Wave B (48 cards, all haiku, 29 binaries) launched with the decl-matching lesson. Grinder pass 1: 0/10 but func_800CB4CC at best-1.
|
||||
|
||||
@@ -94,6 +95,9 @@ R22 clean-fleet **213/213** after every banked batch · tools-health green · 0
|
||||
- **NEW TOOL DEFECT (logged, not yet fixed): `aprop_symfix` CRASHES on non-hex symbol names.** `deltas[int(new[-8:],16) - int(old[-8:],16)]` assumes every symbol is `func_XXXXXXXX`/`D_XXXXXXXX`; a draft calling **PsyQ `Square0`** raises `ValueError: invalid literal for int() with base 16: 'Square0'` and takes the whole audit down. This will recur on every PsyQ-calling draft. **Fix wanted:** treat a stale pair whose names are not hex-suffixed as a direct 1:1 rename (no delta), and never let one unparseable pair abort the batch (R32: a crash is not a coverage answer). Workaround used: gate the 53 clean drafts, hold the 2 genuine STALE for a hand rename.
|
||||
- **Grinder ran concurrently with drafting** (free CPU, no tree writes during permute) on the close≤6 seeds: 3 ILS cycles each on the md_MAIN_* band, **0 banked, all parked at best-1** — plus it re-surfaced the Phase-22 split-file blindness (`func_800CB270: no .s under md_MAIN_027 — skip`). Stopped via the STOP sentinel to hand the tree to the wave-F gate (single-writer discipline; the gate is chained to start on grinder release).
|
||||
|
||||
- 2026-08-15 — **Wave G: 36/36 drafted (100%), 32 banked, fleet 95.3→95.4%.** Two TU-packed waves now confirm the shape. **`aprop_symfix` non-hex fix landed** (`commit:2330`): a curated PsyQ name (`Square0`) made `int(name[-8:],16)` raise and abort a 55-draft audit *after* the renames had already succeeded; now counted as a `named-1:1` rename and the batch survives. Verified on the literal incident values (old aborts, new completes + still buckets the hex pair by its `0x484c` delta); honest caveat — the live slates could not re-trigger the path because those drafts are banked, so the changed expression was exercised directly.
|
||||
- **Standing pattern worth keeping in the prompt:** agents reconstruct CODE reliably (91–100% standalone) but guess **PsyQ symbol NAMES** unreliably (wave F: `S80131E00`→`Square0`, `Mat32_…`→`RotMatrixY`; wave G: `SRM_…`/`STM_…`→`RotTransSV`, `Blk20_…`→`RotMatrixY`). The deterministic symfix audit — not the model, and not `match_one` (which masks relocations and is BLIND to a wrong callee name) — is what catches this every time. Consider adding "if the target's .s calls a PsyQ symbol, use that exact name" to the wave LAWS.
|
||||
|
||||
## Blockers
|
||||
- **main (79,510 weighted ins @ 0.5%) is blocked on a LINK-RESOLUTION defect, not on matching** — see the 2-byte `jal` retarget above. Needs its own lane before any main wave is worth running. Overlay/md lanes are unaffected and continue to bank.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user