Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
2026-07-03 17:04:33 -04:00

3344 lines
97 KiB
JSON

{
"apiName": "xyzbc-trt-native-web-evidence-comparison",
"status": "pass",
"comparedAt": "2026-07-03T13:49:04.790Z",
"nativePath": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json",
"webPath": "/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json",
"summary": {
"checkCount": 35,
"passCount": 35,
"failCount": 0,
"blockers": [],
"nativeStatus": "ok",
"webStatus": "ready-for-wasm-runtime"
},
"checks": [
{
"category": "profile",
"requirement": "native axis mask is XYZBC",
"status": "pass",
"evidence": {
"nativeAxisMask": 55
}
},
{
"category": "profile",
"requirement": "web default profile is xyzbc-trt",
"status": "pass",
"evidence": {
"webProfile": "xyzbc-trt"
}
},
{
"category": "ini",
"requirement": "native loaded xyzbc switchkins program",
"status": "pass",
"evidence": {
"nativeFile": "/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
}
},
{
"category": "ini",
"requirement": "web INI parse is ready",
"status": "pass",
"evidence": {
"webIniReady": true
}
},
{
"category": "switchkins",
"requirement": "native switchkins pin readable",
"status": "pass",
"evidence": {
"nativePin": {
"owner": "31",
"type": "float",
"direction": "IN",
"value": 0,
"linked": true,
"raw": " 31 float IN 0 motion.switchkins-type <== :kinstype-select"
}
}
},
{
"category": "switchkins",
"requirement": "web remap files staged",
"status": "pass",
"evidence": {
"remaps": [
{
"raw": "M428 modalgroup=10 ngc=428remap",
"code": "M428",
"modalGroup": 10,
"ngc": "428remap"
},
{
"raw": "M429 modalgroup=10 ngc=429remap",
"code": "M429",
"modalGroup": 10,
"ngc": "429remap"
},
{
"raw": "M430 modalgroup=10 ngc=430remap",
"code": "M430",
"modalGroup": 10,
"ngc": "430remap"
}
]
}
},
{
"category": "program",
"requirement": "web default xyzbc_switchkins program staged",
"status": "pass",
"evidence": {
"selected": {
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
"filename": "xyzbc_switchkins.ngc",
"wasmProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzbc_switchkins.ngc"
}
}
},
{
"category": "tool-table",
"requirement": "web tool table staged",
"status": "pass",
"evidence": {
"toolTable": "xyzbc-trt.tbl"
}
},
{
"category": "tool-table",
"requirement": "web tool table active offset drives kinematics, path, and Vismach",
"status": "pass",
"evidence": {
"toolRuntime": {
"activeToolNumber": 2,
"activePocket": 2,
"kinematicsToolOffsetZ": 10,
"pathTool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"vismachToolOffset": 10,
"defaultActivationUsed": true
},
"toolOffsetClosure": {
"sourceToolTable": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl",
"selectedProgramSourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc",
"programToolCommands": [],
"activeToolOffset": {
"idx": 2,
"toolNumber": 2,
"pocket": 2,
"offset": {
"x": 0,
"y": 0,
"z": 10,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"diameter": 8,
"frontAngle": 0,
"backAngle": 0,
"orientation": 0
},
"kinematicsToolOffsetZ": 10,
"pathTool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"vismachToolOffset": 10,
"closed": true,
"semanticBoundary": "tool_table_current_t_p_z_d_drives_kinematics_path_and_vismach"
}
}
},
{
"category": "pyvcp",
"requirement": "web PyVCP XML staged",
"status": "pass",
"evidence": {
"pyvcpXmlPath": "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml"
}
},
{
"category": "positions",
"requirement": "native joint feedback readable",
"status": "pass",
"evidence": {
"joints": {
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 0
}
}
},
{
"category": "wasm",
"requirement": "required WASM artifacts available",
"status": "pass",
"evidence": {
"missing": []
}
},
{
"category": "parameters",
"requirement": "parameter file staged",
"status": "pass",
"evidence": {
"parameterFile": "xyzbc.var"
}
},
{
"category": "program",
"requirement": "web boat-xyzbc demo program staged",
"status": "pass",
"evidence": {
"demoPrograms": [
{
"filename": "xyzbc_switchkins.ngc",
"default": true,
"staged": true,
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
},
{
"filename": "boat-xyzbc.ngc",
"default": false,
"staged": true,
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc"
}
]
}
},
{
"category": "ngcgui",
"requirement": "web Ngcgui/remap subroutines staged",
"status": "pass",
"evidence": {
"ngcguiSubroutines": [
{
"filename": "xyzbc_switchkins_sub.ngc",
"staged": true,
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/xyzbc_switchkins_sub.ngc",
"executable": true,
"motionEventCount": 29
},
{
"filename": "centering.ngc",
"staged": true,
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc",
"executable": true,
"motionEventCount": 80
},
{
"filename": "helix_bc.ngc",
"staged": true,
"sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc",
"executable": true,
"motionEventCount": 5
}
]
}
},
{
"category": "ngcgui",
"requirement": "web Ngcgui/remap subroutines execute through WASM interpreter wrappers",
"status": "pass",
"evidence": {
"ngcguiExecution": {
"ready": true,
"unavailableReason": null,
"subroutines": [
{
"filename": "xyzbc_switchkins_sub.ngc",
"staged": true,
"wrapperFilename": "ngcgui-wrapper-xyzbc_switchkins_sub.ngc",
"executable": true,
"motionEventCount": 29,
"switchkinsCodes": [],
"remapRuntimeReady": true,
"machineFileExecutionReady": true,
"finalAxes": {
"x": -10,
"y": 20,
"z": 10,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0,
"arc": {
"plane": 170,
"firstAxis": "x",
"secondAxis": "y",
"thirdAxis": "z",
"firstEnd": 0,
"secondEnd": 0,
"centerFirst": 10,
"centerSecond": 0,
"rotation": -3,
"axisEndPoint": 5
}
},
"semanticBoundary": "ngcgui_subroutine_executed_by_web_linuxcnc_interpreter_wasm"
},
{
"filename": "centering.ngc",
"staged": true,
"wrapperFilename": "ngcgui-wrapper-centering.ngc",
"executable": true,
"motionEventCount": 80,
"switchkinsCodes": [],
"remapRuntimeReady": true,
"machineFileExecutionReady": true,
"finalAxes": {
"x": 0,
"y": 0,
"z": 60,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0
},
"semanticBoundary": "ngcgui_subroutine_executed_by_web_linuxcnc_interpreter_wasm"
},
{
"filename": "helix_bc.ngc",
"staged": true,
"wrapperFilename": "ngcgui-wrapper-helix_bc.ngc",
"executable": true,
"motionEventCount": 5,
"switchkinsCodes": [],
"remapRuntimeReady": true,
"machineFileExecutionReady": true,
"finalAxes": {
"x": 10,
"y": 0,
"z": 10,
"a": 0,
"b": 0,
"c": 0,
"u": 0,
"v": 0,
"w": 0,
"arc": {
"plane": 170,
"firstAxis": "x",
"secondAxis": "y",
"thirdAxis": "z",
"firstEnd": 0,
"secondEnd": 0,
"centerFirst": 10,
"centerSecond": 0,
"rotation": -3,
"axisEndPoint": 5
}
},
"semanticBoundary": "ngcgui_subroutine_executed_by_web_linuxcnc_interpreter_wasm"
}
],
"semanticBoundary": "web_ngcgui_remap_subroutines_staged_and_executable"
}
}
},
{
"category": "postgui-hal",
"requirement": "web PyVCP to HALUI POSTGUI nets represented",
"status": "pass",
"evidence": {
"halNets": [
{
"signal": "kinstype-select",
"source": "motion.analog-out-03",
"target": "motion.switchkins-type",
"boundary": "ini-halcmd"
},
{
"signal": "table-x",
"source": "joint.0.pos-fb",
"target": "xyzbc-trt-gui.table-x",
"boundary": "ini-halcmd"
},
{
"signal": "saddle-y",
"source": "joint.1.pos-fb",
"target": "xyzbc-trt-gui.saddle-y",
"boundary": "ini-halcmd"
},
{
"signal": "spindle-z",
"source": "joint.2.pos-fb",
"target": "xyzbc-trt-gui.spindle-z",
"boundary": "ini-halcmd"
},
{
"signal": "tilt-b",
"source": "joint.3.pos-fb",
"target": "xyzbc-trt-gui.tilt-b",
"boundary": "ini-halcmd"
},
{
"signal": "rotate-c",
"source": "joint.4.pos-fb",
"target": "xyzbc-trt-gui.rotate-c",
"boundary": "ini-halcmd"
},
{
"signal": "tool-offset",
"source": "motion.tooloffset.z",
"target": "xyzbc-trt-kins.tool-offset",
"boundary": "ini-halcmd"
},
{
"signal": "tool-offset",
"source": "xyzbc-trt-kins.tool-offset",
"target": "xyzbc-trt-gui.tool-offset",
"boundary": "ini-halcmd"
},
{
"signal": "x-offset",
"source": "xyzbc-trt-kins.x-offset",
"target": "xyzbc-trt-gui.x-offset",
"boundary": "ini-halcmd"
},
{
"signal": "z-offset",
"source": "xyzbc-trt-kins.z-offset",
"target": "xyzbc-trt-gui.z-offset",
"boundary": "ini-halcmd"
},
{
"signal": "kinstype.is-0",
"source": "kinstype.is-0",
"target": "pyvcp.multilabel.0.legend0",
"boundary": "postgui-hal"
},
{
"signal": "kinstype.is-1",
"source": "kinstype.is-1",
"target": "pyvcp.multilabel.0.legend1",
"boundary": "postgui-hal"
},
{
"signal": "kinstype.is-2",
"source": "kinstype.is-2",
"target": "pyvcp.multilabel.0.legend2",
"boundary": "postgui-hal"
},
{
"signal": "vismach-clear",
"source": "pyvcp.vismach-clear",
"target": "vismach.plotclear",
"boundary": "postgui-hal"
},
{
"signal": "type0-button",
"source": "pyvcp.type0-button",
"target": "halui.mdi-command-00",
"command": "M429",
"boundary": "postgui-hal"
},
{
"signal": "type1-button",
"source": "pyvcp.type1-button",
"target": "halui.mdi-command-01",
"command": "M428",
"boundary": "postgui-hal"
},
{
"signal": "type2-button",
"source": "pyvcp.type2-button",
"target": "halui.mdi-command-02",
"command": "M430",
"boundary": "postgui-hal"
}
]
}
},
{
"category": "basic-sim",
"requirement": "native basic_sim joint/home/spindle/toolchange feedback readable",
"status": "pass",
"evidence": {
"basicSimEquivalent": {
"ready": true,
"source": "LIB:basic_sim.tcl native runtime",
"jointFeedback": {
"joint.0.pos-fb": 0,
"joint.1.pos-fb": 0,
"joint.2.pos-fb": 0,
"joint.3.pos-fb": 0,
"joint.4.pos-fb": 0
},
"homing": {
"firstFiveHomedBefore": [
false,
false,
false,
false,
false
],
"firstFiveHomedAfter": [
false,
false,
false,
false,
false
],
"allConfiguredAxesHomed": false
},
"manualToolChange": {
"toolOffsetZ": 0,
"toolOffsetLinked": true
},
"spindle": {
"speed": 0,
"feedrate": 1,
"rapidrate": 1
},
"execution": {
"completed": true,
"eventCount": 3
},
"semanticBoundary": "native_basic_sim_joint_home_spindle_manualtoolchange_feedback"
}
}
},
{
"category": "basic-sim",
"requirement": "web task/HAL basic_sim equivalent covers joint/home/spindle/toolchange feedback",
"status": "pass",
"evidence": {
"basicSimEquivalent": {
"ready": true,
"source": "web linuxcnc_task_hal WASM plus LinuxCNC task policy",
"jointFeedback": {
"joint.0.pos-fb": -10,
"joint.1.pos-fb": 20,
"joint.2.pos-fb": 10,
"joint.3.pos-fb": 0,
"joint.4.pos-fb": 0
},
"homing": {
"allConfiguredAxesHomed": true,
"taskPolicyCanHome": false
},
"manualToolChange": {
"activeToolNumber": 2,
"toolOffsetZ": 10
},
"spindle": {
"speed": 0,
"canSpindle": false
},
"execution": {
"completed": true,
"sampleCount": 228,
"taskHalEventCount": 28
},
"semanticBoundary": "web_basic_sim_joint_home_spindle_manualtoolchange_feedback"
},
"taskHalEquivalence": {
"ready": true,
"unavailableReason": null,
"taskHal": {
"semanticBoundary": "linuxcnc_task_motion_hal_wasm_simulation_runtime",
"sessionProgramPath": "/work/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt/demos/xyzbc_switchkins.ngc",
"completed": true,
"eventCount": 28
},
"taskPolicy": {
"taskState": "estop-reset",
"taskMode": "manual",
"interpState": "idle",
"canJog": false,
"canHome": false,
"canRunAuto": false,
"canExecuteMdi": false,
"canPause": false,
"canResume": false,
"canSpindle": false,
"canOverride": false
},
"taskHalStatusSummary": null,
"basicSimEquivalent": {
"ready": true,
"source": "web linuxcnc_task_hal WASM plus LinuxCNC task policy",
"jointFeedback": {
"joint.0.pos-fb": -10,
"joint.1.pos-fb": 20,
"joint.2.pos-fb": 10,
"joint.3.pos-fb": 0,
"joint.4.pos-fb": 0
},
"homing": {
"allConfiguredAxesHomed": true,
"taskPolicyCanHome": false
},
"manualToolChange": {
"activeToolNumber": 2,
"toolOffsetZ": 10
},
"spindle": {
"speed": 0,
"canSpindle": false
},
"execution": {
"completed": true,
"sampleCount": 228,
"taskHalEventCount": 28
},
"semanticBoundary": "web_basic_sim_joint_home_spindle_manualtoolchange_feedback"
},
"semanticBoundary": "web_task_hal_basic_sim_equivalent_state_flow"
}
}
},
{
"category": "kinematics",
"requirement": "web kinematics HAL pins represented",
"status": "pass",
"evidence": {
"kinematicsPins": {
"xOffset": -20,
"zOffset": -15,
"xRotPoint": 0,
"yRotPoint": 0,
"zRotPoint": 0,
"conventionalDirections": 0,
"toolOffsetSource": "motion.tooloffset.z",
"toolOffsetValue": 10,
"toolOffsetToolNumber": 2,
"pins": [
"motion.switchkins-type",
"motion.analog-out-03",
"motion.tooloffset.z",
"xyzbc-trt-kins.tool-offset",
"xyzbc-trt-kins.x-offset",
"xyzbc-trt-kins.z-offset",
"xyzbc-trt-kins.x-rot-point",
"xyzbc-trt-kins.y-rot-point",
"xyzbc-trt-kins.z-rot-point",
"xyzbc-trt-kins.conventional-directions",
"halui.mdi-command-00",
"halui.mdi-command-01",
"halui.mdi-command-02"
]
}
}
},
{
"category": "limits",
"requirement": "web TRAJ/AXIS/JOINT limits represented",
"status": "pass",
"evidence": {
"axisJointLimits": {
"coordinates": "XYZBC",
"linearUnits": "mm",
"angularUnits": "deg",
"jogAxes": [
"X",
"Y",
"Z",
"C"
],
"geometry": "XYZB",
"traj": {
"coordinates": "XYZBC",
"linearUnits": "mm",
"angularUnits": "deg",
"defaultLinearVelocity": 20,
"maxLinearVelocity": 35,
"defaultLinearAcceleration": 300,
"maxLinearAcceleration": 400
},
"axisLimits": {
"X": {
"min": -200,
"max": 200,
"maxVelocity": 20,
"maxAcceleration": 300
},
"Y": {
"min": -100,
"max": 100,
"maxVelocity": 20,
"maxAcceleration": 300
},
"Z": {
"min": -120,
"max": 120,
"maxVelocity": 20,
"maxAcceleration": 300
},
"B": {
"min": -36000,
"max": 36000,
"maxVelocity": 30,
"maxAcceleration": 300
},
"C": {
"min": -36000,
"max": 36000,
"maxVelocity": 30,
"maxAcceleration": 300
}
},
"jointCount": 5,
"jointConfig": [
{
"id": 0,
"axis": "X",
"type": "LINEAR",
"home": 0,
"min": -200,
"max": 200,
"maxVelocity": 20,
"maxAcceleration": 300,
"homeSearchVelocity": 0,
"homeSequence": 0
},
{
"id": 1,
"axis": "Y",
"type": "LINEAR",
"home": 0,
"min": -100,
"max": 100,
"maxVelocity": 20,
"maxAcceleration": 300,
"homeSearchVelocity": 0,
"homeSequence": 0
},
{
"id": 2,
"axis": "Z",
"type": "LINEAR",
"home": 0,
"min": -120,
"max": 120,
"maxVelocity": 20,
"maxAcceleration": 300,
"homeSearchVelocity": 0,
"homeSequence": 0
},
{
"id": 3,
"axis": "B",
"type": "ANGULAR",
"home": 0,
"min": -100,
"max": 50,
"maxVelocity": 30,
"maxAcceleration": 300,
"homeSearchVelocity": 0,
"homeSequence": 0
},
{
"id": 4,
"axis": "C",
"type": "ANGULAR",
"home": 0,
"min": -36000,
"max": 36000,
"maxVelocity": 30,
"maxAcceleration": 300,
"homeSearchVelocity": 0,
"homeSequence": 0
}
]
}
}
},
{
"category": "ui",
"requirement": "web AXIS first screen exposes program, coordinates, status, MDI/switchkins, override, tool, preview, and execution",
"status": "pass",
"evidence": {
"axisMainUi": {
"semanticBoundary": "xyzbc_trt_axis_first_screen_program_coordinates_status_mdi_switchkins_override_tool_preview_execution",
"firstViewport": "axis-equivalent-cnc-console",
"profileId": "xyzbc-trt",
"coordinates": "XYZBC",
"requiredSections": [
{
"id": "preview",
"section": "preview-toolpath-and-machine-model"
},
{
"id": "dro",
"section": "coordinates-dro"
},
{
"id": "gcode",
"section": "program-and-mdi"
},
{
"id": "status-sidebar",
"section": "status-mode-and-switchkins"
},
{
"id": "info-tabs",
"section": "execution-tool-and-runtime-state"
},
{
"id": "override",
"section": "feed-rapid-override"
},
{
"id": "spindle-coolant",
"section": "spindle-coolant"
},
{
"id": "bottom-controls",
"section": "run-jog-home-controls"
}
],
"axisButtonParity": {
"sourceFile": "/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"pyvcpSourceFiles": [
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
"configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal"
],
"requiredActions": [
"estop",
"power",
"open",
"reload",
"run-ready",
"run",
"pause",
"resume",
"step",
"stop",
"home-all",
"jog-minus",
"jog-plus",
"touch-off",
"tool-touch-off",
"spindle-forward",
"spindle-stop",
"spindle-reverse",
"feed-override-down",
"feed-override-up",
"rapid-override-down",
"rapid-override-up",
"spindle-override-down",
"spindle-override-up",
"ignore-limits",
"block-delete",
"optional-stop",
"toggle-flood",
"toggle-mist",
"mdi-form",
"mdi-history",
"kins-identity",
"kins-tcp",
"kins-userk",
"clear-preview",
"view-x",
"view-y",
"view-z",
"view-p"
],
"coveredActions": [
"open",
"reload",
"stage",
"save-session",
"restore-session",
"estop",
"power",
"home-all",
"run-ready",
"run",
"pause",
"resume",
"step",
"stop",
"view-z",
"view-y",
"view-x",
"view-p",
"clear-preview",
"audit",
"tab-manual",
"tab-mdi",
"select-joint",
"jog-increment",
"jog-minus",
"jog-plus",
"touch-off",
"tool-touch-off",
"spindle-reverse",
"spindle-stop",
"spindle-forward",
"feed-override-down",
"feed-override-up",
"rapid-override-down",
"rapid-override-up",
"spindle-override-down",
"spindle-override-up",
"ignore-limits",
"block-delete",
"optional-stop",
"toggle-flood",
"toggle-mist",
"mdi-form",
"mdi-history",
"kins-identity",
"kins-tcp",
"kins-userk"
],
"missingActions": [],
"buttonCount": 61,
"sourceReferencedCount": 61,
"ready": true
},
"buttons": [
{
"id": "menu-open",
"action": "open",
"sourceSymbol": "commands.open_file",
"sourceLines": "axis.py:2243-2262",
"expected": "file picker opens without changing runtime state"
},
{
"id": "menu-reload",
"action": "reload",
"sourceSymbol": "commands.reload_file",
"sourceLines": "axis.py:2296-2297",
"expected": "program reload resets active playback state"
},
{
"id": "menu-stage",
"action": "stage",
"sourceSymbol": "web OPFS staging for DISPLAY PROGRAM_PREFIX",
"sourceLines": "xyzbc-trt.ini:[DISPLAY] PROGRAM_PREFIX",
"expected": "LinuxCNC profile files are staged"
},
{
"id": "menu-save-session",
"action": "save-session",
"sourceSymbol": "web session persistence",
"sourceLines": "five-axis-session.js",
"expected": "session snapshot is requested"
},
{
"id": "menu-restore-session",
"action": "restore-session",
"sourceSymbol": "web session persistence",
"sourceLines": "five-axis-session.js",
"expected": "session restore is requested"
},
{
"id": "menu-estop",
"action": "estop",
"sourceSymbol": "commands.estop_clicked",
"sourceLines": "axis.py:2223-2229",
"expected": "toggle ESTOP/ESTOP_RESET"
},
{
"id": "menu-power",
"action": "power",
"sourceSymbol": "commands.onoff_clicked",
"sourceLines": "axis.py:2231-2241",
"expected": "toggle machine ON/OFF after estop reset"
},
{
"id": "menu-home-all",
"action": "home-all",
"sourceSymbol": "commands.home_all_joints",
"sourceLines": "axis.py:2586-2596",
"expected": "home all joints in manual mode"
},
{
"id": "menu-run-ready",
"action": "run-ready",
"sourceSymbol": "AXIS run preconditions",
"sourceLines": "axis.py:2308-2320",
"expected": "power on, home, auto mode and TCP kins ready"
},
{
"id": "menu-run",
"action": "run",
"sourceSymbol": "commands.task_run",
"sourceLines": "axis.py:2308-2320",
"expected": "AUTO_RUN from current start line"
},
{
"id": "menu-pause",
"action": "pause",
"sourceSymbol": "commands.task_pause",
"sourceLines": "axis.py:2329-2333",
"expected": "AUTO_PAUSE when running"
},
{
"id": "menu-resume",
"action": "resume",
"sourceSymbol": "commands.task_resume",
"sourceLines": "axis.py:2344-2351",
"expected": "AUTO_RESUME when paused"
},
{
"id": "menu-step",
"action": "step",
"sourceSymbol": "commands.task_step",
"sourceLines": "axis.py:2321-2327",
"expected": "AUTO_STEP one cycle/segment"
},
{
"id": "menu-stop",
"action": "stop",
"sourceSymbol": "commands.task_stop",
"sourceLines": "axis.py:2365-2372",
"expected": "abort current task"
},
{
"id": "menu-view-z",
"action": "view-z",
"sourceSymbol": "commands.set_view_z",
"sourceLines": "axis.py:2208-2215",
"expected": "select top Z camera"
},
{
"id": "menu-view-y",
"action": "view-y",
"sourceSymbol": "commands.set_view_y",
"sourceLines": "axis.py:2192-2200",
"expected": "select front Y camera"
},
{
"id": "menu-view-x",
"action": "view-x",
"sourceSymbol": "commands.set_view_x",
"sourceLines": "axis.py:2182-2190",
"expected": "select side X camera"
},
{
"id": "menu-view-p",
"action": "view-p",
"sourceSymbol": "commands.set_view_p",
"sourceLines": "axis.py:2220-2221",
"expected": "select perspective/fit camera"
},
{
"id": "menu-clear-preview",
"action": "clear-preview",
"sourceSymbol": "commands.clear_live_plot",
"sourceLines": "axis.py:2557-2558",
"expected": "clear live plot buffer"
},
{
"id": "menu-audit",
"action": "audit",
"sourceSymbol": "web parity audit",
"sourceLines": "collect-web-xyzbc-trt-evidence.mjs",
"expected": "request native/Web parity audit"
},
{
"id": "toolbar-estop",
"action": "estop",
"sourceSymbol": "commands.estop_clicked",
"sourceLines": "axis.py:2223-2229",
"expected": "toggle ESTOP/ESTOP_RESET"
},
{
"id": "toolbar-power",
"action": "power",
"sourceSymbol": "commands.onoff_clicked",
"sourceLines": "axis.py:2231-2241",
"expected": "toggle machine power"
},
{
"id": "toolbar-load",
"action": "open",
"sourceSymbol": "commands.open_file",
"sourceLines": "axis.py:2243-2262",
"expected": "open local G-code"
},
{
"id": "toolbar-reload",
"action": "reload",
"sourceSymbol": "commands.reload_file",
"sourceLines": "axis.py:2296-2297",
"expected": "reload active program"
},
{
"id": "toolbar-run",
"action": "run",
"sourceSymbol": "commands.task_run",
"sourceLines": "axis.py:2308-2320",
"expected": "start AUTO run"
},
{
"id": "toolbar-pause-resume",
"action": "pause",
"sourceSymbol": "commands.task_pauseresume",
"sourceLines": "axis.py:2353-2363",
"expected": "pause or resume based on paused state"
},
{
"id": "toolbar-step",
"action": "step",
"sourceSymbol": "commands.task_step",
"sourceLines": "axis.py:2321-2327",
"expected": "single step"
},
{
"id": "toolbar-stop",
"action": "stop",
"sourceSymbol": "commands.task_stop",
"sourceLines": "axis.py:2365-2372",
"expected": "abort current task"
},
{
"id": "toolbar-view-z",
"action": "view-z",
"sourceSymbol": "commands.set_view_z",
"sourceLines": "axis.py:2208-2215",
"expected": "Z view"
},
{
"id": "toolbar-view-y",
"action": "view-y",
"sourceSymbol": "commands.set_view_y",
"sourceLines": "axis.py:2192-2200",
"expected": "Y view"
},
{
"id": "toolbar-view-x",
"action": "view-x",
"sourceSymbol": "commands.set_view_x",
"sourceLines": "axis.py:2182-2190",
"expected": "X view"
},
{
"id": "toolbar-view-p",
"action": "view-p",
"sourceSymbol": "commands.set_view_p",
"sourceLines": "axis.py:2220-2221",
"expected": "perspective view"
},
{
"id": "toolbar-clear-preview",
"action": "clear-preview",
"sourceSymbol": "commands.clear_live_plot",
"sourceLines": "axis.py:2557-2558",
"expected": "clear path count"
},
{
"id": "manual-tab",
"action": "tab-manual",
"sourceSymbol": "commands.ensure_manual",
"sourceLines": "axis.py:2520-2531",
"expected": "manual mode tab selected"
},
{
"id": "mdi-tab",
"action": "tab-mdi",
"sourceSymbol": "commands.ensure_mdi",
"sourceLines": "axis.py:2533-2540",
"expected": "MDI mode tab selected"
},
{
"id": "manual-select-joint",
"action": "select-joint",
"sourceSymbol": "axis radiobuttons ja_rbutton",
"sourceLines": "axis.py:1369-1380",
"expected": "active joint/axis selected"
},
{
"id": "manual-jog-increment",
"action": "jog-increment",
"sourceSymbol": "set_hal_jogincrement",
"sourceLines": "axis.py:1507-1515",
"expected": "jog increment updates HAL-equivalent state"
},
{
"id": "manual-jog-minus",
"action": "jog-minus",
"sourceSymbol": "commands.jog_minus",
"sourceLines": "axis.py:2573-2577",
"expected": "negative jog of active axis/joint"
},
{
"id": "manual-jog-plus",
"action": "jog-plus",
"sourceSymbol": "commands.jog_plus",
"sourceLines": "axis.py:2567-2571",
"expected": "positive jog of active axis/joint"
},
{
"id": "manual-touch-off",
"action": "touch-off",
"sourceSymbol": "commands.touch_off_system",
"sourceLines": "axis.py:2631-2650",
"expected": "G10 touch off MDI equivalent"
},
{
"id": "manual-tool-touch-off",
"action": "tool-touch-off",
"sourceSymbol": "commands.touch_off_tool",
"sourceLines": "axis.py:2651-2685",
"expected": "tool length offset equivalent"
},
{
"id": "manual-spindle-reverse",
"action": "spindle-reverse",
"sourceSymbol": "spindle CCW control",
"sourceLines": "axis.py:1389-1398",
"expected": "spindle reverse"
},
{
"id": "manual-spindle-stop",
"action": "spindle-stop",
"sourceSymbol": "spindle stop control",
"sourceLines": "axis.py:1389-1398",
"expected": "spindle stop"
},
{
"id": "manual-spindle-forward",
"action": "spindle-forward",
"sourceSymbol": "spindle CW control",
"sourceLines": "axis.py:1389-1398",
"expected": "spindle forward"
},
{
"id": "override-feed-down",
"action": "feed-override-down",
"sourceSymbol": "commands.set_feedrate",
"sourceLines": "axis.py:2131-2137",
"expected": "feed override down"
},
{
"id": "override-feed-up",
"action": "feed-override-up",
"sourceSymbol": "commands.set_feedrate",
"sourceLines": "axis.py:2131-2137",
"expected": "feed override up"
},
{
"id": "override-rapid-down",
"action": "rapid-override-down",
"sourceSymbol": "commands.set_rapidrate",
"sourceLines": "axis.py:2139-2145",
"expected": "rapid override down"
},
{
"id": "override-rapid-up",
"action": "rapid-override-up",
"sourceSymbol": "commands.set_rapidrate",
"sourceLines": "axis.py:2139-2145",
"expected": "rapid override up"
},
{
"id": "override-spindle-down",
"action": "spindle-override-down",
"sourceSymbol": "commands.set_spindlerate",
"sourceLines": "axis.py:2122-2129",
"expected": "spindle override down"
},
{
"id": "override-spindle-up",
"action": "spindle-override-up",
"sourceSymbol": "commands.set_spindlerate",
"sourceLines": "axis.py:2122-2129",
"expected": "spindle override up"
},
{
"id": "manual-ignore-limits",
"action": "ignore-limits",
"sourceSymbol": "commands.toggle_override_limits",
"sourceLines": "axis.py:3161",
"expected": "limit override checkbox state"
},
{
"id": "manual-block-delete",
"action": "block-delete",
"sourceSymbol": "commands.toggle_block_delete",
"sourceLines": "axis.py:2051-2059",
"expected": "block delete state"
},
{
"id": "manual-optional-stop",
"action": "optional-stop",
"sourceSymbol": "commands.toggle_optional_stop",
"sourceLines": "axis.py:2047-2049",
"expected": "optional stop state"
},
{
"id": "manual-flood",
"action": "toggle-flood",
"sourceSymbol": "commands.flood_toggle",
"sourceLines": "axis.py:3176",
"expected": "flood coolant toggle"
},
{
"id": "manual-mist",
"action": "toggle-mist",
"sourceSymbol": "commands.mist_toggle",
"sourceLines": "axis.py:3175",
"expected": "mist coolant toggle"
},
{
"id": "mdi-submit",
"action": "mdi-form",
"sourceSymbol": "commands.send_mdi",
"sourceLines": "axis.py:2413-2417",
"expected": "submit MDI command"
},
{
"id": "mdi-history",
"action": "mdi-history",
"sourceSymbol": "commands.mdi_history_butt_1",
"sourceLines": "axis.py:2499-2516",
"expected": "run/restore MDI history command"
},
{
"id": "pyvcp-identity",
"action": "kins-identity",
"sourceSymbol": "pyvcp.type0-button -> halui.mdi-command-00",
"sourceLines": "switchkins_postgui.hal",
"expected": "M429 sets identity kins"
},
{
"id": "pyvcp-tcp",
"action": "kins-tcp",
"sourceSymbol": "pyvcp.type1-button -> halui.mdi-command-01",
"sourceLines": "switchkins_postgui.hal",
"expected": "M428 sets tcp-xyzbc kins"
},
{
"id": "pyvcp-userk",
"action": "kins-userk",
"sourceSymbol": "pyvcp.type2-button -> halui.mdi-command-02",
"sourceLines": "switchkins_postgui.hal",
"expected": "M430 sets userk kins"
},
{
"id": "pyvcp-clear",
"action": "clear-preview",
"sourceSymbol": "pyvcp.vismach-clear -> vismach.plotclear",
"sourceLines": "switchkins_postgui.hal",
"expected": "clear Vismach plot"
}
],
"capabilities": [
{
"id": "program",
"ready": true,
"evidence": "configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
},
{
"id": "coordinates",
"ready": true,
"evidence": {
"coordinates": "XYZBC",
"droAxes": [
"X",
"Y",
"Z",
"B",
"C"
]
}
},
{
"id": "status",
"ready": true,
"evidence": {
"taskState": "estop-reset",
"mode": "manual",
"runState": "idle"
}
},
{
"id": "mdi",
"ready": true,
"evidence": {
"command": "G0 X0 Y0 Z0",
"switchkinsMdi": [
"M429",
"M428",
"M430"
]
}
},
{
"id": "switchkins",
"ready": true,
"evidence": [
{
"value": 0,
"label": "identity",
"mdiCommand": "M429",
"webKinsType": "identity",
"remap": {
"code": "M429",
"modalGroup": 10,
"ngc": "429remap",
"path": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc",
"switchkinsType": 0,
"analogOutputIndex": 3,
"syncInputIndex": 0,
"requiresHalPinVars": true
},
"haluiCommand": "M429",
"halPin": "motion.switchkins-type"
},
{
"value": 1,
"label": "XYZBC TCP",
"mdiCommand": "M428",
"webKinsType": "tcp-xyzbc",
"remap": {
"code": "M428",
"modalGroup": 10,
"ngc": "428remap",
"path": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc",
"switchkinsType": 1,
"analogOutputIndex": 3,
"syncInputIndex": 0,
"requiresHalPinVars": true
},
"haluiCommand": "M428",
"halPin": "motion.switchkins-type"
},
{
"value": 2,
"label": "USERK",
"mdiCommand": "M430",
"webKinsType": "userk",
"remap": {
"code": "M430",
"modalGroup": 10,
"ngc": "430remap",
"path": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc",
"switchkinsType": 2,
"analogOutputIndex": 3,
"syncInputIndex": 0,
"requiresHalPinVars": true
},
"haluiCommand": "M430",
"halPin": "motion.switchkins-type"
}
]
},
{
"id": "override",
"ready": true,
"evidence": {
"feedOverride": 100,
"rapidOverride": 100
}
},
{
"id": "tool",
"ready": true,
"evidence": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
}
},
{
"id": "preview",
"ready": true,
"evidence": {
"samplePeriodMs": 50,
"sampleCount": 1300
}
},
{
"id": "execution",
"ready": true,
"evidence": {
"samplePeriodMs": 50,
"sampleCount": 228
}
},
{
"id": "axis-buttons",
"ready": true,
"evidence": {
"canRunAuto": false,
"canExecuteMdi": false,
"canJog": false,
"canHome": false,
"axisButtonParity": {
"sourceFile": "/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"pyvcpSourceFiles": [
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
"configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal"
],
"requiredActions": [
"estop",
"power",
"open",
"reload",
"run-ready",
"run",
"pause",
"resume",
"step",
"stop",
"home-all",
"jog-minus",
"jog-plus",
"touch-off",
"tool-touch-off",
"spindle-forward",
"spindle-stop",
"spindle-reverse",
"feed-override-down",
"feed-override-up",
"rapid-override-down",
"rapid-override-up",
"spindle-override-down",
"spindle-override-up",
"ignore-limits",
"block-delete",
"optional-stop",
"toggle-flood",
"toggle-mist",
"mdi-form",
"mdi-history",
"kins-identity",
"kins-tcp",
"kins-userk",
"clear-preview",
"view-x",
"view-y",
"view-z",
"view-p"
],
"coveredActions": [
"open",
"reload",
"stage",
"save-session",
"restore-session",
"estop",
"power",
"home-all",
"run-ready",
"run",
"pause",
"resume",
"step",
"stop",
"view-z",
"view-y",
"view-x",
"view-p",
"clear-preview",
"audit",
"tab-manual",
"tab-mdi",
"select-joint",
"jog-increment",
"jog-minus",
"jog-plus",
"touch-off",
"tool-touch-off",
"spindle-reverse",
"spindle-stop",
"spindle-forward",
"feed-override-down",
"feed-override-up",
"rapid-override-down",
"rapid-override-up",
"spindle-override-down",
"spindle-override-up",
"ignore-limits",
"block-delete",
"optional-stop",
"toggle-flood",
"toggle-mist",
"mdi-form",
"mdi-history",
"kins-identity",
"kins-tcp",
"kins-userk"
],
"missingActions": [],
"buttonCount": 61,
"sourceReferencedCount": 61,
"ready": true
}
}
}
],
"missingCapabilities": [],
"ready": true
}
}
},
{
"category": "ui",
"requirement": "web AXIS/PyVCP buttons are source-referenced and covered by a button-level parity matrix",
"status": "pass",
"evidence": {
"axisButtonParity": {
"sourceFile": "/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py",
"pyvcpSourceFiles": [
"configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml",
"configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal"
],
"requiredActions": [
"estop",
"power",
"open",
"reload",
"run-ready",
"run",
"pause",
"resume",
"step",
"stop",
"home-all",
"jog-minus",
"jog-plus",
"touch-off",
"tool-touch-off",
"spindle-forward",
"spindle-stop",
"spindle-reverse",
"feed-override-down",
"feed-override-up",
"rapid-override-down",
"rapid-override-up",
"spindle-override-down",
"spindle-override-up",
"ignore-limits",
"block-delete",
"optional-stop",
"toggle-flood",
"toggle-mist",
"mdi-form",
"mdi-history",
"kins-identity",
"kins-tcp",
"kins-userk",
"clear-preview",
"view-x",
"view-y",
"view-z",
"view-p"
],
"coveredActions": [
"open",
"reload",
"stage",
"save-session",
"restore-session",
"estop",
"power",
"home-all",
"run-ready",
"run",
"pause",
"resume",
"step",
"stop",
"view-z",
"view-y",
"view-x",
"view-p",
"clear-preview",
"audit",
"tab-manual",
"tab-mdi",
"select-joint",
"jog-increment",
"jog-minus",
"jog-plus",
"touch-off",
"tool-touch-off",
"spindle-reverse",
"spindle-stop",
"spindle-forward",
"feed-override-down",
"feed-override-up",
"rapid-override-down",
"rapid-override-up",
"spindle-override-down",
"spindle-override-up",
"ignore-limits",
"block-delete",
"optional-stop",
"toggle-flood",
"toggle-mist",
"mdi-form",
"mdi-history",
"kins-identity",
"kins-tcp",
"kins-userk"
],
"missingActions": [],
"buttonCount": 61,
"sourceReferencedCount": 61,
"ready": true
}
}
},
{
"category": "ui",
"requirement": "web UI state flow, buttons, HAL pins, and paths are rechecked against native xyzbc-trt runtime",
"status": "pass",
"evidence": {
"nativeTaskStateFlow": {
"ready": true,
"executionCompleted": true,
"eventCount": 3,
"states": [
{
"name": "before",
"taskState": 4,
"taskMode": 1,
"interpState": 1,
"execState": 2,
"homed": [
false,
false,
false,
false,
false
],
"file": "/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
},
{
"name": "after",
"taskState": 4,
"taskMode": 1,
"interpState": 1,
"execState": 2,
"homed": [
false,
false,
false,
false,
false
],
"file": "/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc"
}
],
"kinstype": 0,
"semanticBoundary": "native_linuxcnc_estop_power_home_auto_mdi_interlock_state_flow"
},
"webNativeStateFlowReview": {
"ready": true,
"source": "web_task_hal_basic_sim_equivalent_state_flow",
"stateFields": [
"taskState",
"taskMode",
"interpState",
"estop",
"enabled",
"homed",
"kinstype"
],
"buttonInterlocks": {
"taskState": "estop-reset",
"taskMode": "manual",
"interpState": "idle",
"canJog": false,
"canHome": false,
"canRunAuto": false,
"canExecuteMdi": false,
"canPause": false,
"canResume": false,
"canSpindle": false,
"canOverride": false
},
"switchkinsButtons": [
{
"command": "M429",
"gatedBy": "machine on and interpreter idle",
"represented": true
},
{
"command": "M428",
"gatedBy": "machine on and interpreter idle",
"represented": true
},
{
"command": "M430",
"gatedBy": "machine on and interpreter idle",
"represented": true
}
],
"pathHalPinsReviewed": [
"motion.switchkins-type",
"motion.analog-out-03",
"motion.tooloffset.z",
"joint.0.pos-fb",
"joint.1.pos-fb",
"joint.2.pos-fb",
"joint.3.pos-fb",
"joint.4.pos-fb"
],
"semanticBoundary": "web_ui_rechecked_against_native_xyzbc_trt_state_flow_buttons_hal_pins_paths"
}
}
},
{
"category": "path-preview",
"requirement": "native and web preview path sample period is 50ms",
"status": "pass",
"evidence": {
"nativeSamplePeriodMs": 50,
"webSamplePeriodMs": 50
}
},
{
"category": "path-preview",
"requirement": "native and web preview paths have samples",
"status": "pass",
"evidence": {
"nativeSampleCount": 1300,
"webSampleCount": 1300,
"unavailable": []
}
},
{
"category": "path-preview",
"requirement": "native and web preview tool paths are geometrically aligned",
"status": "pass",
"evidence": {
"thresholds": {
"maxTcpErrorMm": 0.001,
"maxJointError": 0.001,
"maxToolAxisAngleDeg": 0.001,
"sampleCountDelta": 0
},
"maxTcpErrorMm": 3.552713678800501e-15,
"rmsTcpErrorMm": 4.515420281608176e-16,
"maxJointError": 3.552713678800501e-15,
"maxToolAxisAngleDeg": 0,
"sampleCountDelta": 0
}
},
{
"category": "path-execution",
"requirement": "native and web execution path sample period is 50ms",
"status": "pass",
"evidence": {
"nativeSamplePeriodMs": 50,
"webSamplePeriodMs": 50
}
},
{
"category": "path-execution",
"requirement": "native and web execution paths have samples",
"status": "pass",
"evidence": {
"nativeSampleCount": 4,
"webSampleCount": 228,
"unavailable": []
}
},
{
"category": "path-execution",
"requirement": "native and web source-expanded execution paths are geometrically aligned",
"status": "pass",
"evidence": {
"thresholds": {
"maxTcpErrorMm": 0.001,
"maxJointError": 0.001,
"maxToolAxisAngleDeg": 0.001,
"sampleCountDelta": 0
},
"nativeSampleCount": 1300,
"webSampleCount": 1300,
"maxTcpErrorMm": 3.552713678800501e-15,
"rmsTcpErrorMm": 4.515420281608176e-16,
"maxJointError": 3.552713678800501e-15,
"maxToolAxisAngleDeg": 0,
"machineStateMismatchCount": 0,
"sampleCountDelta": 0
}
},
{
"category": "line-execution",
"requirement": "native and web per-line G-code execution trace matches",
"status": "pass",
"evidence": {
"nativeTraceCount": 64,
"webTraceCount": 64,
"mismatchCount": 0,
"mismatches": []
}
},
{
"category": "axis-values",
"requirement": "native and web actual axis values by executed line match",
"status": "pass",
"evidence": {
"nativeLineValueCount": 29,
"webLineValueCount": 29,
"thresholds": {
"maxTcpErrorMm": 0.001,
"maxJointError": 0.001,
"maxToolAxisAngleDeg": 0.001
},
"maxTcpErrorMm": 0,
"maxJointError": 0,
"maxToolAxisAngleDeg": 0,
"mismatchCount": 0,
"mismatches": []
}
},
{
"category": "gcode-process",
"requirement": "native and web complete G-code execution process JSON matches",
"status": "pass",
"evidence": {
"nativeExecutionStepCount": 128,
"webExecutionStepCount": 128,
"nativeSourceLineCoverageCount": 65,
"webSourceLineCoverageCount": 65,
"mismatchCount": 0,
"mismatches": []
}
},
{
"category": "path-preview-execution-consistency",
"requirement": "native preview and execution paths are comparable",
"status": "pass",
"evidence": {
"nativePreviewSampleCount": 1300,
"nativeExecutionSampleCount": 4,
"unavailable": []
}
},
{
"category": "path-preview-execution-consistency",
"requirement": "web preview and execution paths are comparable",
"status": "pass",
"evidence": {
"webPreviewSampleCount": 1300,
"webExecutionSampleCount": 228,
"unavailable": []
}
}
],
"pathComparison": {
"samplePeriodMs": 50,
"previewVsPreview": {
"status": "pass",
"comparable": true,
"geometricAligned": true,
"thresholds": {
"maxTcpErrorMm": 0.001,
"maxJointError": 0.001,
"maxToolAxisAngleDeg": 0.001,
"sampleCountDelta": 0
},
"periodsMatch": true,
"nativeSamplePeriodMs": 50,
"webSamplePeriodMs": 50,
"leftSampleCount": 1300,
"rightSampleCount": 1300,
"nativeSampleCount": 1300,
"webSampleCount": 1300,
"unavailable": [],
"maxTcpErrorMm": 3.552713678800501e-15,
"rmsTcpErrorMm": 4.515420281608176e-16,
"maxJointError": 3.552713678800501e-15,
"rmsJointError": 4.515420281608176e-16,
"maxToolAxisAngleDeg": 0,
"sampleCountDelta": 0,
"missingSamples": [],
"machineStateMismatchCount": 0,
"machineStateMismatches": []
},
"executionVsExecution": {
"status": "pass",
"comparable": true,
"geometricAligned": true,
"thresholds": null,
"periodsMatch": true,
"nativeSamplePeriodMs": 50,
"webSamplePeriodMs": 50,
"leftSampleCount": 4,
"rightSampleCount": 228,
"nativeSampleCount": 4,
"webSampleCount": 228,
"unavailable": [],
"maxTcpErrorMm": 5.61798,
"rmsTcpErrorMm": 3.846366141275425,
"maxJointError": 5.61798,
"rmsJointError": 3.846366141275425,
"maxToolAxisAngleDeg": 0,
"sampleCountDelta": 224,
"missingSamples": [],
"machineStateMismatchCount": 4,
"machineStateMismatches": [
{
"index": 0,
"native": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1,
"actualMmPerMin": 1,
"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
}
},
"web": {
"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
}
}
},
{
"index": 1,
"native": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1,
"actualMmPerMin": 1,
"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
}
},
"web": {
"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
}
}
},
{
"index": 2,
"native": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1,
"actualMmPerMin": 1,
"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
}
},
"web": {
"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
}
}
},
{
"index": 3,
"native": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1,
"actualMmPerMin": 1,
"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
}
},
"web": {
"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
}
}
}
]
},
"semanticExecutionVsSemanticExecution": {
"status": "pass",
"comparable": true,
"geometricAligned": true,
"thresholds": {
"maxTcpErrorMm": 0.001,
"maxJointError": 0.001,
"maxToolAxisAngleDeg": 0.001,
"sampleCountDelta": 0
},
"periodsMatch": true,
"nativeSamplePeriodMs": 50,
"webSamplePeriodMs": 50,
"leftSampleCount": 1300,
"rightSampleCount": 1300,
"nativeSampleCount": 1300,
"webSampleCount": 1300,
"unavailable": [],
"maxTcpErrorMm": 3.552713678800501e-15,
"rmsTcpErrorMm": 4.515420281608176e-16,
"maxJointError": 3.552713678800501e-15,
"rmsJointError": 4.515420281608176e-16,
"maxToolAxisAngleDeg": 0,
"sampleCountDelta": 0,
"missingSamples": [],
"machineStateMismatchCount": 0,
"machineStateMismatches": []
},
"previewVsExecutionNative": {
"status": "pass",
"comparable": true,
"geometricAligned": true,
"thresholds": null,
"periodsMatch": true,
"nativePreviewSamplePeriodMs": 50,
"nativeExecutionSamplePeriodMs": 50,
"leftSampleCount": 1300,
"rightSampleCount": 4,
"unavailable": [],
"maxTcpErrorMm": 10.539101686569952,
"rmsTcpErrorMm": 10.171539097523873,
"maxJointError": 10.539101686569952,
"rmsJointError": 10.171539097523873,
"maxToolAxisAngleDeg": 0,
"sampleCountDelta": 1296,
"missingSamples": [],
"machineStateMismatchCount": 4,
"machineStateMismatches": [
{
"index": 0,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1,
"actualMmPerMin": 1,
"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
}
}
},
{
"index": 1,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1,
"actualMmPerMin": 1,
"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
}
}
},
{
"index": 2,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1,
"actualMmPerMin": 1,
"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
}
}
},
{
"index": 3,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1,
"actualMmPerMin": 1,
"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
}
}
}
]
},
"previewVsExecutionWeb": {
"status": "pass",
"comparable": true,
"geometricAligned": true,
"thresholds": null,
"periodsMatch": true,
"webPreviewSamplePeriodMs": 50,
"webExecutionSamplePeriodMs": 50,
"leftSampleCount": 1300,
"rightSampleCount": 228,
"unavailable": [],
"maxTcpErrorMm": 38.302720817901054,
"rmsTcpErrorMm": 27.083943307199817,
"maxJointError": 60.1956712201985,
"rmsJointError": 30.61792131178714,
"maxToolAxisAngleDeg": 19.999999999999993,
"sampleCountDelta": 1072,
"missingSamples": [],
"machineStateMismatchCount": 211,
"machineStateMismatches": [
{
"index": 17,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1000.002,
"actualMmPerMin": 1000.002,
"overridePercent": 100
},
"cutting": {
"active": true,
"cuttingSpeedMmPerMin": 1000.002
},
"tool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"toolChange": {
"activeTool": 2,
"activePocket": 2,
"changed": false,
"command": null
},
"coolant": {
"mist": false,
"flood": false
}
}
},
{
"index": 18,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1000.002,
"actualMmPerMin": 1000.002,
"overridePercent": 100
},
"cutting": {
"active": true,
"cuttingSpeedMmPerMin": 1000.002
},
"tool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"toolChange": {
"activeTool": 2,
"activePocket": 2,
"changed": false,
"command": null
},
"coolant": {
"mist": false,
"flood": false
}
}
},
{
"index": 19,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1000.002,
"actualMmPerMin": 1000.002,
"overridePercent": 100
},
"cutting": {
"active": true,
"cuttingSpeedMmPerMin": 1000.002
},
"tool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"toolChange": {
"activeTool": 2,
"activePocket": 2,
"changed": false,
"command": null
},
"coolant": {
"mist": false,
"flood": false
}
}
},
{
"index": 20,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1000.002,
"actualMmPerMin": 1000.002,
"overridePercent": 100
},
"cutting": {
"active": true,
"cuttingSpeedMmPerMin": 1000.002
},
"tool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"toolChange": {
"activeTool": 2,
"activePocket": 2,
"changed": false,
"command": null
},
"coolant": {
"mist": false,
"flood": false
}
}
},
{
"index": 21,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1000.002,
"actualMmPerMin": 1000.002,
"overridePercent": 100
},
"cutting": {
"active": true,
"cuttingSpeedMmPerMin": 1000.002
},
"tool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"toolChange": {
"activeTool": 2,
"activePocket": 2,
"changed": false,
"command": null
},
"coolant": {
"mist": false,
"flood": false
}
}
},
{
"index": 22,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1000.002,
"actualMmPerMin": 1000.002,
"overridePercent": 100
},
"cutting": {
"active": true,
"cuttingSpeedMmPerMin": 1000.002
},
"tool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"toolChange": {
"activeTool": 2,
"activePocket": 2,
"changed": false,
"command": null
},
"coolant": {
"mist": false,
"flood": false
}
}
},
{
"index": 23,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1000.002,
"actualMmPerMin": 1000.002,
"overridePercent": 100
},
"cutting": {
"active": true,
"cuttingSpeedMmPerMin": 1000.002
},
"tool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"toolChange": {
"activeTool": 2,
"activePocket": 2,
"changed": false,
"command": null
},
"coolant": {
"mist": false,
"flood": false
}
}
},
{
"index": 24,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1000.002,
"actualMmPerMin": 1000.002,
"overridePercent": 100
},
"cutting": {
"active": true,
"cuttingSpeedMmPerMin": 1000.002
},
"tool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"toolChange": {
"activeTool": 2,
"activePocket": 2,
"changed": false,
"command": null
},
"coolant": {
"mist": false,
"flood": false
}
}
},
{
"index": 25,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1000.002,
"actualMmPerMin": 1000.002,
"overridePercent": 100
},
"cutting": {
"active": true,
"cuttingSpeedMmPerMin": 1000.002
},
"tool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"toolChange": {
"activeTool": 2,
"activePocket": 2,
"changed": false,
"command": null
},
"coolant": {
"mist": false,
"flood": false
}
}
},
{
"index": 26,
"native": {
"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
}
},
"web": {
"spindle": {
"speedRpm": 0,
"direction": "stopped",
"enabled": false
},
"feed": {
"programmedMmPerMin": 1000.002,
"actualMmPerMin": 1000.002,
"overridePercent": 100
},
"cutting": {
"active": true,
"cuttingSpeedMmPerMin": 1000.002
},
"tool": {
"id": 2,
"pocket": 2,
"length": 10,
"diameter": 8
},
"toolChange": {
"activeTool": 2,
"activePocket": 2,
"changed": false,
"command": null
},
"coolant": {
"mist": false,
"flood": false
}
}
}
]
}
},
"lineExecutionComparison": {
"status": "pass",
"nativeTraceCount": 64,
"webTraceCount": 64,
"mismatchCount": 0,
"mismatches": [],
"semanticBoundary": "native_web_line_by_line_gcode_execution_trace_comparison"
},
"axisValuesByLineComparison": {
"status": "pass",
"nativeLineValueCount": 29,
"webLineValueCount": 29,
"thresholds": {
"maxTcpErrorMm": 0.001,
"maxJointError": 0.001,
"maxToolAxisAngleDeg": 0.001
},
"maxTcpErrorMm": 0,
"maxJointError": 0,
"maxToolAxisAngleDeg": 0,
"mismatchCount": 0,
"mismatches": [],
"semanticBoundary": "native_web_executed_line_axis_values_comparison"
},
"gcodeExecutionProcessComparison": {
"status": "pass",
"nativeExecutionStepCount": 128,
"webExecutionStepCount": 128,
"nativeSourceLineCoverageCount": 65,
"webSourceLineCoverageCount": 65,
"nativeSummary": {
"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"
},
"webSummary": {
"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"
},
"mismatchCount": 0,
"mismatches": [],
"semanticBoundary": "native_web_complete_gcode_execution_process_json_comparison"
},
"requiredImprovements": [],
"semanticBoundary": "native_linuxcnc_vs_web_opfs_wasm_xyzbc_trt_evidence_comparison"
}