Make machine configuration authoritative and restore native checkpoints exactly

This commit is contained in:
2026-09-18 09:09:41 +08:00
parent 6a69511276
commit 4a568f1f4c
94 changed files with 10882 additions and 301 deletions

View File

@@ -39,9 +39,10 @@ const wasm = await createModule({ wasmBinary: await readFile(new URL("../../buil
const session = new SimSession(wasm, { sessionId: "axis3-selected-case" });
const base = { schema_version: 1, context_id: CONTEXT_ID, session_id: session.sessionId };
let sequence = 0;
const send = (kind, operationId, payload = {}) => {
const send = (kind, operationId, payload = {}, expected = "ok") => {
const response = session.accept({ ...base, kind, seq: ++sequence, operation_id: operationId, payload });
assert.notEqual(response.kind, "ERROR", `${kind}:${response.payload?.code ?? "error"}`);
if (expected === "error") assert.equal(response.kind, "ERROR");
else assert.notEqual(response.kind, "ERROR", `${kind}:${response.payload?.code ?? "error"}`);
return response;
};
@@ -67,6 +68,12 @@ const checkpoint = send("CHECKPOINT", "checkpoint").payload.checkpoint;
send("SIM_STEP", "program-step", { cycles: 8 });
const programSnapshot = send("SNAPSHOT_REQUEST", "program-snapshot");
assert.ok(["running", "completed"].includes(programSnapshot.payload.snapshot?.state?.program?.program_status ?? "running"));
assert.equal(send("SPINDLE_COMMAND", "spindle-during-motion", { spindle: 0, rpm: 600, enabled: true }, "error").payload.code, "axis_gate");
assert.equal(send("TOOL_PREPARE", "tool-during-motion", { tool: 1, pocket: 1 }, "error").payload.code, "axis_gate");
for (let tick = 0; tick < 200 && (session.program.snapshot().program_status !== "completed" || session.wasmMotion.read().state.queue_depth > 0); tick++) send("SIM_STEP", `finish-program-${tick}`, { cycles: 100 });
assert.equal(session.program.snapshot().program_status, "completed");
assert.equal(session.wasmMotion.read().state.queue_depth, 0);
send("SET_MODE", "manual-after-program", { mode: "MANUAL" });
assert.equal(send("SPINDLE_COMMAND", "spindle-on", { spindle: 0, rpm: 600, enabled: true }).payload.status, "verified");
assert.equal(send("IO_STEP", "spindle-step", { ticks: 5 }).payload.status, "verified");