Files
BFM-decomp/docs/progress.fleet.md
T
Drew T 82d79e7a32 fix(phase-26a): A6/A7 — the family engine could not see half its corpus; 17 fns banked x134 free
R22: check-all 136 PASSED / 0 FAILED. dedup-check 1823 validated / 0 failed (C1 coverage 224,933/224,933).
Fleet instr-weighted 66.5% -> 66.7%.

=== dedup_propagate: it was blind to HALF the corpus ===
overlay_files() used a hardcoded suffix allowlist ("_a","_o0","_o0b","_after") that predated the
Phase-26 jr carves -> 404 of the fleet's 811 overlay .c. The 407-file gap held 36,135 INCLUDE_ASM stubs
and ~32,000 inline defs, and overlay_files gates ALL of dedup_propagate (source_text / find_site /
apply_plan / struct_check / reconcile_caller_extern). Now a GLOB — never an allowlist, because the NEXT
split family would re-open it. The asm_subdir is always the file stem, an invariant the old four entries
already satisfied.

find_site's def-detector required the signature line to END in ')' and the next non-blank line to START
with '{'. It therefore silently dropped THREE shapes: K&R definitions (`s32 f(arg0)` / `s32 arg0;` / `{`),
multi-line signatures, and single-line bodies. K&R is the project's house style for exactly the biggest,
highest-reach functions — func_8015AE2C (562 ins), func_80166994, func_80133CD4, func_8015A3C8 — and they
live in the _jr_* files overlay_files could not even open. Fixing either alone would have been useless:
the glob exposes the files, and find_site would still drop their biggest prizes. Both fixed together.
  * The signature's closing paren is now found by a real paren-walk, not line.count() or split(')')[-1]:
    a single-line body containing a call (`void f(int a){ g(a); }`) has balanced parens of its own, so
    both shortcuts land on the WRONG paren and then misread the body's ';' as a prototype terminator.
  * AGREEMENT ASSERTION (the audit's): find_site vs family_remap.extract_unit -> 701 agree / 0 disagree.
    Negative controls hold (a prototype+call is rejected; a 1-line body with a call is a def).

=== THE HARVEST (free work, byte-gated) ===
--auto-from ov_SC01_077 now nominates what it could never see: 20 planned, 17 propagated x134, 3 dropped
as cross-overlay stragglers. 134 overlays rebuilt BYTE-IDENTICAL; 17 new dedup groups.
Includes ALL FOUR functions A1 caught the registry lying about (func_80128ED8 / 8012C098 / 8012C0EC /
8012C750): 0 stubs remaining, real shared macros. THE LOOP CLOSES — A1 found the lie, and THIS is the
bug that had made it true (3 of the 4 are defined in ov_SC01_077_jr_8012ACE0.c, which the allowlist could
not open, so the propagation never ran and dedup_integrate greenlit the result).

=== family_remap: 96 PHANTOM exemplars -> 0 ===
extract_unit globbed only src/<ov>/<ov>*.c, so a function matched via a SHARED body had no source form
and read as NOT MATCHED. 93-96 of 218 h_seq "matched" exemplars were phantom, carrying 2,157 candidate
members of which 1,834 are still-stubbed, PURE/IMM-clean, symbol_map-clean and unpinned — staged and
gated today, dropped before the first build then. It is now TOTAL over BOTH shared-body mechanisms:
  (1) the DEFINE_func_<ADDR>() macro — reconstructed as the exact INVERSE of dedup_propagate.make_macro
      (derived from the generator, not re-guessed from the text);
  (2) a DIRECT definition in a shared header, #included per overlay — the whale (func_80144B9C, 770 ins,
      -O0), which the registry explicitly records as "NOT a DEFINE_ macro".
  CENSUS: 216 matched exemplars, 216 real, 0 PHANTOM.

