feat(08.1-02): re-pin measurement gates for ARG3 and extend the rollout locks (GREEN)
- The optimality gate's decode-failure message names ARG3 and the rebuild command (node routing/scripts/build-road-graph.mjs); the frozen D-03 constants (OPTIMALITY_EPSILON_PCT = 0.1, REQUIRED_BASELINE_ARG_VERSION = 1) and the immutable alt-baseline.json record are untouched. - The oracle sweep's graph-missing (SKIP) and decode-failure wording names the ARG3 binary; the seeded 200-pair symmetric-compare constants and the three violation classes are unchanged. - RO1/RO2 ban the ARG3 magic 0x41524733 in the upload script's and the Worker's comment-stripped code: the one-path laws now cover the CURRENT format, not just the retired ones. The Worker keeps exactly one decodeGraph call, no GRAPH_VERSION, no magic, no === 2. - measure-route-cpu.mjs is untouched here by design: its LADDER HISTORY gains the CH rung only once the measured numbers exist (task 3).
This commit is contained in:
@@ -268,14 +268,16 @@ async function main() {
|
||||
// environment fact, not a failure.
|
||||
if (!existsSync(GRAPH_PATH)) {
|
||||
console.log(
|
||||
`SKIP: no graph at ${GRAPH_PATH} — the real-graph optimality pin needs the gitignored binary; ` +
|
||||
`SKIP: no graph at ${GRAPH_PATH} — the real-graph optimality pin needs the gitignored ARG3 binary; ` +
|
||||
`build it first: node routing/scripts/build-road-graph.mjs`,
|
||||
);
|
||||
process.exit(0);
|
||||
}
|
||||
const buffer = readFileSync(GRAPH_PATH);
|
||||
const graph = decodeGraph(toArrayBuffer(buffer));
|
||||
if (graph === null) fail(`${GRAPH_PATH} does not decode (fail-honest null) — rebuild the binary`);
|
||||
if (graph === null) {
|
||||
fail(`${GRAPH_PATH} does not decode (fail-honest null — the current binary must be ARG3) — rebuild it: node routing/scripts/build-road-graph.mjs`);
|
||||
}
|
||||
|
||||
const rawPairs = generateCrossMetroPairs(graph.bbox, {
|
||||
count: SWEEP_PAIR_COUNT * SWEEP_OVERSAMPLE_FACTOR,
|
||||
|
||||
@@ -23,8 +23,9 @@
|
||||
* Inputs:
|
||||
* - the COMMITTED record routing/test/fixtures/alt-baseline.json (IMMUTABLE
|
||||
* — the recorder refuses overwrite; delete by explicit git revert only);
|
||||
* - the LOCAL rebuilt binary routing/data/kl-roadgraph.v1.bin (ARG2 — the
|
||||
* storage NAME stays v1; the header version is the format truth).
|
||||
* - the LOCAL rebuilt binary routing/data/kl-roadgraph.v1.bin (ARG3 since
|
||||
* Phase 08.1 — the storage NAME stays v1; the header version is the
|
||||
* format truth).
|
||||
*
|
||||
* Constant-mirror law: this script's OPTIMALITY_EPSILON_PCT is asserted EQUAL
|
||||
* to the record's epsilon block BEFORE any measurement — a record edit alone
|
||||
@@ -88,7 +89,7 @@ function toArrayBuffer(buf) {
|
||||
* "unsnapped" — a record-routed pair whose snap now misses (a D03B class
|
||||
* break — the pair no longer routes at all).
|
||||
*
|
||||
* @param graph decoded RoadGraph (the current ARG2 build)
|
||||
* @param graph decoded RoadGraph (the current ARG3 build)
|
||||
* @param record parsed alt-baseline.json (the frozen pre-ALT record)
|
||||
* @param opts { snap, astar } — the live modules (injected like the corpus core)
|
||||
* @returns {{ checks: { D03A: check, D03B: check }, rows: Array, reSnapped: number, pass: boolean }}
|
||||
@@ -270,7 +271,7 @@ function main() {
|
||||
const graph = decodeGraph(toArrayBuffer(readFileSync(GRAPH_PATH)));
|
||||
if (graph === null) {
|
||||
fail(
|
||||
`${GRAPH_PATH} does not decode (fail-honest null — still ARG1 or corrupt) — rebuild the ARG2 binary: node routing/scripts/build-road-graph.mjs`,
|
||||
`${GRAPH_PATH} does not decode (fail-honest null — the current binary must be ARG3) — rebuild it: node routing/scripts/build-road-graph.mjs`,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@ test("RO1 upload-format-agnostic — the upload path is byte-shipping, never for
|
||||
"decodeGraph",
|
||||
"0x41524731", // ARG1 magic
|
||||
"0x41524732", // ARG2 magic
|
||||
"0x41524733", // ARG3 magic (Phase 08.1 — the ban covers the CURRENT format too)
|
||||
"GRAPH_VERSION",
|
||||
]) {
|
||||
assert.ok(!code.includes(token), `upload code must never reference ${token} (the migration is byte-shipping — D-01)`);
|
||||
@@ -90,8 +91,9 @@ test("RO2 one decode path at the Worker — the router never branches on format"
|
||||
const calls = code.match(/decodeGraph\(/g) ?? [];
|
||||
assert.equal(calls.length, 1, "exactly one decodeGraph call site — the ONE decode path");
|
||||
// NO version-conditional branch against the graph bytes: no version
|
||||
// constant import/compare, no magic, no `=== 2` anywhere in the file.
|
||||
for (const token of ["GRAPH_VERSION", "0x41524731", "0x41524732", "=== 2"]) {
|
||||
// constant import/compare, no magic (ARG1, ARG2, or the current ARG3),
|
||||
// no `=== 2` anywhere in the file.
|
||||
for (const token of ["GRAPH_VERSION", "0x41524731", "0x41524732", "0x41524733", "=== 2"]) {
|
||||
assert.ok(!code.includes(token), `the router must never branch on format (${token})`);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user