Implement AXIS parity UI and execution baseline
This commit is contained in:
70
web/worker/test_source_config_s5.mjs
Normal file
70
web/worker/test_source_config_s5.mjs
Normal file
@@ -0,0 +1,70 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { createHash } from "node:crypto";
|
||||
import { readFile } from "node:fs/promises";
|
||||
import { ConfigurationBatchRuntime } from "../workspace/configuration-batch.mjs";
|
||||
import { fnv1a64 } from "./replay.mjs";
|
||||
|
||||
const ROOT = new URL("../../", import.meta.url);
|
||||
const CONTEXT_ID = "linuxcnc-2.10.0-pre0-wasm-m1-py-c1";
|
||||
const matrix = JSON.parse(await readFile(new URL("../../coverage/full-configuration-startup-matrix.report.json", import.meta.url)));
|
||||
const batch = new ConfigurationBatchRuntime({ context_id: CONTEXT_ID });
|
||||
assert.equal(batch.load(matrix.matrix, { context_id: CONTEXT_ID }).status, "verified");
|
||||
assert.deepEqual(batch.state.counts, {
|
||||
total: 264,
|
||||
ready: 56,
|
||||
blocked: 208,
|
||||
startup_preflight: { blocked_resource: 194, blocked_unindexed_resource_graph: 11, blocked_unregistered_kinematics: 3, static_ready: 56 },
|
||||
resource_status: { blocked_missing: 147, blocked_missing_and_unresolved: 49, ready: 9, unindexed: 59 },
|
||||
});
|
||||
|
||||
const diagnosticById = new Map(batch.state.diagnostics.map((row) => [row.config_id, row]));
|
||||
const entrypointResults = [];
|
||||
const hashes = [];
|
||||
for (const row of matrix.matrix) {
|
||||
const value = await readFile(new URL(`../../${row.path}`, import.meta.url));
|
||||
const sourceHash = createHash("sha256").update(value).digest("hex");
|
||||
const entry = batch.state.entrypoints.find((item) => item.config_id === row.config_id);
|
||||
assert.ok(entry, row.config_id);
|
||||
assert.equal(entry.status, row.status);
|
||||
const diagnostic = row.status === "blocked" ? diagnosticById.get(row.config_id) : null;
|
||||
entrypointResults.push({
|
||||
config_id: row.config_id,
|
||||
path: row.path,
|
||||
source_sha256: sourceHash,
|
||||
status: row.status === "ready" ? "READY" : "BLOCKED",
|
||||
startup_preflight: row.startup_preflight,
|
||||
resource_status: row.resource_status,
|
||||
diagnostic_code: diagnostic?.code ?? null,
|
||||
missing_count: row.missing_resources.length,
|
||||
unresolved_count: row.unresolved_resources.length,
|
||||
});
|
||||
hashes.push(`${row.config_id}:${sourceHash}:${row.status}`);
|
||||
}
|
||||
entrypointResults.sort((left, right) => left.config_id.localeCompare(right.config_id));
|
||||
hashes.sort();
|
||||
|
||||
const saved = batch.export();
|
||||
const restored = new ConfigurationBatchRuntime({ context_id: CONTEXT_ID });
|
||||
assert.deepEqual(restored.restore(saved), saved);
|
||||
const simConfigCount = entrypointResults.filter((row) => row.path.startsWith("linuxcnc/configs/sim/")).length;
|
||||
const testConfigCount = entrypointResults.filter((row) => row.path.startsWith("linuxcnc/tests/")).length;
|
||||
assert.equal(simConfigCount, 216);
|
||||
assert.equal(testConfigCount, 48);
|
||||
|
||||
const output = {
|
||||
schema: "linuxcnc-source-config-startup-adapter.v1",
|
||||
context_id: CONTEXT_ID,
|
||||
matrix_report_sha256: createHash("sha256").update(await readFile(new URL("../../coverage/full-configuration-startup-matrix.report.json", import.meta.url))).digest("hex"),
|
||||
registered_entries: matrix.counts.registered_entries,
|
||||
reported_entrypoints: matrix.counts.entrypoints,
|
||||
entrypoint_results: entrypointResults,
|
||||
counts: { total: entrypointResults.length, sim_configs: simConfigCount, test_configs: testConfigCount, READY: batch.state.counts.ready, BLOCKED: batch.state.counts.blocked },
|
||||
workflow: { batch_schema: saved.schema, batch_state_hash: saved.state_hash, restore_equal: JSON.stringify(restored.export()) === JSON.stringify(saved), diagnostic_count: batch.state.diagnostics.length, entrypoint_hash: fnv1a64(hashes) },
|
||||
boundaries: [
|
||||
"READY is static startup preflight, not an official LinuxCNC runtime oracle",
|
||||
"BLOCKED rows retain resource/kinematics diagnostics and are never promoted",
|
||||
"full native/WASM/Worker startup probes remain represented by configuration-startup-runtime evidence",
|
||||
],
|
||||
};
|
||||
output.aggregate_hash = fnv1a64({ counts: output.counts, workflow: output.workflow, entrypoint_hash: output.workflow.entrypoint_hash });
|
||||
console.log(JSON.stringify(output));
|
||||
Reference in New Issue
Block a user