Files
BFM-decomp/docs/progress.fleet.md
T
Drew T 2c4e2344da fix(phase-28 T5): progress.py — #if 0 blindness + the len()-sum; resident 123/146 -> 122/145
R35: fix the instrument before planting a flag on its denominator.

- #if 0 BLINDNESS: classify() knew `#ifdef NON_MATCHING` (:425) but not `#if 0`, so a dead
  analysis body was read as a live definition AND its real INCLUDE_ASM stub counted separately —
  the SAME function in BOTH `real` and `stubs`. Live case: resident.c:868-925 wraps a full
  void func_800D00E4(s32){...} in #if 0 (its jtbl dossier) and re-declares the stub at :926.
  Now the block is skipped entirely: dead code is neither matched nor stubbed.

- THE len()-SUM (the dual defect): `placed` was a set union, so it caught a function in NO bucket
  — but `matchable` SUMMED len()s, so a function in TWO buckets counted twice and nothing
  complained. matchable/byteident are now SET unions, plus a new OVER-coverage assertion that
  fails loudly if any fn lands in multiple buckets. R32 means both directions: nothing missing,
  nothing double-counted.

- NEGATIVE CONTROL (the fix must change an answer the old tool gave):
    resident REAL 123 -> 122 | matchable 146 -> 145 | 85.62% -> 85.52% | func_800D00E4 no longer
    double-counted. FLEET instr 68.9% UNCHANGED (no #if 0 in the overlays) — the fix is scoped.

- FINDING (logged for T7's audit-binaries, does NOT block the flag-plant): the two INDEPENDENT
  oracles now agree exactly at 144 — corpus (21 stubs + 123 matched, derived from the tree) and
  sig_image (the 2nd oracle) — with EMPTY set difference both ways. progress.py still reports 145
  because it counts func_800CEDFC and func_800D33E0, which are DEFINED in resident.c but absent
  from sig_image. 0x800CEDFC is the resident's vram base +4 (the first function, code starts at
  file offset 0x4 after the leading data word), yet make audit-corpus reports 0 PHANTOM +
  0 TRUNCATED. Either sig_image has a boundary blind spot or those defs are not image functions.
  progress.py's text-scanning classify() is exactly the re-parsing R33 says should be DERIVED from
  corpus instead — a real refactor, logged not rushed.
  The flag-plant claim is unaffected: it rests on corpus.stubs('resident') == 21 (tree-derived,
  verified 5 ways), not on the contested denominator.
2026-07-16 00:17:57 -06:00

9.0 KiB
Raw Blame History

BFM FLEET matching progress (generated by tools/progress.py --fleet — authoritative)

140 binaries: main + resident + 138 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: 296905 / 353722 = 83.94% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay) FLEET instr-weighted : 9017152 / 13081451 = 68.9% (shipped .text across resident+138 overlays; the decomp.dev-DISPLAY number) FLEET distinct-code(uniq): 2757078 / 5574674 = 49.5% (53528/87459 unique fns; the DISTINCT-RE number) MAIN game-code weighted : 436 / 60201 = 0.7% (Phase-27 T10; SEPARATE — LINKED-excluding Ghidra sig dated 2026-06-14, PROVISIONAL until a fresh/complete main sig; NOT folded into the fleet number)

FLEET REAL substantive : 295050 (of which dedup-shared 233341 via 1840 groups / 233385 instances) FLEET LINKED PsyQ objs : 959 FLEET NON_MATCHING : 7 (0 in any default build — G4) FLEET INCLUDE_ASM stubs : 56810 FLEET matchable : 353722

