Files
cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.json

2511 lines
80 KiB
JSON

{
"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"
}