- sweepOracle: Math.abs(deltaS) > ORACLE_EPSILON_S replaces the one-sided
'seconds > optimal + eps' check — a result FASTER than the Dijkstra
oracle (the traversal-law-break signature, e.g. a oneway relaxed) is
now a violation, stamped ORACLE-MISMATCH, never a pass
- worstDeltaPct tracks MAGNITUDE not sign — a -40% law break moves it
- pass gate: suboptimal === 0 && oracleMismatch === 0 && classBreaks === 0
- header gate description + exit codes updated: the check is |Δ| in both
directions; GATE FAIL names both violation classes; GATE PASS reads
0/N |Δ| violations
- row-level signed Δ printout unchanged (sign/direction reporting kept)
measure-astar-oracle-sweep.mjs (maintainer-time, route-corpus law: exported
core sweepOracle + CLI guard, print-the-measurement, honest exit codes):
- FRESH seeded cross-metro pairs via measure-optimality-baseline.mjs's
exported generateCrossMetroPairs core — seed 0x08f1, deliberately NOT
the D-03 corpus seed 0x08a1, so this sweep never measures the corpus
- compared-pair law: one 3x-oversampled draw, consumed in order until 200
COMPARED pairs (reachable + null-vs-null unreachable both compare;
snap misses counted and printed; same binary + seed => same set) —
random bbox coordinates are ~20% off-road and an unsnappable pair
cannot exercise the search
- brute-force unidirectional Dijkstra oracle (label-setting, heap, the
shared oneway traversal law) on the SAME snapped node pair
- gate: 0 suboptimal (epsilon 1e-6 s — f64 summation-order noise floor,
A1's epsilon); class-breaks (one side routes, other doesn't) violate
- honest skip when the gitignored binary is absent (exit 0, SKIP printed)
First run on the fixed engine: 200 compared (182 routed, 18 unreachable),
0 SUBOPTIMAL, worst delta +0.000% — GATE PASS. The pre-F1 engine measured
1/194 suboptimal on this pair shape (bench7, debug session).