{ "jobId": "btn-20260623091525-b35869f1", "reportId": "report-btn-20260623091525-b35869f1", "evidenceScope": "button-control-evidence", "generatedAt": "2026-06-23T09:15:25.426Z", "targetUrl": "http://127.0.0.1:41741/web-rtcp-5axis-sim-plan/app/index.html", "chromePath": "/usr/bin/google-chrome", "screenshotsDir": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence", "steps": [ { "name": "01-initial", "title": "Initial UI", "description": "Browser app loaded before machine preparation.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/01-initial.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.06, "nonBlackRatio": 0.7826 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "run blocked: machine must be on" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "pause blocked: machine must be on" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "resume blocked: machine must be on" }, "STEP": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "step blocked: machine must be on" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: machine must be on" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "2", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "on", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0,\"y\":0,\"z\":0.002},\"size\":{\"x\":0,\"y\":0,\"z\":0.005},\"maxSpan\":0.005}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "0", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_TRAVERSE" }, "state": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc", "runState": "idle", "activeLine": 1, "machine": { "powerOn": false, "taskState": "estop-reset", "mode": "manual", "allHomed": false, "interpState": "idle", "taskPaused": false }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 1, "taskCycle": 2, "currentVelocityMmPerMin": 0, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "MANUAL", "interpState": "IDLE", "taskPaused": false, "singleStepping": false }, "ui": { "activeLine": 1, "taskCycle": 0, "servoCycle": 20 }, "motionStatus": { "motion": { "paused": false, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 0, "profileId": null, "iniPath": null, "kinematicsModuleId": null, "tickCount": 0, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": null, "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "LinuxCNC task/HAL session ready /work/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt/demos/xyzac_switchkins.ngc" } }, { "name": "02-program-loaded", "title": "Program loaded", "description": "Short operator G-code loaded through LinuxCNC interpreter WASM.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/02-program-loaded.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.06, "nonBlackRatio": 0.7795 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "run blocked: machine must be on" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "pause blocked: machine must be on" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "resume blocked: machine must be on" }, "STEP": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "step blocked: machine must be on" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: machine must be on" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "on", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "idle", "activeLine": 2, "machine": { "powerOn": false, "taskState": "estop-reset", "mode": "auto", "allHomed": false, "interpState": "idle", "taskPaused": false }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-tp-runtime-sample", "line": 3, "currentVelocityMmPerMin": 30, "axisPose": { "x": 0.00025, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "MANUAL", "interpState": "IDLE", "taskPaused": false, "singleStepping": false }, "ui": { "activeLine": 1, "taskCycle": 0, "servoCycle": 20 }, "motionStatus": { "motion": { "paused": false, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 0, "profileId": null, "iniPath": null, "kinematicsModuleId": null, "tickCount": 0, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": null, "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "LinuxCNC interpreter motion events 6" } }, { "name": "03-before-home", "title": "Before HOME", "description": "Machine powered on in manual mode before HOME.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/03-before-home.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.24, "nonBlackRatio": 0.7794 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "run blocked: switch to auto mode first" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "pause blocked: task mode must be auto or MDI" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "resume blocked: task mode must be auto or MDI" }, "STEP": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "step blocked: switch to auto mode first" }, "HOME": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "idle", "activeLine": 1, "machine": { "powerOn": true, "taskState": "on", "mode": "manual", "allHomed": false, "interpState": "idle", "taskPaused": false }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 1, "taskCycle": 4, "currentVelocityMmPerMin": 0, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "MANUAL", "interpState": "IDLE", "taskPaused": false, "singleStepping": false }, "ui": { "activeLine": 1, "taskCycle": 0, "servoCycle": 40 }, "motionStatus": { "motion": { "paused": false, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 0, "profileId": null, "iniPath": null, "kinematicsModuleId": null, "tickCount": 0, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": null, "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL mode manual" } }, { "name": "04-after-home", "title": "After HOME", "description": "HOME command preserves allHomed state in Web/task gate.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/04-after-home.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.22, "nonBlackRatio": 0.7794 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "run blocked: switch to auto mode first" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "pause blocked: task mode must be auto or MDI" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "resume blocked: task mode must be auto or MDI" }, "STEP": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "step blocked: switch to auto mode first" }, "HOME": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "idle", "activeLine": 1, "machine": { "powerOn": true, "taskState": "on", "mode": "manual", "allHomed": true, "interpState": "idle", "taskPaused": false }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 1, "taskCycle": 5, "currentVelocityMmPerMin": 3600, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "MANUAL", "interpState": "IDLE", "taskPaused": false, "singleStepping": false }, "ui": { "activeLine": 1, "taskCycle": 0, "servoCycle": 50 }, "motionStatus": { "motion": { "paused": false, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 0, "profileId": null, "iniPath": null, "kinematicsModuleId": null, "tickCount": 0, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": null, "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL machine homed" } }, { "name": "05-ready-for-run", "title": "Ready for RUN", "description": "POWER, HOME, AUTO, and loaded G-code are ready before RUN.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/05-ready-for-run.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.23, "nonBlackRatio": 0.7794 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "resume blocked: interpreter is not paused" }, "STEP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: switch to manual mode first" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":0,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "idle", "activeLine": 1, "machine": { "powerOn": true, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "idle", "taskPaused": false }, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 1, "taskCycle": 6, "currentVelocityMmPerMin": 3600, "axisPose": { "x": 0, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "AUTO", "interpState": "IDLE", "taskPaused": false, "singleStepping": false }, "ui": { "activeLine": 1, "taskCycle": 0, "servoCycle": 60 }, "motionStatus": { "motion": { "paused": false, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 0, "profileId": null, "iniPath": null, "kinematicsModuleId": null, "tickCount": 0, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": null, "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL mode auto" } }, { "name": "06-after-run", "title": "After RUN", "description": "RUN starts task/HAL backed program execution.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/06-after-run.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.19, "nonBlackRatio": 0.7795 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "resume blocked: interpreter is not paused" }, "STEP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: switch to manual mode first" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.001,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":1.199,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "running", "activeLine": 3, "machine": { "powerOn": true, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "reading", "taskPaused": false }, "axisPose": { "x": 0.999201, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 0.999201, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 3, "taskCycle": 56, "currentVelocityMmPerMin": 120, "axisPose": { "x": 0.999201, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "AUTO", "interpState": "READING", "taskPaused": false, "singleStepping": false }, "ui": { "activeLine": 3, "taskCycle": 0, "servoCycle": 560 }, "motionStatus": { "motion": { "paused": false, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": true, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 9, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T09:15:32.003Z", "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL status tick 9" } }, { "name": "07-before-pause", "title": "Before PAUSE", "description": "Program is running before PAUSE.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/07-before-pause.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.19, "nonBlackRatio": 0.7795 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "resume blocked: interpreter is not paused" }, "STEP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: switch to manual mode first" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.002,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":1.699,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "running", "activeLine": 3, "machine": { "powerOn": true, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "reading", "taskPaused": false }, "axisPose": { "x": 1.4988, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 1.4988, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 3, "taskCycle": 81, "currentVelocityMmPerMin": 120, "axisPose": { "x": 1.4988, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "AUTO", "interpState": "READING", "taskPaused": false, "singleStepping": false }, "ui": { "activeLine": 3, "taskCycle": 0, "servoCycle": 810 }, "motionStatus": { "motion": { "paused": false, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": true, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 14, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T09:15:32.443Z", "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL status tick 14" } }, { "name": "08-after-pause", "title": "After PAUSE", "description": "PAUSE sets runState paused and taskPaused true.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/08-after-pause.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.22, "nonBlackRatio": 0.7795 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "run blocked: resume paused program first" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "STEP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: switch to manual mode first" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.002,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":1.699,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "paused", "activeLine": 3, "machine": { "powerOn": true, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "paused", "taskPaused": true }, "axisPose": { "x": 1.69864, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 1.69864, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 3, "taskCycle": 92, "currentVelocityMmPerMin": 120, "axisPose": { "x": 1.69864, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "AUTO", "interpState": "PAUSED", "taskPaused": true, "singleStepping": false }, "ui": { "activeLine": 3, "taskCycle": 0, "servoCycle": 920 }, "motionStatus": { "motion": { "paused": true, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 16, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T09:15:32.739Z", "lastError": null, "stopReason": "paused", "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL program paused" } }, { "name": "09-before-resume", "title": "Before RESUME", "description": "Program is paused before RESUME.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/09-before-resume.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.22, "nonBlackRatio": 0.7795 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "run blocked: resume paused program first" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "STEP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: switch to manual mode first" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.002,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":1.699,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "paused", "activeLine": 3, "machine": { "powerOn": true, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "paused", "taskPaused": true }, "axisPose": { "x": 1.69864, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 1.69864, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 3, "taskCycle": 92, "currentVelocityMmPerMin": 120, "axisPose": { "x": 1.69864, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "AUTO", "interpState": "PAUSED", "taskPaused": true, "singleStepping": false }, "ui": { "activeLine": 3, "taskCycle": 0, "servoCycle": 920 }, "motionStatus": { "motion": { "paused": true, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 1, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 16, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T09:15:32.739Z", "lastError": null, "stopReason": "paused", "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL program paused" } }, { "name": "10-after-resume", "title": "After RESUME", "description": "RESUME returns task/HAL execution to running/reading.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/10-after-resume.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.2, "nonBlackRatio": 0.7794 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "resume blocked: interpreter is not paused" }, "STEP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: switch to manual mode first" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.003,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":2.518,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "running", "activeLine": 3, "machine": { "powerOn": true, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "reading", "taskPaused": false }, "axisPose": { "x": 2.41807, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 2.41807, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 3, "taskCycle": 128, "currentVelocityMmPerMin": 120, "axisPose": { "x": 2.41807, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "AUTO", "interpState": "READING", "taskPaused": false, "singleStepping": false }, "ui": { "activeLine": 3, "taskCycle": 0, "servoCycle": 1280 }, "motionStatus": { "motion": { "paused": false, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": true, "sequence": 2, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 7, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T09:15:34.728Z", "lastError": null, "stopReason": null, "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL status tick 7" } }, { "name": "11-before-step", "title": "Before STEP", "description": "Program is paused before STEP.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/11-before-step.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.22, "nonBlackRatio": 0.7795 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "run blocked: resume paused program first" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "STEP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: switch to manual mode first" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.003,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":2.618,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "paused", "activeLine": 3, "machine": { "powerOn": true, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "paused", "taskPaused": true }, "axisPose": { "x": 2.61791, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 2.61791, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 3, "taskCycle": 139, "currentVelocityMmPerMin": 120, "axisPose": { "x": 2.61791, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "AUTO", "interpState": "PAUSED", "taskPaused": true, "singleStepping": false }, "ui": { "activeLine": 3, "taskCycle": 0, "servoCycle": 1390 }, "motionStatus": { "motion": { "paused": true, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 2, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 9, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T09:15:35.030Z", "lastError": null, "stopReason": "paused", "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL program paused" } }, { "name": "12-after-step", "title": "After STEP", "description": "STEP sends EMC_TASK_PLAN_STEP and leaves task paused with singleStepping true.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/12-after-step.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.23, "nonBlackRatio": 0.7795 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "run blocked: resume paused program first" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "STEP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: switch to manual mode first" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.003,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":2.638,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "paused", "activeLine": 3, "machine": { "powerOn": true, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "paused", "taskPaused": true }, "axisPose": { "x": 2.63789, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 2.63789, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 3, "taskCycle": 140, "currentVelocityMmPerMin": 120, "axisPose": { "x": 2.63789, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "AUTO", "interpState": "PAUSED", "taskPaused": true, "singleStepping": true }, "ui": { "activeLine": 3, "taskCycle": 0, "servoCycle": 1400 }, "motionStatus": { "motion": { "paused": false, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 2, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 9, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T09:15:35.030Z", "lastError": null, "stopReason": "step", "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL stepped one cycle" } }, { "name": "13-before-stop", "title": "Before STOP", "description": "Paused single-step state before STOP.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/13-before-stop.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.23, "nonBlackRatio": 0.7795 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "run blocked: resume paused program first" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "STEP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: switch to manual mode first" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.003,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":2.638,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "paused", "activeLine": 3, "machine": { "powerOn": true, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "paused", "taskPaused": true }, "axisPose": { "x": 2.63789, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 2.63789, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 3, "taskCycle": 140, "currentVelocityMmPerMin": 120, "axisPose": { "x": 2.63789, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "AUTO", "interpState": "PAUSED", "taskPaused": true, "singleStepping": true }, "ui": { "activeLine": 3, "taskCycle": 0, "servoCycle": 1400 }, "motionStatus": { "motion": { "paused": false, "aborted": false } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 2, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 9, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T09:15:35.030Z", "lastError": null, "stopReason": "step", "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL stepped one cycle" } }, { "name": "14-after-stop", "title": "After STOP", "description": "STOP aborts task/HAL motion and returns interpreter state to idle.", "screenshotPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/screenshots/button-control-evidence/14-after-stop.png", "pixelStats": { "width": 1500, "height": 1050, "averageLuminance": 129.22, "nonBlackRatio": 0.7795 }, "buttons": { "RUN": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "STOP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "PAUSE": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "RESUME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "resume blocked: interpreter is not paused" }, "STEP": { "exists": true, "disabled": false, "commandReady": "true", "ariaDisabled": "false", "title": "" }, "HOME": { "exists": true, "disabled": false, "commandReady": "false", "ariaDisabled": "true", "title": "home blocked: switch to manual mode first" } }, "canvasDataset": { "fiveAxisCanvas": "true", "engine": "three.js r183", "threeReady": "true", "threeRevision": "183", "threePathPoints": "6", "threeExecutedPathPoints": "1", "threeSceneObjects": "20", "threeToolhead": "{\"x\":0.003,\"y\":0,\"z\":0}", "threeSceneUnits": "m", "threeLinearUnits": "mm", "threeLinearUnitScaleToMeters": "0.001", "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeTcpPose": "{\"x\":2.638,\"y\":0,\"z\":0,\"a\":0,\"c\":0}", "threeRtcpState": "off", "threeSelectedView": "iso", "threeFrameApi": "web-rtcp-5axis-motion-frame", "threeRenderer": "webgl", "threeSceneMode": "program-preview-and-tool-execution", "threePreviewScope": "machine-reference-and-toolpath", "threeMachineReferenceModel": "webgl-five-axis-reference", "threeCameraControls": "orbit-pan-zoom", "threeProgramPreviewSource": "linuxcnc-interpreter-wasm", "threeToolExecutionMarker": "true", "threeTcpMarker": "sphere", "threeToolAxisMarker": "line", "threeToolpathPreviewSource": "linuxcnc_interpreter_canonical_motion", "threeToolExecutionTraceSource": "linuxcnc_tp_samples_or_task_motion_hal_feedback", "threePathFitBounds": "ok", "threePathBoundsMeters": "{\"center\":{\"x\":0.01,\"y\":0.01,\"z\":0.002},\"size\":{\"x\":0.02,\"y\":0.02,\"z\":0.005},\"maxSpan\":0.02}", "threeCurrentSegmentHighlight": "ok", "threeRapidFeedVisualDistinction": "ok", "threeNoGcodeSemanticsGeneration": "ok", "threeRapidPathPoints": "2", "threeFeedPathPoints": "4", "threeArcPathPoints": "0", "threeCurrentSegmentPoints": "2", "threeCurrentSegmentType": "STRAIGHT_FEED" }, "state": { "activeProgram": "button-control-evidence.ngc", "runState": "stopped", "activeLine": 3, "machine": { "powerOn": true, "taskState": "on", "mode": "auto", "allHomed": true, "interpState": "idle", "taskPaused": false }, "axisPose": { "x": 2.63789, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "dro": { "x": 2.63789, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 }, "programRuntimeFeedback": { "sourceMode": "linuxcnc-task-motion-hal-wasm", "line": 3, "taskCycle": 141, "currentVelocityMmPerMin": 120, "axisPose": { "x": 2.63789, "y": 0, "z": 0, "a": 0, "b": 0, "c": 0 } }, "taskHalStatus": { "task": { "mode": "AUTO", "interpState": "IDLE", "taskPaused": false, "singleStepping": false }, "ui": { "activeLine": 3, "taskCycle": 0, "servoCycle": 1410 }, "motionStatus": { "motion": { "paused": false, "aborted": true } } }, "taskHalStatusLoop": { "apiName": "web-rtcp-5axis-task-hal-status-loop", "active": false, "sequence": 2, "profileId": "xyzac-trt", "iniPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", "kinematicsModuleId": "xyzac-trt", "tickCount": 9, "batchSize": 5, "intervalMs": 25, "taskPeriodNs": 10000000, "servoPeriodNs": 1000000, "lastStatusAt": "2026-06-23T09:15:35.030Z", "lastError": null, "stopReason": "stopped", "semanticBoundary": "js_status_polling_loop_for_linuxcnc_task_hal_motion_status" }, "operatorMessage": "task/HAL program stopped" } } ], "checks": [ { "name": "HOME keeps all axes homed", "pass": true, "detail": "{\"powerOn\":true,\"taskState\":\"on\",\"mode\":\"manual\",\"allHomed\":true,\"interpState\":\"idle\",\"taskPaused\":false}" }, { "name": "RUN uses task/HAL runtime feedback", "pass": true, "detail": "{\"sourceMode\":\"linuxcnc-task-motion-hal-wasm\",\"line\":3,\"taskCycle\":56,\"currentVelocityMmPerMin\":120,\"axisPose\":{\"x\":0.999201,\"y\":0,\"z\":0,\"a\":0,\"b\":0,\"c\":0}}" }, { "name": "PAUSE sets paused state", "pass": true, "detail": "{\"powerOn\":true,\"taskState\":\"on\",\"mode\":\"auto\",\"allHomed\":true,\"interpState\":\"paused\",\"taskPaused\":true}" }, { "name": "RESUME returns to reading", "pass": true, "detail": "{\"powerOn\":true,\"taskState\":\"on\",\"mode\":\"auto\",\"allHomed\":true,\"interpState\":\"reading\",\"taskPaused\":false}" }, { "name": "STEP records single stepping", "pass": true, "detail": "{\"mode\":\"AUTO\",\"interpState\":\"PAUSED\",\"taskPaused\":true,\"singleStepping\":true}" }, { "name": "STOP aborts motion", "pass": true, "detail": "{\"paused\":false,\"aborted\":true}" }, { "name": "Screenshots are nonblank", "pass": true, "detail": "01-initial:0.7826, 02-program-loaded:0.7795, 03-before-home:0.7794, 04-after-home:0.7794, 05-ready-for-run:0.7794, 06-after-run:0.7795, 07-before-pause:0.7795, 08-after-pause:0.7795, 09-before-resume:0.7795, 10-after-resume:0.7794, 11-before-step:0.7795, 12-after-step:0.7795, 13-before-stop:0.7795, 14-after-stop:0.7795" }, { "name": "Control buttons expose readiness attributes", "pass": true, "detail": "RUN/STOP/PAUSE/RESUME/STEP/HOME" } ], "consoleErrors": [ "Failed to load resource: the server responded with a status of 404 (Not Found)", "Failed to load resource: the server responded with a status of 404 (Not Found)" ], "pageErrors": [], "status": "PASS", "jsonPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.json", "pdfPath": "/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.pdf" }