Add AXIS state and gate contracts

This commit is contained in:
2026-08-23 08:28:12 +08:00
parent 9084227bf5
commit 5d71e6b0a2
7 changed files with 376 additions and 1 deletions

View File

@@ -0,0 +1,145 @@
{
"boundary": "contract-only; no ABI/protocol/schema/context-lock mutation",
"checks": {
"command_gate_contract": {
"actions": 18,
"matrix": "ready/running/paused/estop/queue-full/limit",
"status": "verified"
},
"host_boundary_contract": {
"labels": [
"HOST_BOUNDARY",
"REAL-EXCLUDED"
],
"status": "verified"
},
"idempotency_boundary": {
"owner": "WorkerClient/operation-ledger",
"pure_gate_does_not_send": true,
"status": "verified"
},
"source_mapping": {
"axis_py": [
"963-993",
"2214-2226",
"2343-2409",
"2701-2915",
"3213-3305"
],
"axis_tcl": "1715-1887",
"status": "verified"
},
"state_enum_contract": {
"interp_states": 4,
"motion_modes": 3,
"states": 3,
"status": "verified"
}
},
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"implementation": {
"boundaries": [
"WEB-EQUIV",
"PY-WASM",
"SIM-DEVICE",
"HOST_BOUNDARY",
"REAL-EXCLUDED"
],
"commands": 18,
"interp_states": [
"IDLE",
"READING",
"WAITING",
"PAUSED"
],
"motion_modes": [
"FREE",
"COORD",
"TELEOP"
],
"path": "web/app/axis-contract.mjs",
"sha256": "738233e0358e3238dd15312ef8a9e021c91cd9ee9d9d7b5cd0f51539867c16f0",
"task_states": [
"ESTOP",
"OFF",
"ON"
],
"test_path": "web/app/test_axis_contract.mjs",
"test_sha256": "202225bdbe6c86294cc83f9f889c33f364a84b31fccac2f6c96507bcbb2cad77"
},
"implementation_status": "pure_worker_gate_contract",
"matrix_samples": [
{
"action": "run",
"enabled": true,
"reason": "axis_run_available",
"state": "ON/IDLE"
},
{
"action": "pause",
"enabled": true,
"reason": "axis_pause_available",
"state": "ON/READING"
},
{
"action": "resume",
"enabled": true,
"reason": "axis_resume_available",
"state": "ON/PAUSED"
},
{
"action": "jogStart",
"enabled": false,
"reason": "axis_estop_active",
"state": "ESTOP"
},
{
"action": "mdi",
"enabled": false,
"reason": "axis_mdi_queue_full",
"state": "ON/MDI queue full"
},
{
"action": "overrideLimits",
"enabled": true,
"reason": "axis_limit_override_available",
"state": "ON/IDLE/limit"
}
],
"report_sha256": "5de8d083c7903cf6e4753ff1adcbc26b8a868ef1f911ecbc19f56665e5805a44",
"schema": "axis-contract-report.v1",
"source_anchors": [
{
"lines": "1715-1887",
"path": "linuxcnc/share/axis/tcl/axis.tcl",
"role": "state/relief gate"
},
{
"lines": "963-993",
"path": "linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"role": "running/manual_ok"
},
{
"lines": "2214-2226",
"path": "linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"role": "estop/power"
},
{
"lines": "2343-2409",
"path": "linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"role": "program controls"
},
{
"lines": "2701-2915",
"path": "linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"role": "home/touch-off/io/mode"
},
{
"lines": "3213-3305",
"path": "linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"role": "jog safety"
}
],
"status": "verified",
"task_id": "AXIS-CON-01..04"
}