symbol_map named the symbol by HOW IT WAS LOADED, not by WHAT IT IS: reloc_targets labels every lui/%lo
pair "data", and a FUNCTION's address taken via lui/%lo (an address-taken callback) is exactly that shape
(splat's own .s: %lo(func_8017E1D4), 7 occurrences). The map got a D_<ADDR> key while the C writes
func_<ADDR>, so the word-bounded substitution matched NOTHING and silently no-op'd — the sibling kept the
EXEMPLAR's function pointer and the loss was booked as a BYTE failure, indistinguishable from a compiler
wall. Now emits both keys (addresses are unique; the pass is simultaneous, so the extra key is free).

gather_externs was line-oriented, so a WRAPPED comma extern was invisible in both directions (the first
line has no ';', the continuation has no `extern`). ov_SC01_077.c:271-272 declares NINE symbols that way,
and the exemplar referencing them (func_8013D178) is a 133-member family — every sibling was staged with
NO declaration, failed to compile, and bisect-stormed its whole gate group. Now statement-oriented, and
an unresolved symbol is REPORTED, never silently dropped.

=== family_sweep.stub_map / build_engine_types ===
stub_map: func_-only -> a curated-name stub read as "already matched" -> phantom exemplar. Now corpus-derived.
build_engine_types hard-exited on 1,070 of 1,470 type-bearing overlay .c (73%; the audit measured 573/709
= 81% on its narrower set) because 1,929 TAGGED-struct typedefs tripped a guard whose own comment asserts
"our source has only ANONYMOUS-struct typedefs" — true in Phase 20, false since the harvest agents started
writing tagged structs. inject_capped_externs routes every type-bearing body HERE as the type-heavy tail's
ONLY sanctioned unblocker, so the tail's unblocker could not run on the corpus the tail lives in.
A contained def (the typedef's span encloses the body) is liftable — it just must not be counted twice;
only a PARTIAL overlap is malformed. Verified on a file that used to hard-exit: 5 tagged typedefs folded +
forward-declared, 46 types written, exit 0.

  ** AND THE SHARPEST LESSON IN THE AUDIT: this one was never silent. It printed "[overlap] ... handle
     manually" every single time. But the message reads like a rare edge case rather than a four-fifths
     coverage failure, so nobody ever COUNTED it. A loud failure that nobody counts is exactly as
     invisible as a silent one. R32 must be "assert your coverage", not merely "fail loud". **

R14 self-catches, recorded because I hit both while fixing them: my first shared-header scan read a macro
body's `extern void f(void); \` as a DEFINITION (the trailing continuation means the line does not end in
';', so the decl guard never fired) — the exact bug fixed at commit:0552, reintroduced by me and caught only
because the whale resolved from the WRONG file. Column-0 anchoring fixes it by construction. And my
phantom census returned 0/0 twice because I guessed the manifest schema instead of reading it.
2026-07-14 10:34:06 -06:00

155 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BFM FLEET matching progress (generated by tools/progress.py --fleet — authoritative)
# 136 binaries: main + resident + 134 location overlays. DETERMINISTIC,
# source-derived (committed src/*.c + config/dedup.us.yaml). Live byte gate: `make check-all`;
# cross-binary collapsible-byte leverage: docs/duplicates.cross.md.
# THREE progress metrics (all matter — see the labels):
FLEET fn-count byte-ident: 284526 / 343677 = 82.79% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
FLEET instr-weighted : 8470381 / 12707182 = 66.7% (shipped .text across resident+134 overlays; the decomp.dev-DISPLAY number)
FLEET distinct-code(uniq): 2530389 / 5410077 = 46.8% (51830/84996 unique fns; the DISTINCT-RE number; main EXE not sig'd)
FLEET REAL substantive : 282998 (of which dedup-shared 224889 via 1823 groups / 224933 instances)
FLEET LINKED PsyQ objs : 959
FLEET NON_MATCHING : 7 (0 in any default build — G4)
FLEET INCLUDE_ASM stubs : 59144
FLEET matchable : 343677
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
|---|---:|---:|---:|---:|---:|---:|
| main | 54 | 2 | 959 | 1055 | 2096 | 50.3% |
| resident | 123 | 0 | 0 | 125 | 146 | 85.6% |
| ov_SC01_000 | 2085 | 1681 | 0 | 2085 | 2403 | 86.8% |
| ov_SC01_001 | 2089 | 1681 | 0 | 2091 | 2466 | 84.8% |
| ov_SC01_004 | 2081 | 1672 | 0 | 2082 | 2414 | 86.2% |
| ov_SC01_005 | 2107 | 1694 | 0 | 2107 | 2503 | 84.2% |
| ov_SC01_006 | 2107 | 1694 | 0 | 2107 | 2503 | 84.2% |
| ov_SC01_008 | 2080 | 1672 | 0 | 2082 | 2426 | 85.8% |
| ov_SC01_009 | 2101 | 1673 | 0 | 2102 | 2507 | 83.8% |
| ov_SC01_074 | 2085 | 1673 | 0 | 2087 | 2425 | 86.1% |
| ov_SC01_077 | 2320 | 1641 | 0 | 2322 | 2585 | 89.8% |
| ov_SC01_080 | 2117 | 1676 | 0 | 2117 | 2512 | 84.3% |
| ov_SC01_084 | 2124 | 1676 | 0 | 2129 | 2579 | 82.6% |
| ov_SC02_000 | 2170 | 1711 | 0 | 2170 | 2683 | 80.9% |
| ov_SC02_003 | 2170 | 1711 | 0 | 2170 | 2683 | 80.9% |
| ov_SC02_004 | 2086 | 1676 | 0 | 2086 | 2401 | 86.9% |
| ov_SC02_005 | 2187 | 1672 | 0 | 2197 | 2927 | 75.1% |
| ov_SC02_011 | 2192 | 1679 | 0 | 2203 | 2893 | 76.1% |
| ov_SC02_015 | 2091 | 1678 | 0 | 2091 | 2414 | 86.6% |
| ov_SC02_016 | 2116 | 1678 | 0 | 2119 | 2545 | 83.3% |
| ov_SC02_017 | 2159 | 1678 | 0 | 2167 | 2732 | 79.3% |
| ov_SC02_021 | 2097 | 1678 | 0 | 2097 | 2437 | 86.0% |
| ov_SC02_026 | 2106 | 1676 | 0 | 2112 | 2572 | 82.1% |
| ov_SC02_027 | 2131 | 1676 | 0 | 2140 | 2692 | 79.5% |
| ov_SC02_028 | 2132 | 1676 | 0 | 2142 | 2701 | 79.3% |
| ov_SC02_031 | 2120 | 1677 | 0 | 2125 | 2562 | 82.9% |
| ov_SC02_035 | 2097 | 1676 | 0 | 2100 | 2520 | 83.3% |
| ov_SC02_039 | 2081 | 1676 | 0 | 2081 | 2416 | 86.1% |
| ov_SC02_041 | 2108 | 1676 | 0 | 2111 | 2561 | 82.4% |
| ov_SC03_001 | 2213 | 1677 | 0 | 2230 | 2869 | 77.7% |
| ov_SC03_002 | 2143 | 1681 | 0 | 2158 | 2631 | 82.0% |
| ov_SC03_003 | 2086 | 1676 | 0 | 2087 | 2423 | 86.1% |
| ov_SC03_006 | 2153 | 1682 | 0 | 2162 | 2767 | 78.1% |
| ov_SC03_007 | 2133 | 1676 | 0 | 2137 | 2623 | 81.5% |
| ov_SC03_010 | 2096 | 1676 | 0 | 2096 | 2470 | 84.9% |
| ov_SC03_011 | 2100 | 1676 | 0 | 2106 | 2527 | 83.3% |
| ov_SC03_012 | 2080 | 1676 | 0 | 2081 | 2406 | 86.5% |
| ov_SC03_013 | 2097 | 1676 | 0 | 2097 | 2492 | 84.1% |
| ov_SC03_014 | 2145 | 1701 | 0 | 2145 | 2685 | 79.9% |
| ov_SC03_015 | 2148 | 1701 | 0 | 2148 | 2685 | 80.0% |
| ov_SC03_023 | 2086 | 1676 | 0 | 2087 | 2435 | 85.7% |
| ov_SC03_024 | 2140 | 1681 | 0 | 2147 | 2641 | 81.3% |
| ov_SC03_028 | 2123 | 1676 | 0 | 2127 | 2664 | 79.8% |
| ov_SC03_029 | 2124 | 1678 | 0 | 2134 | 2644 | 80.7% |
| ov_SC03_030 | 2102 | 1681 | 0 | 2104 | 2495 | 84.3% |
| ov_SC03_031 | 2097 | 1676 | 0 | 2100 | 2514 | 83.5% |
| ov_SC03_089 | 2114 | 1676 | 0 | 2121 | 2581 | 82.2% |
| ov_SC03_090 | 2116 | 1676 | 0 | 2124 | 2625 | 80.9% |
| ov_SC03_091 | 2117 | 1676 | 0 | 2125 | 2640 | 80.5% |
| ov_SC03_092 | 2123 | 1676 | 0 | 2135 | 2587 | 82.5% |
| ov_SC03_093 | 2104 | 1676 | 0 | 2108 | 2563 | 82.2% |
| ov_SC03_094 | 2099 | 1676 | 0 | 2105 | 2577 | 81.7% |
| ov_SC03_095 | 2090 | 1676 | 0 | 2093 | 2474 | 84.6% |
| ov_SC03_096 | 2090 | 1676 | 0 | 2093 | 2465 | 84.9% |
| ov_SC03_097 | 2113 | 1676 | 0 | 2120 | 2603 | 81.4% |
| ov_SC03_098 | 2097 | 1676 | 0 | 2100 | 2541 | 82.6% |
| ov_SC03_099 | 2091 | 1676 | 0 | 2094 | 2504 | 83.6% |
| ov_SC03_100 | 2098 | 1676 | 0 | 2102 | 2539 | 82.8% |
| ov_SC03_101 | 2099 | 1676 | 0 | 2103 | 2528 | 83.2% |
| ov_SC03_102 | 2094 | 1676 | 0 | 2097 | 2492 | 84.1% |
| ov_SC03_103 | 2097 | 1678 | 0 | 2100 | 2510 | 83.7% |
| ov_SC03_104 | 2117 | 1676 | 0 | 2124 | 2616 | 81.2% |
| ov_SC03_105 | 2111 | 1676 | 0 | 2118 | 2597 | 81.6% |
| ov_SC03_108 | 2083 | 1676 | 0 | 2083 | 2443 | 85.3% |
| ov_SC03_109 | 2084 | 1676 | 0 | 2086 | 2424 | 86.1% |
| ov_SC03_110 | 2089 | 1676 | 0 | 2089 | 2468 | 84.6% |
| ov_SC03_111 | 2097 | 1676 | 0 | 2100 | 2510 | 83.7% |
| ov_SC03_112 | 2095 | 1678 | 0 | 2097 | 2526 | 83.0% |
| ov_SC03_113 | 2089 | 1678 | 0 | 2092 | 2468 | 84.8% |
| ov_SC03_114 | 2079 | 1676 | 0 | 2081 | 2415 | 86.2% |
| ov_SC03_115 | 2093 | 1676 | 0 | 2095 | 2472 | 84.7% |
| ov_SC03_116 | 2087 | 1676 | 0 | 2090 | 2438 | 85.7% |
| ov_SC03_117 | 2105 | 1676 | 0 | 2111 | 2557 | 82.6% |
| ov_SC03_118 | 2148 | 1700 | 0 | 2149 | 2685 | 80.0% |
| ov_SC03_119 | 2145 | 1700 | 0 | 2146 | 2685 | 79.9% |
| ov_SC03_121 | 2090 | 1676 | 0 | 2093 | 2459 | 85.1% |
| ov_SC03_124 | 2162 | 1672 | 0 | 2182 | 2741 | 79.6% |
| ov_SC03_125 | 2125 | 1676 | 0 | 2137 | 2588 | 82.6% |
| ov_SC03_126 | 2087 | 1678 | 0 | 2087 | 2423 | 86.1% |
| ov_SC04_000 | 2104 | 1680 | 0 | 2113 | 2546 | 83.0% |
| ov_SC04_002 | 2118 | 1676 | 0 | 2122 | 2636 | 80.5% |
| ov_SC04_003 | 2096 | 1676 | 0 | 2100 | 2502 | 83.9% |
| ov_SC04_004 | 2110 | 1676 | 0 | 2112 | 2558 | 82.6% |
| ov_SC04_005 | 2111 | 1676 | 0 | 2117 | 2612 | 81.0% |
| ov_SC04_006 | 2087 | 1676 | 0 | 2089 | 2454 | 85.1% |
| ov_SC04_007 | 2106 | 1676 | 0 | 2110 | 2569 | 82.1% |
| ov_SC04_008 | 2082 | 1676 | 0 | 2082 | 2415 | 86.2% |
| ov_SC04_009 | 2091 | 1676 | 0 | 2094 | 2441 | 85.8% |
| ov_SC04_010 | 2087 | 1676 | 0 | 2088 | 2419 | 86.3% |
| ov_SC04_011 | 2137 | 1676 | 0 | 2143 | 2803 | 76.5% |
| ov_SC04_012 | 2085 | 1676 | 0 | 2086 | 2420 | 86.2% |
| ov_SC04_015 | 2145 | 1677 | 0 | 2156 | 2611 | 82.6% |
| ov_SC04_016 | 2084 | 1676 | 0 | 2086 | 2440 | 85.5% |
| ov_SC04_018 | 2191 | 1711 | 0 | 2191 | 2857 | 76.7% |
| ov_SC04_019 | 2197 | 1711 | 0 | 2197 | 2857 | 76.9% |
| ov_SC04_020 | 2114 | 1676 | 0 | 2126 | 2567 | 82.8% |
| ov_SC04_021 | 2086 | 1678 | 0 | 2086 | 2423 | 86.1% |
| ov_SC05_000 | 2090 | 1680 | 0 | 2093 | 2422 | 86.4% |
| ov_SC05_001 | 2106 | 1676 | 0 | 2111 | 2574 | 82.0% |
| ov_SC05_002 | 2089 | 1676 | 0 | 2092 | 2442 | 85.7% |
| ov_SC05_003 | 2089 | 1676 | 0 | 2090 | 2481 | 84.2% |
| ov_SC05_004 | 2086 | 1676 | 0 | 2088 | 2464 | 84.7% |
| ov_SC05_005 | 2091 | 1676 | 0 | 2092 | 2491 | 84.0% |
| ov_SC05_006 | 2085 | 1676 | 0 | 2085 | 2430 | 85.8% |
| ov_SC05_007 | 2092 | 1676 | 0 | 2097 | 2482 | 84.5% |
| ov_SC05_008 | 2111 | 1676 | 0 | 2113 | 2543 | 83.1% |
| ov_SC05_009 | 2086 | 1676 | 0 | 2090 | 2438 | 85.7% |
| ov_SC05_010 | 2111 | 1676 | 0 | 2115 | 2588 | 81.7% |
| ov_SC05_011 | 2088 | 1676 | 0 | 2089 | 2409 | 86.7% |
| ov_SC05_017 | 2187 | 1673 | 0 | 2198 | 2842 | 77.3% |
| ov_SC05_018 | 2137 | 1676 | 0 | 2150 | 2673 | 80.4% |
| ov_SC05_019 | 2086 | 1678 | 0 | 2086 | 2423 | 86.1% |
| ov_SC06_000 | 2146 | 1685 | 0 | 2149 | 2691 | 79.9% |
| ov_SC06_006 | 2095 | 1676 | 0 | 2096 | 2511 | 83.5% |
| ov_SC06_008 | 2111 | 1678 | 0 | 2117 | 2542 | 83.3% |
| ov_SC06_010 | 2097 | 1676 | 0 | 2102 | 2517 | 83.5% |
| ov_SC06_011 | 2095 | 1676 | 0 | 2099 | 2468 | 85.0% |
| ov_SC06_013 | 2088 | 1676 | 0 | 2089 | 2425 | 86.1% |
| ov_SC06_014 | 2092 | 1676 | 0 | 2094 | 2453 | 85.4% |
| ov_SC06_015 | 2089 | 1676 | 0 | 2089 | 2421 | 86.3% |
| ov_SC06_016 | 2107 | 1676 | 0 | 2109 | 2549 | 82.7% |
| ov_SC06_018 | 2105 | 1679 | 0 | 2112 | 2665 | 79.2% |
| ov_SC06_020 | 2095 | 1678 | 0 | 2096 | 2518 | 83.2% |
| ov_SC06_022 | 2111 | 1676 | 0 | 2119 | 2642 | 80.2% |
| ov_SC06_024 | 2117 | 1676 | 0 | 2123 | 2667 | 79.6% |
| ov_SC06_025 | 2104 | 1676 | 0 | 2109 | 2572 | 82.0% |
| ov_SC06_027 | 2079 | 1676 | 0 | 2080 | 2408 | 86.4% |
| ov_SC06_029 | 2132 | 1676 | 0 | 2144 | 2662 | 80.5% |
| ov_SC06_030 | 2090 | 1676 | 0 | 2090 | 2456 | 85.1% |
| ov_SC06_032 | 2101 | 1677 | 0 | 2108 | 2658 | 79.3% |
| ov_SC06_033 | 2105 | 1677 | 0 | 2112 | 2631 | 80.3% |
| ov_SC07_000 | 2104 | 1680 | 0 | 2106 | 2521 | 83.5% |
| ov_SC07_001 | 2091 | 1676 | 0 | 2093 | 2454 | 85.3% |
| ov_SC07_002 | 2108 | 1676 | 0 | 2112 | 2579 | 81.9% |
| ov_SC07_008 | 2075 | 1676 | 0 | 2075 | 2386 | 87.0% |
| ov_SC07_009 | 2086 | 1676 | 0 | 2088 | 2430 | 85.9% |