mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-04 00:20:10 -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
phase-ends/ — the living record
PhaseEnd_Phase[N].md— written at each phase boundary (format defined inPROJECT_CONTEXT.md). Append-only history: build log, deviations, commit message, rules added, changelog. Never deleted.CURRENT_PHASE.md— the in-phase autonomous log: approved phase plan, per-task checkboxes, current task pointer, blockers. Created at phase start, updated after every task, absorbed into the PhaseEnd file and deleted at phase close. This is the crash/compaction recovery point.- Sessions read
PROJECT_CONTEXT.md, then everyPhaseEnd_*.mdin numeric order, thenCURRENT_PHASE.md(if present) — in that order, every session.