{ "apiName": "xyzbc-trt-native-web-evidence-comparison", "status": "fail", "comparedAt": "2026-07-02T13:57:49.317Z", "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": 25, "passCount": 20, "failCount": 5, "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/linuxcnc-master/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": 3.552713678800501e-15, "2": 10, "3": 3.552713678800501e-15, "4": 7.105427357601002e-15 } } }, { "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" }, { "filename": "centering.ngc", "staged": true, "sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/centering.ngc" }, { "filename": "helix_bc.ngc", "staged": true, "sourceRel": "configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/helix_bc.ngc" } ] } }, { "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": "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" } ], "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": 20, "sampleCount": 3074 } }, { "id": "execution", "ready": true, "evidence": { "samplePeriodMs": 20, "sampleCount": 569 } }, { "id": "axis-buttons", "ready": true, "evidence": { "canRunAuto": false, "canExecuteMdi": false, "canJog": false, "canHome": false } } ], "missingCapabilities": [], "ready": true } } }, { "category": "path-preview", "requirement": "native and web preview path sample period is 20ms", "status": "fail", "evidence": { "nativeSamplePeriodMs": null, "webSamplePeriodMs": 20 } }, { "category": "path-preview", "requirement": "native and web preview paths have samples", "status": "fail", "evidence": { "nativeSampleCount": 0, "webSampleCount": 3074, "unavailable": [ "native: missing samples", "sample period mismatch null/20" ] } }, { "category": "path-execution", "requirement": "native and web execution path sample period is 20ms", "status": "fail", "evidence": { "nativeSamplePeriodMs": null, "webSamplePeriodMs": 20 } }, { "category": "path-execution", "requirement": "native and web execution paths have samples", "status": "fail", "evidence": { "nativeSampleCount": 0, "webSampleCount": 569, "unavailable": [ "native: missing samples", "sample period mismatch null/20" ] } }, { "category": "path-preview-execution-consistency", "requirement": "native preview and execution paths are comparable", "status": "fail", "evidence": { "nativePreviewSampleCount": 0, "nativeExecutionSampleCount": 0, "unavailable": [ "nativePreview: missing samples", "nativeExecution: missing samples", "sample period mismatch null/null" ] } }, { "category": "path-preview-execution-consistency", "requirement": "web preview and execution paths are comparable", "status": "pass", "evidence": { "webPreviewSampleCount": 3074, "webExecutionSampleCount": 569, "unavailable": [] } } ], "pathComparison": { "samplePeriodMs": 20, "previewVsPreview": { "status": "fail", "comparable": false, "periodsMatch": false, "nativeSamplePeriodMs": null, "webSamplePeriodMs": 20, "leftSampleCount": 0, "rightSampleCount": 3074, "nativeSampleCount": 0, "webSampleCount": 3074, "unavailable": [ "native: missing samples", "sample period mismatch null/20" ], "maxTcpErrorMm": null, "rmsTcpErrorMm": null, "maxJointError": null, "rmsJointError": null, "maxToolAxisAngleDeg": null, "sampleCountDelta": 3074, "missingSamples": [] }, "executionVsExecution": { "status": "fail", "comparable": false, "periodsMatch": false, "nativeSamplePeriodMs": null, "webSamplePeriodMs": 20, "leftSampleCount": 0, "rightSampleCount": 569, "nativeSampleCount": 0, "webSampleCount": 569, "unavailable": [ "native: missing samples", "sample period mismatch null/20" ], "maxTcpErrorMm": null, "rmsTcpErrorMm": null, "maxJointError": null, "rmsJointError": null, "maxToolAxisAngleDeg": null, "sampleCountDelta": 569, "missingSamples": [] }, "previewVsExecutionNative": { "status": "fail", "comparable": false, "periodsMatch": false, "nativePreviewSamplePeriodMs": null, "nativeExecutionSamplePeriodMs": null, "leftSampleCount": 0, "rightSampleCount": 0, "unavailable": [ "nativePreview: missing samples", "nativeExecution: missing samples", "sample period mismatch null/null" ], "maxTcpErrorMm": null, "rmsTcpErrorMm": null, "maxJointError": null, "rmsJointError": null, "maxToolAxisAngleDeg": null, "sampleCountDelta": 0, "missingSamples": [] }, "previewVsExecutionWeb": { "status": "pass", "comparable": true, "periodsMatch": true, "webPreviewSamplePeriodMs": 20, "webExecutionSamplePeriodMs": 20, "leftSampleCount": 3074, "rightSampleCount": 569, "unavailable": [], "maxTcpErrorMm": 31.575968660550437, "rmsTcpErrorMm": 14.55884964854259, "maxJointError": 58.498220458848685, "rmsJointError": 20.762740311288844, "maxToolAxisAngleDeg": 19.999999999999993, "sampleCountDelta": 2505, "missingSamples": [] } }, "requiredImprovements": [ { "category": "path-preview", "requirement": "native and web preview path sample period is 20ms", "evidence": { "nativeSamplePeriodMs": null, "webSamplePeriodMs": 20 } }, { "category": "path-preview", "requirement": "native and web preview paths have samples", "evidence": { "nativeSampleCount": 0, "webSampleCount": 3074, "unavailable": [ "native: missing samples", "sample period mismatch null/20" ] } }, { "category": "path-execution", "requirement": "native and web execution path sample period is 20ms", "evidence": { "nativeSamplePeriodMs": null, "webSamplePeriodMs": 20 } }, { "category": "path-execution", "requirement": "native and web execution paths have samples", "evidence": { "nativeSampleCount": 0, "webSampleCount": 569, "unavailable": [ "native: missing samples", "sample period mismatch null/20" ] } }, { "category": "path-preview-execution-consistency", "requirement": "native preview and execution paths are comparable", "evidence": { "nativePreviewSampleCount": 0, "nativeExecutionSampleCount": 0, "unavailable": [ "nativePreview: missing samples", "nativeExecution: missing samples", "sample period mismatch null/null" ] } } ], "semanticBoundary": "native_linuxcnc_vs_web_opfs_wasm_xyzbc_trt_evidence_comparison" }