mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 21:36:06 -04:00
366f7e4c7f
Add a sig-based reach oracle + --min-reach N to lora_grind so the mass-run can prefer SHARED functions (one bank propagates x reach — the fleet-% multiplier). The oracle reads the same .run/sig.ov_*.jsonl dedup_propagate uses (validated: 0 mismatch over 60 stubs + the func_8017CE24=2 ground truth), so a reach>=N target is exactly one dedup_propagate will stamp x reach after the bank. Bounded reach>=2 mass-run (ov_SC01_000, 15 shared <=15-ins stubs): 0/15 banked, vs the reach-1-heavy spot-run's 7/15. The model is weakest exactly on reach>=2 (shared) code: (1) the corpus skipped the shared DEFINE_func macro bodies (export_pairs reads only src/ defs -> 96.6% of the corpus is overlay-unique), and (2) the shared engine fns are the harder regalloc/schedule residuals. So reach>=2 model-only is NOT a fleet lever by itself. BUT the reach>=2 drafts are high-value FUEL: 5/15 are close<=3 reach-134 near-misses (3x close=1: func_8012E27C/BF4C/AD64) -> x134 each if closed. The real lever is reach>=2 draft -> permuter-grinder close (x134), which needs the SAME per-binary fix T7 applied to lora_grind: grinder.py calls run_gate with no binary (-> 077) and the backlog stores no binary field. That two-part fix is the next step. byte-neutral: check-all 136/136. - docs/gen2-mips-matching-model.md: T9 RESULT - phase-ends/CURRENT_PHASE.md: T9 done; next = grinder per-binary fix, then corpus-v3