Files
BFM-decomp/docs/duplicates.md
T
Drew T e6e05d727a fix(phase-30 S39/S7): regenerate main's 7-week-stale Ghidra sig — honest denominator, metrics re-baselined
main's sig was dated 2026-06-14 and covered only 1,525 of its 2,002 INCLUDE_ASM stubs: 477
stubs were INVISIBLE to the weighted metrics, so main was being graded against two-thirds of
itself and the fleet denominator was understated.

  tools/ghidra_mcp_stop.sh  (R23 - clean stop, "Save succeeded", releases the .rep lock)
  make sig-refresh BINARY=main  -> DumpFunctionSignatures.java, read-only, -noanalysis

  signatures      1,729 -> 2,205  (+476)
  stubs covered   1,525 -> 2,001  of 2,002   (1 still uncovered, named below)
  main .text ins  60,201 -> 79,510  (+19,309)

METRICS RE-BASELINED (a DENOMINATOR CORRECTION, not a regression -- the Phase-27 precedent,
where onboarding 4 hidden overlays honestly moved 68.9% -> 67.0%):

  instr-weighted   94.5% -> 94.4%   (12,419,169 / 13,160,961; numerator UNCHANGED)
  distinct-code    89.3% -> 89.0%   (5,029,454 / 5,654,184;   numerator UNCHANGED)
  fn-count         96.51% (unchanged -- it never read the sig)
  MAIN game-code   0.72% -> 0.55%   (436 / 79,510)

Both numerators are identical across the change; only the denominator grew. audit-digest OK.

CAVEAT UNCHANGED (R34): main still has no INDEPENDENT boundary oracle -- sig_image cannot sign a
PS-X EXE (header offset, interleaved islands), so main's function list rests on Ghidra alone and
audit-corpus cannot cross-check it. That is the open item in docs/second-oracle.md and part of
task #9's denominator work.

NOTE the sig itself is gitignored/regenerable, so this commit lands only the digests; a fresh
clone reproduces it with `make sig-refresh BINARY=main` (Ghidra required, MCP stopped).

MCP IS NOW DOWN (I stopped it for the project lock). The SessionStart hook restarts it next
session; run /mcp before any Ghidra work (R29).
2026-08-05 00:41:54 -06:00

5.2 KiB

EXE-wide duplicate function groups (generated by tools/dup_report.py)

sig: .run/sig.SLUS_007.26.jsonl sha1=46c735b8d1f514a95f8a2ba061cccf291f45a631 (2205 funcs, 1393 with nins>=8)

Match the representative once -> share the body to the duplicates (h_exact = guaranteed

byte-match; h_norm = same source, re-point any single address constant).

h_exact (byte-identical) — nins>=8: 14 groups, 15 redundant (collapsible)

score nins count representative duplicates
66 33 2 FUN_8001c044 (0x8001c044) 0x8001c0c8
33 11 3 SYS_OBJ_538 (0x80043948) 0x80060904 0x80060bc0
28 14 2 FUN_80014cf8 (0x80014cf8) 0x80014dec
22 11 2 FUN_80013f3c (0x80013f3c) 0x80017d98
22 11 2 FUN_80014c28 (0x80014c28) 0x80014dc0
20 10 2 TOC_OBJ_220 (0x800432d8) 0x80045918
20 10 2 def_cbready (0x800433c0) 0x800433e8
18 9 2 FUN_80014070 (0x80014070) 0x80015a2c
18 9 2 FUN_80014094 (0x80014094) 0x80015a50
18 9 2 FUN_8001599c (0x8001599c) 0x800159c0
18 9 2 FUN_80037004 (0x80037004) 0x80037334
18 9 2 VS_VTBP_OBJ_13C (0x80042290) 0x800459c4
18 9 2 ISO9660_OBJ_2A8 (0x8004561c) 0x8005b660
16 8 2 S_M_M_OBJ_2A8 (0x80042134) 0x8005ba70

h_norm (structural) — nins>=8: 61 groups, 91 redundant (collapsible)

