{ "apiName": "web-rtcp-5axis-xyzbc-trt-full-gcode-process-frame-capture", "status": "partial", "capturedAt": "2026-07-03T09:17:13.048Z", "projectRoot": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan", "outputDir": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/web-simulation-gcode-full-50ms-20260703T091708Z", "url": "http://127.0.0.1:34309/web-rtcp-5axis-xyzbc-trt-sim-plan/app/index.html", "sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc", "captureMethod": "Playwright drives the AXIS UI state one real programAxisPreviewPath sample at a time and screenshots after each 50ms sample.", "samplePeriodMs": 50, "expectedSampleCount": 1300, "capturedFrameCount": 3, "firstFrame": { "index": 0, "timeMs": 0, "file": "frame-0000-t000000ms.png", "sourceFile": "xyzbc_switchkins_sub.ngc", "line": 16, "statement": "g53 g0 x0y0 z# b0 c0 ; quadrant I", "operation": "rapid-machine-reset", "gcodeStepIndex": 16, "segmentIndex": 0, "motionType": "rapid", "activeKinematics": "identity", "joint": { "x": 0, "y": 0, "z": 10, "b": 0, "c": 0 }, "tcp": { "x": 0, "y": 0, "z": 10 }, "toolAxis": { "i": 0, "j": 0, "k": 1 }, "axisPose": { "x": 0, "y": 0, "z": 10, "a": 0, "b": 0, "c": 0 }, "toolAxisVector": { "x": 0, "y": 0, "z": 1 }, "canvasDataset": { "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeToolGlyphAxis": "{\"x\":0,\"y\":0,\"z\":1}" } }, "lastFrame": { "index": 2, "timeMs": 100, "file": "frame-0002-t000100ms.png", "sourceFile": "xyzbc_switchkins_sub.ngc", "line": 18, "statement": "g0 x+20 y+20 z#", "operation": "rapid-to-quadrant-center", "gcodeStepIndex": 18, "segmentIndex": 1, "motionType": "rapid", "activeKinematics": "identity", "joint": { "x": 1.1764705882352942, "y": 1.1764705882352942, "z": 10, "b": 0, "c": 0 }, "tcp": { "x": 1.1764705882352942, "y": 1.1764705882352942, "z": 10 }, "toolAxis": { "i": 0, "j": 0, "k": 1 }, "axisPose": { "x": 1.1764705882352942, "y": 1.1764705882352942, "z": 10, "a": 0, "b": 0, "c": 0 }, "toolAxisVector": { "x": 0, "y": 0, "z": 1 }, "canvasDataset": { "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeToolGlyphAxis": "{\"x\":0,\"y\":0,\"z\":1}" } }, "gcodeExecutionProcess": { "status": "ok", "executionStepCount": 128, "summary": { "motionStepCount": 29, "switchkinsStepCount": 21, "parameterAssignmentStepCount": 41, "workOffsetStepCount": 9, "callStepCount": 5, "noMotionStepCount": 99, "finalJoint": { "x": 0, "y": 0, "z": 10, "b": 0, "c": 0 }, "finalKinematics": "identity" } }, "lineExecutionTraceCount": 64, "axisValuesByLineCount": 29, "finalState": { "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc", "selectedGcodeSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc", "source": "web-axis-source-execution-expanded-ngcgui-subroutines", "semanticBoundary": "linuxcnc_xyzbc_switchkins_ngc_execution_expanded_by_source_subroutines", "samplePeriodMs": 50, "sampleCount": 1300, "capturedSampleIndex": 2, "runState": "stepping", "programUiExecution": { "apiName": "web-rtcp-5axis-ui-gcode-live-execution", "status": "idle", "source": "programAxisPreviewPath.samples", "samplePeriodMs": 50, "sampleIndex": 2, "sampleCount": 1300, "executedSampleCount": 3, "timeMs": 100, "activeProgram": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc", "sourceFile": "xyzbc_switchkins_sub.ngc", "line": 18, "statement": "g0 x+20 y+20 z#", "operation": "rapid-to-quadrant-center", "executionIndex": 4, "gcodeStepIndex": 18, "segmentIndex": 1, "motionType": "rapid", "activeKinematics": "identity", "joint": { "x": 1.1764705882352942, "y": 1.1764705882352942, "z": 10, "b": 0, "c": 0 }, "tcp": { "x": 1.1764705882352942, "y": 1.1764705882352942, "z": 10 }, "toolAxis": { "i": 0, "j": 0, "k": 1 }, "tool": { "id": 2, "pocket": 2, "length": 10, "diameter": 8 }, "machineState": { "spindle": { "speedRpm": 0, "direction": "stopped", "enabled": false }, "feed": { "programmedMmPerMin": 2100, "actualMmPerMin": 2100, "overridePercent": 100 }, "cutting": { "active": false, "cuttingSpeedMmPerMin": 0 }, "tool": { "id": 2, "pocket": 2, "length": 10, "diameter": 8 }, "toolChange": { "activeTool": 2, "activePocket": 2, "changed": false, "command": null }, "coolant": { "mist": false, "flood": false } }, "semanticBoundary": "ui_updates_from_real_expanded_linuxcnc_gcode_sample_stream" }, "gcodeExecutionProcess": { "status": "ok", "executionStepCount": 128, "summary": { "motionStepCount": 29, "switchkinsStepCount": 21, "parameterAssignmentStepCount": 41, "workOffsetStepCount": 9, "callStepCount": 5, "noMotionStepCount": 99, "finalJoint": { "x": 0, "y": 0, "z": 10, "b": 0, "c": 0 }, "finalKinematics": "identity" } }, "lineExecutionTraceCount": 64, "axisValuesByLineCount": 29, "programExecutionSourceMode": "fixture-line-playback", "taskHalRuntimeReadiness": { "apiName": "web-rtcp-5axis-linuxcnc-task-hal-runtime-readiness", "loaded": false, "taskRuntimeReady": false, "motionRuntimeReady": false, "halRuntimeReady": false, "nativeTaskReady": false, "nativeHalSyncReady": false, "error": "disabled for deterministic 50ms screenshot playback; task/HAL path is covered by browser smoke" } }, "frames": [ { "index": 0, "timeMs": 0, "file": "frame-0000-t000000ms.png", "sourceFile": "xyzbc_switchkins_sub.ngc", "line": 16, "statement": "g53 g0 x0y0 z# b0 c0 ; quadrant I", "operation": "rapid-machine-reset", "gcodeStepIndex": 16, "segmentIndex": 0, "motionType": "rapid", "activeKinematics": "identity", "joint": { "x": 0, "y": 0, "z": 10, "b": 0, "c": 0 }, "tcp": { "x": 0, "y": 0, "z": 10 }, "toolAxis": { "i": 0, "j": 0, "k": 1 }, "axisPose": { "x": 0, "y": 0, "z": 10, "a": 0, "b": 0, "c": 0 }, "toolAxisVector": { "x": 0, "y": 0, "z": 1 }, "canvasDataset": { "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeToolGlyphAxis": "{\"x\":0,\"y\":0,\"z\":1}" } }, { "index": 1, "timeMs": 50, "file": "frame-0001-t000050ms.png", "sourceFile": "xyzbc_switchkins_sub.ngc", "line": 18, "statement": "g0 x+20 y+20 z#", "operation": "rapid-to-quadrant-center", "gcodeStepIndex": 18, "segmentIndex": 1, "motionType": "rapid", "activeKinematics": "identity", "joint": { "x": 0, "y": 0, "z": 10, "b": 0, "c": 0 }, "tcp": { "x": 0, "y": 0, "z": 10 }, "toolAxis": { "i": 0, "j": 0, "k": 1 }, "axisPose": { "x": 0, "y": 0, "z": 10, "a": 0, "b": 0, "c": 0 }, "toolAxisVector": { "x": 0, "y": 0, "z": 1 }, "canvasDataset": { "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeToolGlyphAxis": "{\"x\":0,\"y\":0,\"z\":1}" } }, { "index": 2, "timeMs": 100, "file": "frame-0002-t000100ms.png", "sourceFile": "xyzbc_switchkins_sub.ngc", "line": 18, "statement": "g0 x+20 y+20 z#", "operation": "rapid-to-quadrant-center", "gcodeStepIndex": 18, "segmentIndex": 1, "motionType": "rapid", "activeKinematics": "identity", "joint": { "x": 1.1764705882352942, "y": 1.1764705882352942, "z": 10, "b": 0, "c": 0 }, "tcp": { "x": 1.1764705882352942, "y": 1.1764705882352942, "z": 10 }, "toolAxis": { "i": 0, "j": 0, "k": 1 }, "axisPose": { "x": 1.1764705882352942, "y": 1.1764705882352942, "z": 10, "a": 0, "b": 0, "c": 0 }, "toolAxisVector": { "x": 0, "y": 0, "z": 1 }, "canvasDataset": { "threeToolAxis": "{\"x\":0,\"y\":0,\"z\":1}", "threeToolGlyphAxis": "{\"x\":0,\"y\":0,\"z\":1}" } } ], "note": "executionStepCount is the expanded semantic G-code step count; capturedFrameCount is the 50ms visual frame count." }