Files
BFM-decomp/docs/progress.fleet.md
T
Drew T 56e2d808ab feat(phase-29): T56 — wire the tu-scope lever into family_sweep; func_80144090 0/136 -> 136/136
T55's two-part next step as one job. +20,944 instructions banked.

1. THE LEVER WAS UNREACHABLE FROM THE PATH MOST FAMILIES USE (cookbook §107)
   §103 was wired into jtbl_family_bank only (T53), and that tool runs for has_mid_jr families.
   Everything else sweeps through family_sweep, which gates via PLAIN harvest_verify by design — so
   the lever existed, was byte-proven, and most families could not reach it. The symptom was
   indistinguishable from a compiler wall: func_80144090 swept 0/136 with `conflicting types for
   D_800A651C`.
   Why it does not violate the plain-harvest_verify rule: that rule exists because gate_stage's
   transforms PERTURB A CORRECT DRAFT (§19/T3). The tu-scope never touches the draft — it moves a
   DECLARATION IN THE TARGET TU. The test is not "is it a transform" but "does it change the draft?"
   Reused the existing undo instead of inventing one: family_sweep already snapshots TUs it edits at
   staging time (--normalize-self-decls) and reverts on a final MISMATCH (not byte-neutral) AND on a
   zero-bank group (§61 undo law — no dead diff). The tu-scope shares that dict and inherits both
   backstops; renamed nsd_snapshots -> tu_snapshots. Default ON with --no-tu-scope to A/B it (the T24
   --allow-pins precedent): byte-neutral by construction, a no-op when nothing collides, auto-reverted
   when it buys nothing.

2. THE DUPLICATE-DECL REFUSAL RELAXED — AND IT DID NOT MATTER
   scope_tu_externs refused N>1 file-scope decls as "ambiguous"; duplicate-IDENTICAL externs are legal
   C, so N identical decls are one decl written N times. Now compares whitespace-collapsed forms and
   refuses only on genuine disagreement. MEASURED, and my hypothesis was WRONG: D_800B9A02 is 3 decls
   in 2 DIFFERENT forms, so it was correctly refused all along — the family banked 136/136 without it.

RESULT: func_80144090 0/136 -> 136/136, 0 failed, with NO change to any draft.

GATES: R22 clean-fleet 140 passed, 0 failed of 140. tools-health OK (corpus 0 PHANTOM + 0 TRUNCATED,
cdecl, audit-binaries, report/lint/dedup 1886/0). 0 NON_MATCHING (G4).

METRICS (reconciled against make report):
  instr-weighted  85.7% -> 85.8%   11258063 -> 11279007 = +20,944 ins
  fn-count       90.65% -> 90.69%  320656 -> 320792 = +136
  distinct-code   76.4% -> 76.4%   +0 (67812 unique, UNCHANGED)
FLAGGING the third row rather than explaining it away: 136 banked functions moved distinct-code by
ZERO, where T52's 132 moved it by +125, and both families are classed PURE. I do not have a verified
cause and will not invent one — either a real property of this family or a gap in the metric. Worth
one probe before that number is quoted again.
2026-07-28 20:15:11 -06:00

9.1 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: 320792 / 353720 = 90.69% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay) FLEET instr-weighted : 11279007 / 13141652 = 85.8% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number) FLEET distinct-code(uniq): 4305392 / 5634875 = 76.4% (67812/87459 unique fns; the DISTINCT-RE number) MAIN game-code weighted : 436 / 60201 = 0.7% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-06-14; 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: 11278571 / 13081451 = 86.2%)

FLEET REAL substantive : 318937 (of which dedup-shared 239530 via 1886 groups / 239604 instances) FLEET LINKED PsyQ objs : 959 FLEET NON_MATCHING : 7 (0 in any default build — G4) FLEET INCLUDE_ASM stubs : 32921 FLEET matchable : 353720

