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));