Files
BFM-decomp/docs/progress.resident.md
T
Drew T 876dc7f053 feat(phase-28 T5): resident 21 -> 14 stubs (7 banked, 90.34%) + fix match_one's fake isolation
Ultracode wave: 16 isolated drafters over the resident's non-jtbl stubs (the 5 jtbl deferred —
they need the rodata-island carve, §53). Drafts only; the whole-binary byte-gate arbitrated after.

- BANKED 7/16, byte-gated: func_800CEFD0(77) func_800D0D7C(45) func_800D1B80(22) func_800D1E28(37)
  func_800D1FC8(62) func_800D29F8(172) func_800D2D10(39).
  Resident REAL 122 -> 129, stubs 21 -> 14, byte-ident 124/145 (85.52%) -> 131/145 (90.34%).
  FLEET instr 9017152 -> 9017606 (+454 ins). R22 make clean && extract-all && check-all ->
  140 passed, 0 failed of 140 (the first R22 was killed by a terminal crash and RE-RUN, not assumed).
  Ground truth on 14 agrees 3 ways: source grep, splat-emitted stub .s count, progress.py.

- §52b's LAW, MEASURED AGAIN INDEPENDENTLY: the agents self-reported 11 match_one MATCH; the
  whole-binary gate banked 7 (64%). All 4 blocked MATCHes died on `conflicting types`
  (D_8010EDEC / D_80115110 / func_800D1984 / cdFileLocTable) — the loose-typing def-side wall, NOT
  codegen. gate_stage's recovery banked 0/5 on them. A match_one MATCH is a CANDIDATE (G3/P9).

- FIX — match_one's isolation was FAKE, and its own docstring was the false spec. It promises
  "Fully isolated (own temp dir) so many run in PARALLEL with no shared build -- a real asm-differ
  loop for an agent to iterate against", while `--work` defaulted to the SHARED '.run/match': every
  concurrent caller compiled into the same t.c/t.o. FOUND BY AN AGENT MID-WAVE, the only way it can
  be found — it read another agent's function out of its own scratch ("found another agent's
  func_800D2650 in my t.c") and reported it. Every other agent steered by a loop that could hand it
  someone else's compile: a CONFIDENT WRONG verdict, worse than a crash. Default is now a private
  .run/match/<fn>.<pid>; the default IS the promise. (Some agents had already worked around it by
  passing --work themselves.) The byte-gate was never at risk — it is the sole arbiter — but the
  iteration loop the agents steer by absolutely was.

- The 14 remaining: 5 PLUMBING (loose-typing) + 4 DIFF (genuine codegen: func_800D2650 close=4,
  func_800CFAD0 close=5, func_800D0E30 close=12, func_800D27DC close=48) + 5 jtbl deferred.
  Dossier next (T5b) — the agents' per-function residual analyses are the durable asset (R30).
2026-07-16 01:41:57 -06:00

19 lines
2.4 KiB
Markdown

# BFM matching progress (generated by tools/progress.py — authoritative)
REAL substantive matches : 129 <- the Gen1-exit >=25 bar counts THIS
LINKED real PsyQ objects : 0 <- byte-identical via linked SDK objects
NON_MATCHING (near-miss) : 0
splat-auto empty no-ops : 2
INCLUDE_ASM stubs : 14
data blobs (excluded) : 0
----------------------------------------
matchable functions : 145
REAL / matchable : 129 / 145 = 88.97%
byte-identical/ matchable: 131 / 145 = 90.34% (REAL+LINKED+empties)
LINKED subsegs: (0 fns)
REAL matches: DsMix func_800CEDFC func_800CEE40 func_800CEE84 func_800CEF04 func_800CEF34 func_800CEF5C func_800CEFB0 func_800CEFD0 func_800CF104 func_800CF238 func_800CF370 func_800CF398 func_800CF3B8 func_800CF47C func_800CF4D4 func_800CF510 func_800CF584 func_800CF5D4 func_800CF628 func_800CF714 func_800CF764 func_800CF7A4 func_800CF804 func_800CF818 func_800CF82C func_800CF840 func_800CF854 func_800CF864 func_800CF8B4 func_800CF8CC func_800CF8E4 func_800CF94C func_800CF990 func_800CFBBC func_800CFBCC func_800CFBE8 func_800CFBF8 func_800CFC5C func_800CFD68 func_800CFDA4 func_800CFDE8 func_800D02C0 func_800D0588 func_800D05E8 func_800D0630 func_800D065C func_800D0694 func_800D06CC func_800D0C48 func_800D0C74 func_800D0CA0 func_800D0CE0 func_800D0D7C func_800D0EC4 func_800D0F0C func_800D0F4C func_800D0F8C func_800D0FE0 func_800D1000 func_800D1028 func_800D1054 func_800D1078 func_800D109C func_800D10C8 func_800D10EC func_800D11F0 func_800D1714 func_800D1724 func_800D1734 func_800D1744 func_800D1754 func_800D17B8 func_800D185C func_800D18DC func_800D1938 func_800D19DC func_800D19F0 func_800D1B10 func_800D1B80 func_800D1BF8 func_800D1D24 func_800D1D94 func_800D1DB0 func_800D1E28 func_800D1EBC func_800D1F58 func_800D1F90 func_800D1FC8 func_800D20C0 func_800D21C4 func_800D222C func_800D2294 func_800D22E4 func_800D2318 func_800D23D0 func_800D2468 func_800D25FC func_800D2624 func_800D29F8 func_800D2CA8 func_800D2D10 func_800D2DAC func_800D2DFC func_800D2E20 func_800D2E6C func_800D2EE8 func_800D2F0C func_800D2F48 func_800D2F8C func_800D2FB0 func_800D2FEC func_800D302C func_800D30A8 func_800D30C8 func_800D3104 func_800D3120 func_800D319C func_800D31C0 func_800D31FC func_800D3238 func_800D3274 func_800D32D4 func_800D3328 func_800D3348 func_800D3384 func_800D3398 func_800D33B8 func_800D33E0
NON_MATCHING:
build SHA1: 8e17e02ff8954d07c979449198f7e1645046b353 (byte-identical)