binary REAL shared LINKED byte-ident matchable byte-ident %
main 54 2 959 1055 2096 50.3%
resident 122 0 0 124 145 85.5%
ov_SC01_000 2123 1698 0 2123 2403 88.3%
ov_SC01_001 2128 1698 0 2130 2466 86.4%
ov_SC01_004 2120 1689 0 2121 2414 87.9%
ov_SC01_005 2150 1711 0 2150 2503 85.9%
ov_SC01_006 2150 1711 0 2150 2503 85.9%
ov_SC01_008 2120 1689 0 2122 2426 87.5%
ov_SC01_009 2144 1690 0 2145 2507 85.6%
ov_SC01_074 2124 1690 0 2126 2425 87.7%
ov_SC01_077 2360 1658 0 2362 2585 91.4%
ov_SC01_080 2160 1693 0 2160 2512 86.0%
ov_SC01_084 2169 1693 0 2174 2579 84.3%
ov_SC02_000 2215 1728 0 2215 2683 82.6%
ov_SC02_003 2215 1728 0 2215 2683 82.6%
ov_SC02_004 2128 1693 0 2128 2401 88.6%
ov_SC02_005 2235 1689 0 2245 2927 76.7%
ov_SC02_011 2242 1696 0 2253 2893 77.9%
ov_SC02_015 2130 1695 0 2130 2414 88.2%
ov_SC02_016 2159 1695 0 2162 2545 85.0%
ov_SC02_017 2203 1695 0 2211 2732 80.9%
ov_SC02_021 2136 1695 0 2136 2437 87.6%
ov_SC02_026 2149 1693 0 2155 2572 83.8%
ov_SC02_027 2173 1693 0 2182 2692 81.1%
ov_SC02_028 2174 1693 0 2184 2701 80.9%
ov_SC02_031 2161 1694 0 2166 2562 84.5%
ov_SC02_035 2136 1693 0 2139 2520 84.9%
ov_SC02_039 2122 1693 0 2122 2416 87.8%
ov_SC02_041 2156 1693 0 2159 2561 84.3%
ov_SC03_001 2255 1694 0 2272 2869 79.2%
ov_SC03_002 2183 1698 0 2198 2631 83.5%
ov_SC03_003 2131 1693 0 2132 2423 88.0%
ov_SC03_006 2194 1699 0 2203 2767 79.6%
ov_SC03_007 2175 1693 0 2179 2623 83.1%
ov_SC03_010 2138 1693 0 2138 2470 86.6%
ov_SC03_011 2146 1693 0 2152 2527 85.2%
ov_SC03_012 2123 1693 0 2124 2406 88.3%
ov_SC03_013 2143 1693 0 2143 2492 86.0%
ov_SC03_014 2199 1718 0 2199 2685 81.9%
ov_SC03_015 2200 1718 0 2200 2685 81.9%
ov_SC03_023 2129 1693 0 2130 2435 87.5%
ov_SC03_024 2187 1698 0 2194 2641 83.1%
ov_SC03_028 2169 1693 0 2173 2664 81.6%
ov_SC03_029 2170 1695 0 2180 2644 82.5%
ov_SC03_030 2144 1698 0 2146 2495 86.0%
ov_SC03_031 2141 1693 0 2144 2514 85.3%
ov_SC03_089 2155 1693 0 2162 2581 83.8%
ov_SC03_090 2157 1693 0 2165 2625 82.5%
ov_SC03_091 2160 1693 0 2168 2640 82.1%
ov_SC03_092 2171 1693 0 2183 2587 84.4%
ov_SC03_093 2147 1693 0 2151 2563 83.9%
ov_SC03_094 2141 1693 0 2147 2577 83.3%
ov_SC03_095 2132 1693 0 2135 2474 86.3%
ov_SC03_096 2132 1693 0 2135 2465 86.6%
ov_SC03_097 2160 1693 0 2167 2603 83.3%
ov_SC03_098 2139 1693 0 2142 2541 84.3%
ov_SC03_099 2133 1693 0 2136 2504 85.3%
ov_SC03_100 2142 1693 0 2146 2539 84.5%
ov_SC03_101 2143 1693 0 2147 2528 84.9%
ov_SC03_102 2135 1693 0 2138 2492 85.8%
ov_SC03_103 2138 1695 0 2141 2510 85.3%
ov_SC03_104 2163 1693 0 2170 2616 83.0%
ov_SC03_105 2157 1693 0 2164 2597 83.3%
ov_SC03_108 2126 1693 0 2126 2443 87.0%
ov_SC03_109 2127 1693 0 2129 2424 87.8%
ov_SC03_110 2132 1693 0 2132 2468 86.4%
ov_SC03_111 2142 1693 0 2145 2510 85.5%
ov_SC03_112 2137 1695 0 2139 2526 84.7%
ov_SC03_113 2130 1695 0 2133 2468 86.4%
ov_SC03_114 2120 1693 0 2122 2415 87.9%
ov_SC03_115 2137 1693 0 2139 2472 86.5%
ov_SC03_116 2127 1693 0 2130 2438 87.4%
ov_SC03_117 2153 1693 0 2159 2557 84.4%
ov_SC03_118 2201 1717 0 2202 2685 82.0%
ov_SC03_119 2198 1717 0 2199 2685 81.9%
ov_SC03_121 2133 1693 0 2136 2459 86.9%
ov_SC03_124 2212 1689 0 2232 2741 81.4%
ov_SC03_125 2170 1693 0 2182 2588 84.3%
ov_SC03_126 2132 1695 0 2132 2423 88.0%
ov_SC04_000 2149 1697 0 2158 2546 84.8%
ov_SC04_002 2164 1693 0 2168 2636 82.2%
ov_SC04_003 2142 1693 0 2146 2502 85.8%
ov_SC04_004 2151 1693 0 2153 2558 84.2%
ov_SC04_005 2159 1693 0 2165 2612 82.9%
ov_SC04_006 2132 1693 0 2134 2454 87.0%
ov_SC04_007 2152 1693 0 2156 2569 83.9%
ov_SC04_008 2122 1693 0 2122 2415 87.9%
ov_SC04_009 2138 1693 0 2141 2441 87.7%
ov_SC04_010 2129 1693 0 2130 2419 88.1%
ov_SC04_011 2186 1693 0 2192 2803 78.2%
ov_SC04_012 2126 1693 0 2127 2420 87.9%
ov_SC04_015 2188 1694 0 2199 2611 84.2%
ov_SC04_016 2129 1693 0 2131 2440 87.3%
ov_SC04_018 2239 1728 0 2239 2857 78.4%
ov_SC04_019 2244 1728 0 2244 2857 78.5%
ov_SC04_020 2157 1693 0 2169 2567 84.5%
ov_SC04_021 2133 1695 0 2133 2423 88.0%
ov_SC05_000 2130 1697 0 2133 2422 88.1%
ov_SC05_001 2153 1693 0 2158 2574 83.8%
ov_SC05_002 2134 1693 0 2137 2442 87.5%
ov_SC05_003 2131 1693 0 2132 2481 85.9%
ov_SC05_004 2127 1693 0 2129 2464 86.4%
ov_SC05_005 2134 1693 0 2135 2491 85.7%
ov_SC05_006 2126 1693 0 2126 2430 87.5%
ov_SC05_007 2136 1693 0 2141 2482 86.3%
ov_SC05_008 2153 1693 0 2155 2543 84.7%
ov_SC05_009 2131 1693 0 2135 2438 87.6%
ov_SC05_010 2156 1693 0 2160 2588 83.5%
ov_SC05_011 2129 1693 0 2130 2409 88.4%
ov_SC05_017 2235 1690 0 2246 2842 79.0%
ov_SC05_018 2183 1693 0 2196 2673 82.2%
ov_SC05_019 2133 1695 0 2133 2423 88.0%
ov_SC06_000 2193 1702 0 2196 2691 81.6%
ov_SC06_006 2149 1693 0 2150 2511 85.6%
ov_SC06_008 2157 1695 0 2163 2542 85.1%
ov_SC06_010 2141 1693 0 2146 2517 85.3%
ov_SC06_011 2136 1693 0 2140 2468 86.7%
ov_SC06_013 2130 1693 0 2131 2425 87.9%
ov_SC06_014 2135 1693 0 2137 2453 87.1%
ov_SC06_015 2132 1693 0 2132 2421 88.1%
ov_SC06_016 2151 1693 0 2153 2549 84.5%
ov_SC06_018 2146 1696 0 2153 2665 80.8%
ov_SC06_020 2139 1695 0 2140 2518 85.0%
ov_SC06_022 2152 1693 0 2160 2642 81.8%
ov_SC06_024 2159 1693 0 2165 2667 81.2%
ov_SC06_025 2151 1693 0 2156 2572 83.8%
ov_SC06_027 2120 1693 0 2121 2408 88.1%
ov_SC06_029 2175 1693 0 2187 2662 82.2%
ov_SC06_030 2132 1693 0 2132 2456 86.8%
ov_SC06_032 2143 1694 0 2150 2658 80.9%
ov_SC06_033 2146 1694 0 2153 2631 81.8%
ov_SC07_000 2147 1697 0 2149 2521 85.2%
ov_SC07_001 2133 1693 0 2135 2454 87.0%
ov_SC07_002 2160 1693 0 2164 2579 83.9%
ov_SC07_006 1545 1543 0 1625 2456 66.2%
ov_SC07_007 1546 1544 0 1630 2614 62.4%
ov_SC07_008 2117 1693 0 2117 2386 88.7%
ov_SC07_009 2127 1693 0 2129 2430 87.6%
ov_SC07_010 1545 1544 0 1628 2526 64.4%
ov_SC07_011 1545 1543 0 1625 2450 66.3%