S2.1 — Deterministic milestone-count termination for PRM construction

Superseded 2026-10-08 by S4.1 — PRM milestone budget (E4, 0.9.0) — same intent, redesigned as an additive max_milestones budget in the senior-engineer grilling. Cancelled, not done.

Intent

PRM construction terminates on wall-clock timeout only. Roadmap density therefore depends on machine speed and load — and in oxmpl-py / oxmpl-js, every validity check crosses the FFI/wasm boundary (~122k calls/s measured on pyo3). This caused a deterministic failure in oxmpl-py/tests/test_prm_so3ss.py and a load-dependent flake in oxmpl-js/tests/test_prm_compound.test.js (both root-caused 2026-09-22 during S1.4 verification).

Interim mitigation already merged with S1.4 (in-test set_longest_valid_segment_fraction(0.25), ~4–5× headroom) — but the wall-clock dependence class is NOT eliminated. A slower CI runner can still starve the budget and fail the release gate.

Acceptance criteria

Notes