score nins count representative duplicates
375 125 3 GS_133_OBJ_30 (0x80054544) 0x80054808 0x80054ae4
154 77 2 _card_read_data (0x800604c4) 0x800606d4
116 58 2 FUN_8001382c (0x8001382c) 0x800139c8
114 57 2 FUN_800134fc (0x800134fc) 0x80013694
114 57 2 FUN_80013b64 (0x80013b64) 0x80013cfc
98 49 2 FUN_800167f0 (0x800167f0) 0x80016978
80 8 10 FUN_80014128 (0x80014128) 0x80014148 0x80016a5c 0x80017274 0x800173bc 0x800174fc 0x8001a9d8 0x8003d630 0x8005d0d8 0x8005d118
76 19 4 FUN_8002a1b4 (0x8002a1b4) 0x8002a400 0x8002a670 0x8002a8e0
74 37 2 FUN_80011818 (0x80011818) 0x80011b7c
72 36 2 FUN_800623a4 (0x800623a4) 0x80062434
70 35 2 LIBMCRD_OBJ_DD0 (0x80060a38) 0x80060cf4
64 8 8 FUN_80027bf0 (0x80027bf0) 0x8002eeb8 0x8002fdc8 0x80046610 0x80053308 0x8005d0f8 0x8005fc98 0x80061a80
64 32 2 FUN_80031e94 (0x80031e94) 0x80031fc8
62 31 2 FUN_80029b4c (0x80029b4c) 0x80029bc8
56 28 2 VM_NOWON_OBJ_1C0 (0x80040af8) 0x80040b68
54 27 2 FUN_8002eff8 (0x8002eff8) 0x8002f064
52 13 4 FUN_8002a200 (0x8002a200) 0x8002a44c 0x8002a6bc 0x8002a92c
50 10 5 FUN_80013200 (0x80013200) 0x80013294 0x80013328 0x800133bc 0x80013450
50 25 2 RotMatrixX (0x80049f3c) 0x8004a27c
48 24 2 FUN_80012e0c (0x80012e0c) 0x80012fc8
44 22 2 FUN_8001534c (0x8001534c) 0x800153cc
42 21 2 FUN_80012b04 (0x80012b04) 0x80012cb8
40 20 2 OBJT2_OBJ_69C (0x80057730) 0x800577d4
38 19 2 FUN_80012c6c (0x80012c6c) 0x800130d0
38 19 2 S_M_UTIL_OBJ_2C (0x8003b37c) 0x8003b408
36 18 2 PRESET2_OBJ_550 (0x80056290) 0x80056324
33 11 3 SYS_OBJ_538 (0x80043948) 0x80060904 0x80060bc0
32 8 4 FUN_80016a3c (0x80016a3c) 0x80017254 0x8001739c 0x800174dc
32 16 2 SYS_OBJ_1964 (0x8005ab98) 0x8005ac64
32 16 2 _card_read_file (0x80060930) 0x80060bec
32 16 2 LIBMCRD_OBJ_D2C (0x80060994) 0x80060c50
30 10 3 FUN_8002ee90 (0x8002ee90) 0x8002efd0 0x80062360
28 14 2 FUN_80014cf8 (0x80014cf8) 0x80014dec
28 14 2 FUN_800167b8 (0x800167b8) 0x80016940
28 14 2 FUN_80017df8 (0x80017df8) 0x80017e30
28 14 2 PRESET2_OBJ_AF0 (0x80056830) 0x800568a8
28 14 2 SYS_OBJ_1FF4 (0x8005b228) 0x8005b460
27 9 3 FUN_80016eb0 (0x80016eb0) 0x800176f0 0x800178c8
27 9 3 FUN_80016ed4 (0x80016ed4) 0x80017714 0x800178ec
26 13 2 SYS_OBJ_19A4 (0x8005abd8) 0x8005aca4
26 13 2 LIBMCRD_OBJ_D9C (0x80060a04) 0x80060cc0
24 12 2 FUN_8001096c (0x8001096c) 0x80011320
24 8 3 FUN_80016ef8 (0x80016ef8) 0x80017758 0x80017910
24 8 3 SsUtReverbOff (0x800285ac) 0x8003a424 0x8003d96c
24 12 2 LIBMCRD_OBJ_D6C (0x800609d4) 0x80060c90
22 11 2 FUN_80013f3c (0x80013f3c) 0x80017d98
22 11 2 PRESET2_OBJ_4FC (0x8005623c) 0x8005636c
22 11 2 PRESET2_OBJ_AA8 (0x800567e8) 0x800568e0
22 11 2 OBJT2_OBJ_640 (0x800576d4) 0x80057824
20 10 2 VM_NO1_OBJ_264 (0x80040608) 0x80040bd8
20 10 2 TOC_OBJ_220 (0x800432d8) 0x80045918
20 10 2 def_cbready (0x800433c0) 0x800433e8
18 9 2 FUN_80014070 (0x80014070) 0x80015a2c
18 9 2 FUN_80014094 (0x80014094) 0x80015a50
18 9 2 FUN_8001599c (0x8001599c) 0x800159c0
18 9 2 FUN_8001cfb8 (0x8001cfb8) 0x8001d050
18 9 2 FUN_80037004 (0x80037004) 0x80037334
18 9 2 VS_VTBP_OBJ_13C (0x80042290) 0x800459c4
18 9 2 ISO9660_OBJ_2A8 (0x8004561c) 0x8005b660
18 9 2 LIBMCRD_OBJ_D08 (0x80060970) 0x80060c2c
16 8 2 S_M_M_OBJ_2A8 (0x80042134) 0x8005ba70