mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 21:36:06 -04:00
cf7f837231
SaveLoadRoutine (1,165 ins) is the largest open function in the project, 9.2%
of all remaining work, and has been carried as the §434 WALL. Gated alone
through gate_main, with the §376/§378 chain already applied, the verdict layer
says: "SaveLoadRoutine is BYTE-IDENTICAL; all 3989 differing bytes are
ELSEWHERE". The body has been correct the whole time.
What rejects it is where its FOUR jump tables (jtbl_80072ED4/EEC/F0C/F24) land:
.data/.rodata (jump tables) 3,787 bytes 94.9%
.text (perturbed code) 202 bytes 5.1%
and the built image is 4 bytes SHORTER than retail (413,692 vs 413,696) --
§446's first diagnostic, firing on a function §446 was not written about.
main_diff_locate.classify() already HAD a TABLE REJECT class, added in S72 under
a docstring reading "THE THIRD CLASS EXISTS BECAUSE THE FIRST TWO MISLABELLED
IT". It could not fire here for two independent reasons:
* it keyed on the literal string `(.rodata)`, but main's section_order is
[.rodata, .text, .data, .bss] -- its rodata sits BELOW .text and its jump
tables live in `.data` objects, so TABLE REJECT was UNREACHABLE BY
CONSTRUCTION on the binary with the most jump-table functions left. A
section NAME is not a section ROLE.
* it demanded purity (ro == outside), so 5% perturbed code defeated an
all-or-nothing test and dropped the verdict through to PLUMBING REJECT --
whose advice (fix_arity_callers -> cast_self_callers) addresses the 5% and
cannot touch the 95% that is data. That chain was run on this function
TWICE today and fixed nothing, exactly as the evidence predicts.
Now: table bytes counted in (.data) OR (.rodata), and the test is DOMINANCE
(>=60%) rather than purity, reporting the split and naming which part is the
carve problem and which the declaration problem.
Negative control over all five pre-existing verdict shapes (pure BODY, pure
PLUMBING, pure TABLE, MIXED, NOT FOUND) plus the S75 shape: 5 of 6 verdicts
UNCHANGED, only the SaveLoadRoutine shape flips PLUMBING REJECT -> TABLE
REJECT (MIXED).
Cookbook §447. The law: a class that cannot fire is worse than a class that does
not exist -- it converts "I don't know" into confident, specific, wrong advice.
When a verdict names a subsystem, check that subsystem owns the MAJORITY OF THE
BYTES before acting on it.
4.7 KiB
4.7 KiB
Backlog — automation near-misses for hand-finishing
Generated by
tools/backlog.py renderfrom.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'sbest_draftis the closest C the machine reached — resume from there.
Open near-misses: 22 · by status {'near': 14, 'failed': 8} · by class {None: 22}
| # | addr | reach | class | nins | status | closeness | where it stuck | best draft |
|---|---|---|---|---|---|---|---|---|
| 1 | func_80181804 | None | None | near | 0 | match_one MATCH but the whole-binary gate rejected — CAUSE NOT DETERMINED. FIRST re-derive the destination TU from the asm subdir: asm//nonmatchings/<TU_stem>/.s => src//<TU_stem>.c (the third path component IS the TU). Only then look for a decl conflict or a codegen residual. | .run/backlog_drafts/func_80181804.c |
|
| 2 | func_80181CB8 | None | None | near | 0 | match_one MATCH but the whole-binary gate rejected — CAUSE NOT DETERMINED. FIRST re-derive the destination TU from the asm subdir: asm//nonmatchings/<TU_stem>/.s => src//<TU_stem>.c (the third path component IS the TU). Only then look for a decl conflict or a codegen residual. | .run/backlog_drafts/func_80181CB8.c |
|
| 3 | func_8002B0B4 | None | None | near | 0 | match_one MATCH but the whole-binary gate rejected — CAUSE NOT DETERMINED. FIRST re-derive the destination TU from the asm subdir: asm//nonmatchings/<TU_stem>/.s => src//<TU_stem>.c (the third path component IS the TU). Only then look for a decl conflict or a codegen residual. | .run/backlog_drafts/func_8002B0B4.c |
|
| 4 | func_8017D918 | None | None | near | 4 | residual: 4 mismatch | .run/backlog_drafts/func_8017D918.c |
|
| 5 | func_80182CBC | None | 28 | near | 7 | resolver DIFF (real-TU rtu_match, 20260825-233820): mine=28 target=28 | .run/backlog_drafts/func_80182CBC.c |
|
| 6 | func_80180EC0 | None | None | near | 9 | residual: 9 mismatch | .run/backlog_drafts/func_80180EC0.c |
|
| 7 | func_80181294 | None | None | near | 19 | residual: 19 mismatch | .run/backlog_drafts/func_80181294.c |
|
| 8 | func_80181344 | None | None | near | 48 | residual: 48 mismatch | .run/backlog_drafts/func_80181344.c |
|
| 9 | func_8017DB98 | None | None | near | 115 | residual: 115 mismatch | .run/backlog_drafts/func_8017DB98.c |
|
| 10 | func_80180B3C | None | 297 | near | 125 | resolver DIFF (real-TU rtu_match, 20260825-233820): mine=296 target=297 | .run/wave_eo/shard478/func_80180B3C.c |
|
| 11 | func_800CB00C | None | 123 | near | 168 | resolver DIFF (real-TU rtu_match, 20260826-053145): mine=174 target=123 | .run/wave_g0c/shard30/func_800CB00C.c |
|
| 12 | func_801806F8 | None | 241 | near | 235 | resolver DIFF (real-TU rtu_match, 20260826-062321): mine=72 target=241 | .run/wave_g0d/shard20/func_801806F8.c |
|
| 13 | func_80180ABC | None | 257 | near | 250 | resolver DIFF (real-TU rtu_match, 20260825-233820): mine=49 target=257 | .run/wave_ci/shard141/func_80180ABC.c |
|
| 14 | func_80180B3C | None | 21 | near | 287 | resolver DIFF (real-TU rtu_match, 20260826-022235): mine=287 target=21 | .run/wave_eq/shard63/func_80180B3C.c |
|
| 15 | func_800D06E8 | None | None | failed | resolver CC1 (real-TU rtu_match, 20260825-233820): .run/resolver/work/resident__func_800D06E8/c0/rtu/func_800D06E8/t.c:1770: conflicting types for `Struct80078E78' | .run/wave_ch/shard62/func_800D06E8.c |
||
| 16 | func_8017FBCC | None | None | failed | won't compile standalone (loose-typing / missing decl) | .run/backlog_drafts/func_8017FBCC.c |
||
| 17 | func_801832F8 | None | None | failed | won't compile standalone (loose-typing / missing decl) | .run/backlog_drafts/func_801832F8.c |
||
| 18 | func_8017F018 | None | None | failed | won't compile standalone (loose-typing / missing decl) | .run/backlog_drafts/func_8017F018.c |
||
| 19 | func_8018095C | None | None | failed | won't compile standalone (loose-typing / missing decl) | .run/backlog_drafts/func_8018095C.c |
||
| 20 | func_80181720 | None | None | failed | won't compile standalone (loose-typing / missing decl) | .run/backlog_drafts/func_80181720.c |
||
| 21 | func_8018DFC4 | None | None | failed | won't compile standalone (loose-typing / missing decl) | .run/backlog_drafts/func_8018DFC4.c |
||
| 22 | func_80062144 | None | None | failed | won't compile standalone (loose-typing / missing decl) |