Wire AXIS controls through operation gates

This commit is contained in:
2026-08-23 09:30:44 +08:00
parent a1edd8defe
commit a7fcec9d33
11 changed files with 367 additions and 17 deletions

View File

@@ -0,0 +1,137 @@
{
"boundaries": [
"no protocol/schema/ABI mutation",
"browser controls do not imply physical safety authority",
"host processes and real hardware remain excluded"
],
"checks": {
"estop_power_recover": {
"commands": [
"ESTOP",
"IO_RECOVER"
],
"status": "verified"
},
"gate_before_send": {
"blocked_gate_does_not_send": true,
"status": "verified"
},
"keyboard_map": {
"input_controls_protected": true,
"keys": 10,
"status": "verified"
},
"mdi_jog_home": {
"commands": [
"MDI_EXECUTE",
"JOG_START",
"JOG_STOP",
"HOME"
],
"status": "verified"
},
"operation_trace": {
"monotonic_ids": true,
"pending_result_error_blocked": true,
"status": "verified"
},
"program_controls": {
"commands": [
"PROGRAM_RUN",
"PROGRAM_STEP",
"PROGRAM_PAUSE",
"PROGRAM_RESUME",
"PROGRAM_ABORT",
"PROGRAM_RESTART"
],
"status": "verified"
},
"spindle_coolant_override": {
"commands": [
"SPINDLE_COMMAND",
"COOLANT_COMMAND",
"SET_OVERRIDE"
],
"status": "verified"
},
"worker_authority": {
"state_source": "Worker protocol envelopes",
"status": "verified"
}
},
"context_id": "linuxcnc-2.10.0-pre0-wasm-m1-py-c1",
"implementation": {
"app_path": "web/react/src/App.tsx",
"app_sha256": "63cf25079ae07f638028c9d086ab60ab3f4f66abb2219ab40b32affead6da67c",
"controller_path": "web/app/axis-operation-controller.mjs",
"controller_sha256": "077e344c5ea1b76fa11613b1e50b6e292d1b766f907c818f7ce42d6afe4f62bb",
"keyboard": [
"F1",
"F2",
"F3",
"F5",
"R",
"T",
"P",
"S",
"Escape",
"Ctrl-K"
],
"operation_id_policy": "axis-<command>-<six-digit-monotonic-counter>",
"test_path": "web/app/test_axis_operation_controller.mjs",
"test_sha256": "dcc4f161305718b2da11e7552813452ec23cb26e7b9c087f6eff49d928642fb1",
"trace_phases": [
"pending",
"result",
"error",
"blocked"
]
},
"implementation_status": "worker_backed_operation_controller",
"report_sha256": "cc12b349cc3fc3e7d1882530f123ca92e4a510f3f40fec4c72bcfd4e876f0a3e",
"schema": "axis-control-report.v1",
"source_anchors": [
{
"lines": "105-264",
"path": "linuxcnc/share/axis/tcl/axis.tcl",
"role": "machine menu"
},
{
"lines": "484-787",
"path": "linuxcnc/share/axis/tcl/axis.tcl",
"role": "toolbar actions"
},
{
"lines": "2214-2409",
"path": "linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"role": "estop/program controls"
},
{
"lines": "2701-2915",
"path": "linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"role": "home/touch-off/spindle/coolant"
},
{
"lines": "3213-3305",
"path": "linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"role": "jog press/release"
}
],
"status": "verified",
"task_id": "AXIS-CTRL-01..08",
"trace_sample": [
{
"operation_id": "axis-program-run-000001",
"phase": "pending"
},
{
"operation_id": "axis-program-run-000001",
"phase": "result"
},
{
"operation_id": "axis-jog-start-000002",
"phase": "blocked",
"reason": "axis_estop_active"
}
]
}