binary REAL shared LINKED byte-ident matchable byte-ident %
main 54 2 959 1055 2096 50.3%
resident 129 0 0 131 145 90.3%
ov_SC01_000 2285 1742 0 2285 2403 95.1%
ov_SC01_001 2290 1743 0 2292 2466 92.9%
ov_SC01_004 2280 1734 0 2281 2414 94.5%
ov_SC01_005 2310 1757 0 2310 2503 92.3%
ov_SC01_006 2310 1757 0 2310 2503 92.3%
ov_SC01_008 2280 1734 0 2282 2426 94.1%
ov_SC01_009 2306 1735 0 2307 2507 92.0%
ov_SC01_074 2284 1735 0 2286 2425 94.3%
ov_SC01_077 2464 1702 0 2466 2585 95.4%
ov_SC01_080 2322 1738 0 2322 2512 92.4%
ov_SC01_084 2329 1738 0 2334 2579 90.5%
ov_SC02_000 2382 1773 0 2382 2683 88.8%
ov_SC02_003 2382 1773 0 2382 2683 88.8%
ov_SC02_004 2288 1738 0 2288 2401 95.3%
ov_SC02_005 2396 1734 0 2406 2927 82.2%
ov_SC02_011 2409 1741 0 2420 2893 83.7%
ov_SC02_015 2290 1740 0 2290 2414 94.9%
ov_SC02_016 2324 1740 0 2327 2545 91.4%
ov_SC02_017 2368 1740 0 2376 2732 87.0%
ov_SC02_021 2296 1740 0 2296 2437 94.2%
ov_SC02_026 2311 1738 0 2317 2572 90.1%
ov_SC02_027 2334 1738 0 2343 2692 87.0%
ov_SC02_028 2336 1738 0 2346 2701 86.9%
ov_SC02_031 2322 1739 0 2327 2562 90.8%
ov_SC02_035 2297 1738 0 2300 2520 91.3%
ov_SC02_039 2281 1738 0 2281 2416 94.4%
ov_SC02_041 2319 1738 0 2322 2561 90.7%
ov_SC03_001 2416 1739 0 2433 2869 84.8%
ov_SC03_002 2342 1743 0 2357 2631 89.6%
ov_SC03_003 2291 1738 0 2292 2423 94.6%
ov_SC03_006 2359 1744 0 2368 2767 85.6%
ov_SC03_007 2336 1738 0 2340 2623 89.2%
ov_SC03_010 2299 1738 0 2299 2471 93.0%
ov_SC03_011 2305 1738 0 2311 2527 91.5%
ov_SC03_012 2283 1738 0 2284 2406 94.9%
ov_SC03_013 2304 1738 0 2304 2493 92.4%
ov_SC03_014 2362 1763 0 2362 2685 88.0%
ov_SC03_015 2362 1763 0 2362 2685 88.0%
ov_SC03_023 2290 1738 0 2291 2435 94.1%
ov_SC03_024 2350 1743 0 2357 2641 89.2%
ov_SC03_028 2330 1738 0 2334 2664 87.6%
ov_SC03_029 2332 1740 0 2342 2644 88.6%
ov_SC03_030 2305 1743 0 2307 2495 92.5%
ov_SC03_031 2301 1738 0 2304 2514 91.6%
ov_SC03_089 2318 1738 0 2325 2581 90.1%
ov_SC03_090 2319 1738 0 2327 2625 88.6%
ov_SC03_091 2322 1738 0 2330 2640 88.3%
ov_SC03_092 2332 1738 0 2344 2587 90.6%
ov_SC03_093 2308 1738 0 2312 2563 90.2%
ov_SC03_094 2303 1738 0 2309 2577 89.6%
ov_SC03_095 2293 1738 0 2296 2474 92.8%
ov_SC03_096 2293 1738 0 2296 2465 93.1%
ov_SC03_097 2323 1738 0 2330 2603 89.5%
ov_SC03_098 2301 1738 0 2304 2541 90.7%
ov_SC03_099 2294 1738 0 2297 2504 91.7%
ov_SC03_100 2304 1738 0 2308 2539 90.9%
ov_SC03_101 2304 1738 0 2308 2528 91.3%
ov_SC03_102 2297 1738 0 2300 2492 92.3%
ov_SC03_103 2300 1740 0 2303 2510 91.8%
ov_SC03_104 2326 1738 0 2333 2616 89.2%
ov_SC03_105 2317 1738 0 2324 2597 89.5%
ov_SC03_108 2284 1738 0 2284 2443 93.5%
ov_SC03_109 2288 1738 0 2290 2424 94.5%
ov_SC03_110 2292 1738 0 2292 2468 92.9%
ov_SC03_111 2303 1738 0 2306 2510 91.9%
ov_SC03_112 2299 1740 0 2301 2526 91.1%
ov_SC03_113 2292 1740 0 2295 2468 93.0%
ov_SC03_114 2281 1738 0 2283 2415 94.5%
ov_SC03_115 2298 1738 0 2300 2472 93.0%
ov_SC03_116 2289 1738 0 2292 2438 94.0%
ov_SC03_117 2316 1738 0 2322 2557 90.8%
ov_SC03_118 2362 1762 0 2363 2685 88.0%
ov_SC03_119 2361 1762 0 2362 2685 88.0%
ov_SC03_121 2296 1738 0 2299 2459 93.5%
ov_SC03_124 2374 1734 0 2394 2741 87.3%
ov_SC03_125 2330 1738 0 2342 2588 90.5%
ov_SC03_126 2293 1740 0 2293 2423 94.6%
ov_SC04_000 2309 1742 0 2318 2546 91.0%
ov_SC04_002 2328 1738 0 2332 2636 88.5%
ov_SC04_003 2304 1738 0 2308 2502 92.2%
ov_SC04_004 2313 1738 0 2315 2558 90.5%
ov_SC04_005 2323 1738 0 2329 2612 89.2%
ov_SC04_006 2293 1738 0 2295 2454 93.5%
ov_SC04_007 2317 1738 0 2321 2569 90.3%
ov_SC04_008 2285 1738 0 2285 2415 94.6%
ov_SC04_009 2300 1738 0 2303 2441 94.3%
ov_SC04_010 2290 1738 0 2291 2419 94.7%
ov_SC04_011 2348 1738 0 2354 2803 84.0%
ov_SC04_012 2287 1738 0 2288 2420 94.5%
ov_SC04_015 2352 1739 0 2363 2611 90.5%
ov_SC04_016 2290 1738 0 2292 2440 93.9%
ov_SC04_018 2400 1773 0 2400 2857 84.0%
ov_SC04_019 2406 1773 0 2406 2857 84.2%
ov_SC04_020 2317 1738 0 2329 2567 90.7%
ov_SC04_021 2294 1740 0 2294 2423 94.7%
ov_SC05_000 2291 1742 0 2294 2422 94.7%
ov_SC05_001 2313 1738 0 2318 2574 90.1%
ov_SC05_002 2296 1738 0 2299 2442 94.1%
ov_SC05_003 2293 1738 0 2294 2481 92.5%
ov_SC05_004 2289 1738 0 2291 2464 93.0%
ov_SC05_005 2294 1738 0 2295 2491 92.1%
ov_SC05_006 2287 1738 0 2287 2430 94.1%
ov_SC05_007 2297 1738 0 2302 2482 92.7%
ov_SC05_008 2314 1738 0 2316 2543 91.1%
ov_SC05_009 2293 1738 0 2297 2438 94.2%
ov_SC05_010 2320 1738 0 2324 2588 89.8%
ov_SC05_011 2289 1738 0 2290 2409 95.1%
ov_SC05_017 2396 1735 0 2407 2842 84.7%
ov_SC05_018 2343 1738 0 2356 2673 88.1%
ov_SC05_019 2294 1740 0 2294 2423 94.7%
ov_SC06_000 2358 1747 0 2361 2691 87.7%
ov_SC06_006 2310 1738 0 2311 2511 92.0%
ov_SC06_008 2330 1740 0 2336 2542 91.9%
ov_SC06_010 2310 1738 0 2315 2517 92.0%
ov_SC06_011 2298 1738 0 2302 2468 93.3%
ov_SC06_013 2292 1738 0 2293 2425 94.6%
ov_SC06_014 2298 1738 0 2300 2453 93.8%
ov_SC06_015 2295 1738 0 2295 2421 94.8%
ov_SC06_016 2313 1738 0 2315 2549 90.8%
ov_SC06_018 2323 1740 0 2330 2665 87.4%
ov_SC06_020 2302 1740 0 2303 2518 91.5%
ov_SC06_022 2321 1738 0 2329 2642 88.2%
ov_SC06_024 2331 1738 0 2337 2667 87.6%
ov_SC06_025 2315 1738 0 2320 2572 90.2%
ov_SC06_027 2280 1738 0 2281 2408 94.7%
ov_SC06_029 2341 1738 0 2353 2662 88.4%
ov_SC06_030 2294 1738 0 2294 2456 93.4%
ov_SC06_032 2316 1739 0 2323 2658 87.4%
ov_SC06_033 2318 1739 0 2325 2631 88.4%
ov_SC07_000 2309 1742 0 2311 2521 91.7%
ov_SC07_001 2293 1738 0 2295 2454 93.5%
ov_SC07_002 2321 1738 0 2325 2579 90.2%
ov_SC07_006 2091 1555 0 2171 2456 88.4%
ov_SC07_007 2086 1586 0 2170 2613 83.0%
ov_SC07_008 2278 1738 0 2278 2386 95.5%
ov_SC07_009 2287 1738 0 2289 2430 94.2%
ov_SC07_010 2119 1608 0 2202 2524 87.2%
ov_SC07_011 2086 1585 0 2166 2449 88.4%