{ "apiName": "project-release-readiness-report", "reportVersion": 1, "phase": "ready", "ready": true, "missing": [], "releaseGate": { "command": "wasm-port/tests/host/verify_project_release_gate.sh", "passed": true, "expectedOutput": "project_release_gate=ok" }, "simConfigInventory": { "executed": 28, "passed": 28, "skipped": 131, "unexpectedFail": 0 }, "virtualHalSimConfigSourceCoverage": { "apiName": "linuxcnc-wasm-virtual-hal-sim-config-source-coverage-report", "coverageVersion": 1, "source": "linuxcnc-configs-sim-source-derived-virtual-hal", "phase": "source-covered", "complete": true, "webSimulationSatisfied": true, "manifestChecked": true, "targetCount": 7, "sourceFiles": [ "linuxcnc/configs/sim/axis/foam/axis_foam.ini", "linuxcnc/configs/sim/axis/foam/foam.ngc", "linuxcnc/configs/sim/axis/geometry/xyzc.ini", "linuxcnc/configs/sim/axis/geometry/xyzc.ngc", "linuxcnc/configs/sim/axis/geometry/M110", "linuxcnc/configs/sim/axis/external_offsets/dynamic_offsets.ini", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini", "linuxcnc/configs/sim/axis/external_offsets/M111", "linuxcnc/configs/sim/axis/external_offsets/dyn_demo.ngc", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc", "linuxcnc/configs/sim/axis/gladevcp/gladevcp_panel.ini", "linuxcnc/configs/sim/axis/gladevcp/probe.ngc", "linuxcnc/configs/sim/axis/gladevcp/sim.tbl", "linuxcnc/configs/sim/woodpecker/woodpecker.ini", "linuxcnc/configs/sim/woodpecker/on_abort.ngc", "linuxcnc/configs/sim/woodpecker/tool.tbl", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc", "linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa.ini", "linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc", "linuxcnc/configs/sim/axis/vismach/melfa-sim/remap_subs/428remap.ngc", "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc", "linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc" ], "coveredCapabilities": [ "axis-joint-position-feedback", "hal-pin-signal-param-store", "halcmd-simulation-replacement", "interpreter-hal-bridge-snapshot", "motion-controller-simulation-replacement", "realtime-hal-simulation-replacement", "servo-period-motion-step", "spindle-coolant-tool-status", "userspace-load-command-stubs" ], "requiredCapabilities": [ "realtime-hal-simulation-replacement", "halcmd-simulation-replacement", "motion-controller-simulation-replacement", "hal-pin-signal-param-store", "userspace-load-command-stubs", "servo-period-motion-step", "axis-joint-position-feedback", "spindle-coolant-tool-status", "interpreter-hal-bridge-snapshot" ], "missingCapabilities": [], "missingTargets": [], "rows": [ { "id": "axis-foam", "label": "AXIS foam sim", "source": "linuxcnc/configs/sim", "sourceFiles": [ "linuxcnc/configs/sim/axis/foam/axis_foam.ini", "linuxcnc/configs/sim/axis/foam/foam.ngc" ], "capabilities": [ "axis-joint-position-feedback", "hal-pin-signal-param-store" ], "evidence": "Vendored LinuxCNC AXIS foam sim config covers axis motion pins and simple program execution.", "sourceDerived": true, "manifestChecked": true, "missingManifestFiles": [] }, { "id": "axis-geometry-user-m", "label": "AXIS geometry user-M sim", "source": "linuxcnc/configs/sim", "sourceFiles": [ "linuxcnc/configs/sim/axis/geometry/xyzc.ini", "linuxcnc/configs/sim/axis/geometry/xyzc.ngc", "linuxcnc/configs/sim/axis/geometry/M110" ], "capabilities": [ "userspace-load-command-stubs", "halcmd-simulation-replacement" ], "evidence": "Vendored LinuxCNC geometry sim config declares USER_M_PATH behavior represented as a simulation boundary.", "sourceDerived": true, "manifestChecked": true, "missingManifestFiles": [] }, { "id": "external-offsets", "label": "External offsets sim", "source": "linuxcnc/configs/sim", "sourceFiles": [ "linuxcnc/configs/sim/axis/external_offsets/dynamic_offsets.ini", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini", "linuxcnc/configs/sim/axis/external_offsets/M111", "linuxcnc/configs/sim/axis/external_offsets/dyn_demo.ngc", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc" ], "capabilities": [ "motion-controller-simulation-replacement", "servo-period-motion-step" ], "evidence": "Vendored LinuxCNC external-offset configs exercise motion/HAL pins and deterministic user-M boundary accounting.", "sourceDerived": true, "manifestChecked": true, "missingManifestFiles": [] }, { "id": "gladevcp-probe", "label": "GladeVCP probe sim", "source": "linuxcnc/configs/sim", "sourceFiles": [ "linuxcnc/configs/sim/axis/gladevcp/gladevcp_panel.ini", "linuxcnc/configs/sim/axis/gladevcp/probe.ngc", "linuxcnc/configs/sim/axis/gladevcp/sim.tbl" ], "capabilities": [ "interpreter-hal-bridge-snapshot", "hal-pin-signal-param-store" ], "evidence": "Vendored LinuxCNC probe sim config covers probe input and tool-table staging without browser-owned CNC semantics.", "sourceDerived": true, "manifestChecked": true, "missingManifestFiles": [] }, { "id": "woodpecker", "label": "Woodpecker sim", "source": "linuxcnc/configs/sim", "sourceFiles": [ "linuxcnc/configs/sim/woodpecker/woodpecker.ini", "linuxcnc/configs/sim/woodpecker/on_abort.ngc", "linuxcnc/configs/sim/woodpecker/tool.tbl" ], "capabilities": [ "halcmd-simulation-replacement", "spindle-coolant-tool-status" ], "evidence": "Vendored LinuxCNC woodpecker sim config supplies deterministic on-abort and tool-table workflows.", "sourceDerived": true, "manifestChecked": true, "missingManifestFiles": [] }, { "id": "qtdragon-on-abort", "label": "QtDragon on-abort sims", "source": "linuxcnc/configs/sim", "sourceFiles": [ "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc" ], "capabilities": [ "realtime-hal-simulation-replacement", "axis-joint-position-feedback" ], "evidence": "Vendored LinuxCNC QtDragon sim configs provide multi-joint and on-abort machine/session coverage for Web simulation.", "sourceDerived": true, "manifestChecked": true, "missingManifestFiles": [] }, { "id": "vismach-remap-sims", "label": "Vismach remap sims", "source": "linuxcnc/configs/sim", "sourceFiles": [ "linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa.ini", "linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc", "linuxcnc/configs/sim/axis/vismach/melfa-sim/remap_subs/428remap.ngc", "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc", "linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc" ], "capabilities": [ "interpreter-hal-bridge-snapshot", "motion-controller-simulation-replacement" ], "evidence": "Vendored LinuxCNC vismach remap configs remain LinuxCNC-owned remap/kinematics assets staged through the WASM boundary.", "sourceDerived": true, "manifestChecked": true, "missingManifestFiles": [] } ], "summaryRows": [ { "id": "targets", "label": "LinuxCNC sim config targets", "value": "7" }, { "id": "source-files", "label": "Source files", "value": "34" }, { "id": "capabilities", "label": "Covered capabilities", "value": "covered" }, { "id": "manifest", "label": "Manifest check", "value": "passed" } ] }, "virtualHalSimConfigSourceCoverageReady": true, "virtualHalSimConfigPromotionCandidates": { "apiName": "linuxcnc-wasm-virtual-hal-sim-config-promotion-candidate-report", "reportVersion": 1, "source": "linuxcnc-configs-sim-source-derived-virtual-hal", "phase": "ready", "complete": true, "webSimulationSatisfied": true, "inventoryBaselineUnchanged": true, "manifestChecked": true, "candidateCount": 8, "sourceFiles": [ "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc", "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "linuxcnc/configs/sim/axis/vismach/puma/puma_seam_weld.ngc", "linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc", "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini", "linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc" ], "requiredVirtualHalReports": [ "source-compliance", "sim-config-source-coverage", "command-script-fixtures", "manifest-backed-motion-matrix" ], "availableVirtualHalReports": [ "source-compliance", "sim-config-source-coverage", "command-script-fixtures", "manifest-backed-motion-matrix" ], "blockedKinds": [ "L4-PYTHON-REMAP", "L4-TOOL-DB", "L4-USER-M-PROCESS", "UPSTREAM-DEMO" ], "missingCandidates": [], "blockedCandidateIds": [], "missingManifestFiles": [], "missingRequiredReports": [], "familyRows": [ { "id": "qtdragon-on-abort", "candidateIds": [ "qtdragon-multi-joint-on-abort", "qtdragon-xyz-on-abort", "qtdragon-xyz45-on-abort", "qtdragon-hd-xyz-on-abort", "qtdragon-hd-z-compensation-on-abort", "qtvcp-screens-qtdragon-on-abort" ], "candidateCount": 6, "completeCount": 6, "explicitBrowserDiagnosticsCount": 6, "explicitBrowserDiagnosticsReady": true, "complete": true, "sourceFiles": [ "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc" ] }, { "id": "vismach-remap-sims", "candidateIds": [ "puma-seam-weld" ], "candidateCount": 1, "completeCount": 1, "explicitBrowserDiagnosticsCount": 1, "explicitBrowserDiagnosticsReady": true, "complete": true, "sourceFiles": [ "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "linuxcnc/configs/sim/axis/vismach/puma/puma_seam_weld.ngc", "linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc" ] }, { "id": "rose-engine-rcone-demo", "candidateIds": [ "rose-engine-rcone-demo" ], "candidateCount": 1, "completeCount": 1, "explicitBrowserDiagnosticsCount": 1, "explicitBrowserDiagnosticsReady": true, "complete": true, "sourceFiles": [ "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini", "linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc" ] } ], "rows": [ { "id": "qtdragon-multi-joint-on-abort", "label": "QtDragon multi-joint on-abort", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-promotion-candidate", "simConfigTarget": "qtdragon-on-abort", "sourceFiles": [ "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc" ], "iniPath": "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "gcodePath": "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc", "currentNodeInventoryStatus": "PASS", "currentMatrixBrowserStatus": "explicit-browser-diagnostics", "dependencyClass": "hal-ui-multi-joint", "targetBrowserEvidence": "explicit-browser-diagnostics", "requiredVirtualHalReports": [ "source-compliance", "sim-config-source-coverage", "command-script-fixtures", "manifest-backed-motion-matrix" ], "blockedKind": "-", "blockedKindExcluded": true, "nonMainFixture": false, "nodeStatusReady": true, "simConfigTargetReady": true, "manifestChecked": true, "missingManifestFiles": [], "missingRequiredReports": [], "evidence": "Node inventory already covers the LinuxCNC QtDragon multi-joint on-abort program; virtual HAL supplies the HAL/UI/motion evidence needed for explicit browser diagnostics.", "complete": true }, { "id": "qtdragon-xyz-on-abort", "label": "QtDragon XYZ on-abort", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-promotion-candidate", "simConfigTarget": "qtdragon-on-abort", "sourceFiles": [ "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc" ], "iniPath": "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "gcodePath": "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc", "currentNodeInventoryStatus": "PASS", "currentMatrixBrowserStatus": "explicit-browser-diagnostics", "dependencyClass": "hal-ui-on-abort", "targetBrowserEvidence": "explicit-browser-diagnostics", "requiredVirtualHalReports": [ "source-compliance", "sim-config-source-coverage", "command-script-fixtures", "manifest-backed-motion-matrix" ], "blockedKind": "-", "blockedKindExcluded": true, "nonMainFixture": false, "nodeStatusReady": true, "simConfigTargetReady": true, "manifestChecked": true, "missingManifestFiles": [], "missingRequiredReports": [], "evidence": "Node inventory already covers the LinuxCNC QtDragon XYZ on-abort program; virtual HAL can carry explicit browser diagnostics without changing CNC semantics.", "complete": true }, { "id": "qtdragon-xyz45-on-abort", "label": "QtDragon XYZA on-abort", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-promotion-candidate", "simConfigTarget": "qtdragon-on-abort", "sourceFiles": [ "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc" ], "iniPath": "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "gcodePath": "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc", "currentNodeInventoryStatus": "PASS", "currentMatrixBrowserStatus": "explicit-browser-diagnostics", "dependencyClass": "hal-ui-rotary-axis", "targetBrowserEvidence": "explicit-browser-diagnostics", "requiredVirtualHalReports": [ "source-compliance", "sim-config-source-coverage", "command-script-fixtures", "manifest-backed-motion-matrix" ], "blockedKind": "-", "blockedKindExcluded": true, "nonMainFixture": false, "nodeStatusReady": true, "simConfigTargetReady": true, "manifestChecked": true, "missingManifestFiles": [], "missingRequiredReports": [], "evidence": "The LinuxCNC QtDragon XYZA on-abort case adds rotary-axis machine context without Python remap or external process runtime.", "complete": true }, { "id": "qtdragon-hd-xyz-on-abort", "label": "QtDragon HD XYZ on-abort", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-promotion-candidate", "simConfigTarget": "qtdragon-on-abort", "sourceFiles": [ "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc" ], "iniPath": "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "gcodePath": "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc", "currentNodeInventoryStatus": "PASS", "currentMatrixBrowserStatus": "explicit-browser-diagnostics", "dependencyClass": "hal-ui-on-abort", "targetBrowserEvidence": "explicit-browser-diagnostics", "requiredVirtualHalReports": [ "source-compliance", "sim-config-source-coverage", "command-script-fixtures", "manifest-backed-motion-matrix" ], "blockedKind": "-", "blockedKindExcluded": true, "nonMainFixture": false, "nodeStatusReady": true, "simConfigTargetReady": true, "manifestChecked": true, "missingManifestFiles": [], "missingRequiredReports": [], "evidence": "The LinuxCNC QtDragon HD XYZ on-abort case is a deterministic HAL/UI workflow suitable for browser diagnostics evidence.", "complete": true }, { "id": "qtdragon-hd-z-compensation-on-abort", "label": "QtDragon HD z-compensation on-abort", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-promotion-candidate", "simConfigTarget": "qtdragon-on-abort", "sourceFiles": [ "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc" ], "iniPath": "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "gcodePath": "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc", "currentNodeInventoryStatus": "PASS", "currentMatrixBrowserStatus": "explicit-browser-diagnostics", "dependencyClass": "hal-ui-z-compensation", "targetBrowserEvidence": "explicit-browser-diagnostics", "requiredVirtualHalReports": [ "source-compliance", "sim-config-source-coverage", "command-script-fixtures", "manifest-backed-motion-matrix" ], "blockedKind": "-", "blockedKindExcluded": true, "nonMainFixture": false, "nodeStatusReady": true, "simConfigTargetReady": true, "manifestChecked": true, "missingManifestFiles": [], "missingRequiredReports": [], "evidence": "The LinuxCNC QtDragon HD z-compensation on-abort case should only promote with explicit source evidence for the z-compensation INI.", "complete": true }, { "id": "qtvcp-screens-qtdragon-on-abort", "label": "QTVCP screens QtDragon on-abort", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-promotion-candidate", "simConfigTarget": "qtdragon-on-abort", "sourceFiles": [ "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc" ], "iniPath": "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "gcodePath": "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc", "currentNodeInventoryStatus": "PASS", "currentMatrixBrowserStatus": "explicit-browser-diagnostics", "dependencyClass": "hal-ui-on-abort", "targetBrowserEvidence": "explicit-browser-diagnostics", "requiredVirtualHalReports": [ "source-compliance", "sim-config-source-coverage", "command-script-fixtures", "manifest-backed-motion-matrix" ], "blockedKind": "-", "blockedKindExcluded": true, "nonMainFixture": false, "nodeStatusReady": true, "simConfigTargetReady": true, "manifestChecked": true, "missingManifestFiles": [], "missingRequiredReports": [], "evidence": "The LinuxCNC QTVCP QtDragon on-abort case has no hard runtime block and can be promoted as explicit browser diagnostics evidence.", "complete": true }, { "id": "puma-seam-weld", "label": "PUMA seam weld", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-promotion-candidate", "simConfigTarget": "vismach-remap-sims", "sourceFiles": [ "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "linuxcnc/configs/sim/axis/vismach/puma/puma_seam_weld.ngc", "linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc" ], "iniPath": "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "gcodePath": "linuxcnc/configs/sim/axis/vismach/puma/puma_seam_weld.ngc", "currentNodeInventoryStatus": "PASS", "currentMatrixBrowserStatus": "explicit-browser-diagnostics", "dependencyClass": "halui-vismach-remap", "targetBrowserEvidence": "explicit-browser-diagnostics", "requiredVirtualHalReports": [ "source-compliance", "sim-config-source-coverage", "command-script-fixtures", "manifest-backed-motion-matrix" ], "blockedKind": "-", "blockedKindExcluded": true, "nonMainFixture": false, "nodeStatusReady": true, "simConfigTargetReady": true, "manifestChecked": true, "missingManifestFiles": [], "missingRequiredReports": [], "evidence": "Node inventory covers this LinuxCNC PUMA program with the same vendored machine context as puma_cube; browser evidence can pair both cases.", "complete": true }, { "id": "rose-engine-rcone-demo", "label": "Rose engine cone demo", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-promotion-candidate", "simConfigTarget": null, "sourceFiles": [ "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini", "linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc" ], "iniPath": "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini", "gcodePath": "linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc", "currentNodeInventoryStatus": "PASS", "currentMatrixBrowserStatus": "explicit-browser-diagnostics", "dependencyClass": "hal-process-only", "targetBrowserEvidence": "explicit-browser-diagnostics", "requiredVirtualHalReports": [ "source-compliance", "sim-config-source-coverage", "command-script-fixtures", "manifest-backed-motion-matrix" ], "blockedKind": "-", "blockedKindExcluded": true, "nonMainFixture": false, "nodeStatusReady": true, "simConfigTargetReady": true, "manifestChecked": true, "missingManifestFiles": [], "missingRequiredReports": [], "evidence": "The LinuxCNC rose-engine demo is a HAL-process-only Node inventory pass and is useful as a non-Qt/non-vismach diagnostics candidate.", "complete": true } ], "summaryRows": [ { "id": "candidates", "label": "Promotion candidates", "value": "8" }, { "id": "families", "label": "Promotion families", "value": "3" }, { "id": "blocked-family", "label": "Blocked-family exclusion", "value": "passed" }, { "id": "reports", "label": "Virtual HAL reports", "value": "complete" }, { "id": "manifest", "label": "Manifest check", "value": "passed" }, { "id": "inventory-baseline", "label": "Inventory baseline", "value": "unchanged" } ] }, "virtualHalSimConfigPromotionCandidatesReady": true, "virtualHalPromotionFamilySummary": "qtdragon-on-abort: 6/6 ready; vismach-remap-sims: 1/1 ready; rose-engine-rcone-demo: 1/1 ready", "virtualHalPromotionFamilyRows": [ { "id": "qtdragon-on-abort", "label": "qtdragon-on-abort", "value": "6/6 ready; sources=12; diagnostics=ready", "sourceFiles": [ "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc" ], "candidateCount": 6, "completeCount": 6, "sourceFileCount": 12, "explicitBrowserDiagnosticsReady": true, "ready": true }, { "id": "vismach-remap-sims", "label": "vismach-remap-sims", "value": "1/1 ready; sources=3; diagnostics=ready", "sourceFiles": [ "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "linuxcnc/configs/sim/axis/vismach/puma/puma_seam_weld.ngc", "linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc" ], "candidateCount": 1, "completeCount": 1, "sourceFileCount": 3, "explicitBrowserDiagnosticsReady": true, "ready": true }, { "id": "rose-engine-rcone-demo", "label": "rose-engine-rcone-demo", "value": "1/1 ready; sources=2; diagnostics=ready", "sourceFiles": [ "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini", "linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc" ], "candidateCount": 1, "completeCount": 1, "sourceFileCount": 2, "explicitBrowserDiagnosticsReady": true, "ready": true } ], "promotionCandidateArtifactSummary": { "apiName": "project-release-promotion-candidate-artifact-summary", "summaryVersion": 1, "phase": "ready", "ready": true, "artifactPath": "wasm-port/build/wasm/sim-configs-inventory/promotion-candidates.tsv", "evidenceExpansionArtifactPath": "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv", "layerCount": 2, "evidenceReadyCount": 8, "inventoryReadyCount": 20, "evidenceExpansionCandidateCount": 13, "totalCandidateCount": 28, "promotionAllowedCount": 0, "hardBlockRuntimeLock": "locked (3 families)", "inventoryBaseline": "executed=28 passed=28 skipped=131 unexpected_fail=0", "layers": [ { "id": "evidence-ready", "candidateCount": 8, "promotionAllowedCount": 0, "virtualHalEvidenceReady": true, "baselineChanging": false }, { "id": "inventory-ready", "candidateCount": 20, "promotionAllowedCount": 0, "virtualHalEvidenceReady": false, "baselineChanging": false } ], "evidenceExpansion": { "id": "browser-diagnostics-expansion", "candidateCount": 13, "promotionAllowedCount": 0, "baselineChanging": false, "nextEvidence": "browser-diagnostics-binding" } }, "virtualHalSimConfigMacroLoadFixtures": { "apiName": "linuxcnc-wasm-virtual-hal-sim-config-macro-load-fixture-report", "reportVersion": 1, "source": "linuxcnc-configs-sim-source-derived-virtual-hal", "phase": "ready", "complete": true, "webSimulationSatisfied": true, "inventoryBaselineUnchanged": true, "manifestChecked": true, "fixtureCount": 2, "sourceFiles": [ "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini", "linuxcnc/configs/sim/axis/rose_engine/rcone.ngc", "linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc" ], "fixturePaths": [ "linuxcnc/configs/sim/axis/rose_engine/rcone.ngc", "linuxcnc/configs/sim/axis/external_offsets/queuebuster.ngc" ], "missingFixtures": [], "blockedFixtureIds": [], "declarationEvidenceViolations": [], "standaloneMainViolations": [], "blockedFixturePromotionViolations": [], "blockedBoundaryEvidenceViolations": [], "missingAuditRows": [], "auditPromotionViolations": [], "auditBoundaryEvidenceViolations": [], "auditPromotionAllowedViolations": [], "missingManifestFiles": [], "rows": [ { "id": "rose-engine-rcone-macro-load", "label": "Rose engine rcone macro/load", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-macro-load-fixture", "fixturePath": "linuxcnc/configs/sim/axis/rose_engine/rcone.ngc", "sourceFiles": [ "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini", "linuxcnc/configs/sim/axis/rose_engine/rcone.ngc", "linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc" ], "owningIniPath": "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini", "pairedMainProgram": "linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc", "declarationSource": "NGCGUI_SUBFILE", "declarationEvidence": { "sourceFile": "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini", "section": "DISPLAY", "key": "NGCGUI_SUBFILE", "value": "rcone.ngc", "line": 34, "sourceLine": "NGCGUI_SUBFILE = rcone.ngc" }, "declarationEvidenceReady": true, "requiresDeclarationEvidence": true, "currentNodeInventoryStatus": "PASS", "dependencyClass": "macro-load-non-main", "targetBrowserEvidence": "non-main-fixture-diagnostics", "blockedKind": "-", "blockedKindExcluded": true, "nonMainFixture": true, "declaredOnly": false, "statusReady": true, "manifestChecked": true, "missingManifestFiles": [], "evidence": "LinuxCNC rose_engine.ini declares rcone.ngc through NGCGUI_SUBFILE; the fixture is validated as a non-main macro/load asset paired with rcone_demo.ngc.", "complete": true }, { "id": "external-offsets-queuebuster-macro-load", "label": "External offsets queuebuster macro/load declaration", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-macro-load-fixture", "fixturePath": "linuxcnc/configs/sim/axis/external_offsets/queuebuster.ngc", "sourceFiles": [ "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc" ], "owningIniPath": "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini", "pairedMainProgram": "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc", "declarationSource": "NGCGUI_SUBFILE", "declarationEvidence": { "sourceFile": "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini", "section": "DISPLAY", "key": "NGCGUI_SUBFILE", "value": "queuebuster.ngc", "line": 40, "sourceLine": "NGCGUI_SUBFILE = queuebuster.ngc" }, "declarationEvidenceReady": true, "requiresDeclarationEvidence": true, "currentNodeInventoryStatus": "NON_MAIN_CLASS", "dependencyClass": "macro-load-non-main-declared-only", "targetBrowserEvidence": "non-main-fixture-diagnostics", "blockedKind": "-", "blockedKindExcluded": true, "nonMainFixture": true, "declaredOnly": true, "statusReady": true, "manifestChecked": true, "missingManifestFiles": [], "evidence": "LinuxCNC eoffsets.ini declares queuebuster.ngc through NGCGUI_SUBFILE; the fixture records the owning INI declaration without executing it as a standalone browser main program.", "complete": true } ], "blockedRows": [ { "id": "silverdragon-tool-sensor-python-ui-boundary", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-macro-load-blocked-fixture", "fixturePath": "linuxcnc/configs/sim/gscreen/silverdragon/macros/tool_sensor.ngc", "owningIniPath": "linuxcnc/configs/sim/gscreen/silverdragon/silverdragon.ini", "blockedKind": "PYTHON-UI-PROCESS", "dependencyClass": "macro-load-python-ui-boundary", "excludedFromPositiveFixtures": true, "boundaryEvidence": { "sourceArtifacts": [ "wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv", "wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv" ], "sourceArtifactHashes": { "wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv": "de6cf57b7c07182e3bcb32e22dbdf202b618cabc14620d6dff1ef815587950b9", "wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv": "b0afe27224e97a82fbecbbd75a7c86233c98fe957d9c1ba20f0656f8745a5eae" }, "baselineSummary": { "executed": 28, "passed": 28, "skipped": 131, "unexpectedFail": 0 }, "boundarySummary": { "path": "gscreen/silverdragon/macros/tool_sensor.ngc", "ini": "gscreen/silverdragon/silverdragon.ini", "recommendedBlocked": "UNAVAILABLE", "dependencies": "missing_vendored_ini:configs/sim/gscreen/silverdragon/silverdragon.ini" }, "iniBoundarySummary": { "ini": "gscreen/silverdragon/silverdragon.ini", "vendored": 0, "reportAvailable": 0, "recommendedBlocked": "UNAVAILABLE", "dependencies": "missing_vendored_ini:configs/sim/gscreen/silverdragon/silverdragon.ini" } }, "boundaryEvidenceReady": true, "reason": "Owning SilverDragon UI machine file is not available in the vendored manifest; promotion would require Python UI process boundary proof outside virtual HAL.", "complete": true }, { "id": "gmoccapy-on-abort-python-remap-boundary", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-macro-load-blocked-fixture", "fixturePath": "linuxcnc/configs/sim/gmoccapy/macros/on_abort.ngc", "owningIniPath": "linuxcnc/configs/sim/gmoccapy/6_axis.ini", "blockedKind": "L4-PYTHON-REMAP", "dependencyClass": "macro-load-python-remap-boundary", "excludedFromPositiveFixtures": true, "boundaryEvidence": { "sourceArtifacts": [ "wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv", "wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv" ], "sourceArtifactHashes": { "wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv": "de6cf57b7c07182e3bcb32e22dbdf202b618cabc14620d6dff1ef815587950b9", "wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv": "b0afe27224e97a82fbecbbd75a7c86233c98fe957d9c1ba20f0656f8745a5eae" }, "baselineSummary": { "executed": 28, "passed": 28, "skipped": 131, "unexpectedFail": 0 }, "boundarySummary": { "path": "gmoccapy/macros/on_abort.ngc", "ini": "gmoccapy/6_axis.ini", "recommendedBlocked": "UNAVAILABLE", "dependencies": "missing_vendored_ini:configs/sim/gmoccapy/6_axis.ini" }, "iniBoundarySummary": { "ini": "gmoccapy/6_axis.ini", "vendored": 0, "reportAvailable": 0, "recommendedBlocked": "UNAVAILABLE", "dependencies": "missing_vendored_ini:configs/sim/gmoccapy/6_axis.ini" } }, "boundaryEvidenceReady": true, "reason": "gmoccapy macro/load rows remain locked behind LinuxCNC-owned Python remap/prolog/epilog runtime proof.", "complete": true } ], "auditRows": [ { "id": "gscreen-industrial-lathe-wear-toolchange-audit", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-macro-load-audit-candidate", "fixturePath": "linuxcnc/configs/sim/gscreen/industrial_lathe_wear/toolchange.ngc", "owningIniPath": "linuxcnc/configs/sim/gscreen/industrial_lathe_wear/industrial_lathe_wear.ini", "dependencyClass": "macro-load-ui-family-audit", "auditStatus": "blocked-missing-owning-ini", "promotionAllowed": false, "excludedFromPositiveFixtures": true, "boundaryEvidence": { "sourceArtifacts": [ "wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv", "wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv" ], "sourceArtifactHashes": { "wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv": "de6cf57b7c07182e3bcb32e22dbdf202b618cabc14620d6dff1ef815587950b9", "wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv": "b0afe27224e97a82fbecbbd75a7c86233c98fe957d9c1ba20f0656f8745a5eae" }, "baselineSummary": { "executed": 28, "passed": 28, "skipped": 131, "unexpectedFail": 0 }, "boundarySummary": { "path": "gscreen/industrial_lathe_wear/toolchange.ngc", "ini": "gscreen/industrial_lathe_wear/industrial_lathe_wear.ini", "recommendedBlocked": "UNAVAILABLE", "dependencies": "missing_vendored_ini:configs/sim/gscreen/industrial_lathe_wear/industrial_lathe_wear.ini" }, "iniBoundarySummary": { "ini": "gscreen/industrial_lathe_wear/industrial_lathe_wear.ini", "vendored": 0, "reportAvailable": 0, "recommendedBlocked": "UNAVAILABLE", "dependencies": "missing_vendored_ini:configs/sim/gscreen/industrial_lathe_wear/industrial_lathe_wear.ini" } }, "boundaryEvidenceReady": true, "reason": "Generated boundary evidence reports missing vendored owning INI for gscreen industrial_lathe_wear; keep as audit-only until machine files and UI/process declaration have LinuxCNC source evidence.", "complete": true }, { "id": "qtvcp-industrial-lathe-wear-toolchange-audit", "source": "linuxcnc-configs-sim-source-derived-virtual-hal-macro-load-audit-candidate", "fixturePath": "linuxcnc/configs/sim/qtvcp_screens/industrial_lathe_wear/toolchange.ngc", "owningIniPath": "linuxcnc/configs/sim/qtvcp_screens/industrial_lathe_wear/industrial_lathe_wear.ini", "dependencyClass": "macro-load-ui-family-audit", "auditStatus": "blocked-missing-owning-ini", "promotionAllowed": false, "excludedFromPositiveFixtures": true, "boundaryEvidence": { "sourceArtifacts": [ "wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv", "wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv" ], "sourceArtifactHashes": { "wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv": "de6cf57b7c07182e3bcb32e22dbdf202b618cabc14620d6dff1ef815587950b9", "wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv": "b0afe27224e97a82fbecbbd75a7c86233c98fe957d9c1ba20f0656f8745a5eae" }, "baselineSummary": { "executed": 28, "passed": 28, "skipped": 131, "unexpectedFail": 0 }, "boundarySummary": { "path": "qtvcp_screens/industrial_lathe_wear/toolchange.ngc", "ini": "qtvcp_screens/industrial_lathe_wear/industrial_lathe_wear.ini", "recommendedBlocked": "UNAVAILABLE", "dependencies": "missing_vendored_ini:configs/sim/qtvcp_screens/industrial_lathe_wear/industrial_lathe_wear.ini" }, "iniBoundarySummary": { "ini": "qtvcp_screens/industrial_lathe_wear/industrial_lathe_wear.ini", "vendored": 0, "reportAvailable": 0, "recommendedBlocked": "UNAVAILABLE", "dependencies": "missing_vendored_ini:configs/sim/qtvcp_screens/industrial_lathe_wear/industrial_lathe_wear.ini" } }, "boundaryEvidenceReady": true, "reason": "Generated boundary evidence reports missing vendored owning INI for qtvcp_screens industrial_lathe_wear; keep as audit-only until machine files and UI/process declaration have LinuxCNC source evidence.", "complete": true } ], "summaryRows": [ { "id": "fixtures", "label": "Macro/load fixtures", "value": "2" }, { "id": "declarations", "label": "Declaration evidence", "value": "passed" }, { "id": "non-main", "label": "Non-main fixture gate", "value": "passed" }, { "id": "blocked-fixture-lock", "label": "Blocked fixture lock", "value": "passed" }, { "id": "ui-family-audit", "label": "UI-family macro/load audit", "value": "passed" }, { "id": "blocked-family", "label": "Blocked-family exclusion", "value": "passed" }, { "id": "manifest", "label": "Manifest check", "value": "passed" }, { "id": "inventory-baseline", "label": "Inventory baseline", "value": "unchanged" } ] }, "virtualHalSimConfigMacroLoadFixturesReady": true, "virtualHalMotionControllerMatrix": { "apiName": "linuxcnc-wasm-virtual-hal-motion-controller-matrix-report", "matrixVersion": 1, "source": "linuxcnc-motion-source-derived-virtual-hal", "phase": "ready", "complete": true, "webSimulationSatisfied": true, "sourceFiles": [ "linuxcnc/src/emc/motion/motion.c", "linuxcnc/src/emc/motion/axis.c", "wasm-port/vendor/linuxcnc/src/emc/motion/motion.h", "linuxcnc/src/emc/motion/homing.c" ], "simConfigSourceFiles": [ "linuxcnc/configs/sim/axis/external_offsets/dynamic_offsets.ini", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini", "linuxcnc/configs/sim/axis/external_offsets/M111", "linuxcnc/configs/sim/axis/external_offsets/dyn_demo.ngc", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc", "linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa.ini", "linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc", "linuxcnc/configs/sim/axis/vismach/melfa-sim/remap_subs/428remap.ngc", "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc", "linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc" ], "simConfigTargets": [ "external-offsets", "qtdragon-on-abort", "vismach-remap-sims" ], "manifestChecked": true, "requiredPins": [ "motion.distance-to-go", "motion.in-position", "axis.x.pos-cmd", "joint.0.pos-fb", "axis.y.pos-cmd", "axis.z.pos-cmd", "halui.axis.x.pos-feedback", "joint.1.pos-fb", "joint.2.pos-fb", "motion.current-vel", "motion.requested-vel", "axis.a.pos-cmd", "axis.b.pos-cmd", "axis.c.pos-cmd", "joint.3.pos-fb", "joint.4.pos-fb", "joint.5.pos-fb" ], "fixtureCount": 3, "missingFixtures": [], "missingSimConfigTargets": [], "missingManifestFiles": [], "rows": [ { "id": "x-single-axis-servo-dtg", "label": "Single-axis servo period target stepping", "source": "linuxcnc-motion-source-derived-virtual-motion-controller", "sourceFiles": [ "linuxcnc/src/emc/motion/motion.c", "linuxcnc/src/emc/motion/axis.c", "wasm-port/vendor/linuxcnc/src/emc/motion/motion.h" ], "simConfigTargets": [ "external-offsets" ], "simConfigEvidenceRows": [ { "id": "external-offsets", "label": "External offsets sim", "sourceFiles": [ "linuxcnc/configs/sim/axis/external_offsets/dynamic_offsets.ini", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini", "linuxcnc/configs/sim/axis/external_offsets/M111", "linuxcnc/configs/sim/axis/external_offsets/dyn_demo.ngc", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc" ], "capabilities": [ "motion-controller-simulation-replacement", "servo-period-motion-step" ], "evidence": "Vendored LinuxCNC external-offset configs exercise motion/HAL pins and deterministic user-M boundary accounting." } ], "simConfigSourceFiles": [ "linuxcnc/configs/sim/axis/external_offsets/dynamic_offsets.ini", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini", "linuxcnc/configs/sim/axis/external_offsets/M111", "linuxcnc/configs/sim/axis/external_offsets/dyn_demo.ngc", "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc" ], "missingSimConfigTargets": [], "manifestChecked": true, "missingManifestFiles": [], "complete": true, "target": { "x": 1 }, "initialPosition": { "x": 0, "y": 0, "z": 0 }, "maxVelocity": 10, "dt": 0.05, "cycleCount": 1, "inPosition": false, "distanceToGo": 0.5, "currentVel": 10, "requestedVel": 10, "servoPeriod": 0.05, "missingPins": [], "inPositionMatched": true, "distanceToGoMatched": true, "movingMatched": true, "axisFeedbackRows": [ { "axis": "x", "expected": 0.5, "axisPosition": 0.5, "jointFeedback": 0.5, "haluiFeedback": 0.5, "matched": true } ], "frameCount": 1 }, { "id": "xyz-multi-axis-in-position", "label": "Multi-axis target reaches in-position", "source": "linuxcnc-motion-source-derived-virtual-motion-controller", "sourceFiles": [ "linuxcnc/src/emc/motion/motion.c", "linuxcnc/src/emc/motion/axis.c", "linuxcnc/src/emc/motion/homing.c", "wasm-port/vendor/linuxcnc/src/emc/motion/motion.h" ], "simConfigTargets": [ "qtdragon-on-abort" ], "simConfigEvidenceRows": [ { "id": "qtdragon-on-abort", "label": "QtDragon on-abort sims", "sourceFiles": [ "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc" ], "capabilities": [ "realtime-hal-simulation-replacement", "axis-joint-position-feedback" ], "evidence": "Vendored LinuxCNC QtDragon sim configs provide multi-joint and on-abort machine/session coverage for Web simulation." } ], "simConfigSourceFiles": [ "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc" ], "missingSimConfigTargets": [], "manifestChecked": true, "missingManifestFiles": [], "complete": true, "target": { "x": 1, "y": -0.5, "z": 0.25 }, "initialPosition": { "x": 0, "y": 0, "z": 0 }, "maxVelocity": 10, "dt": 0.1, "cycleCount": 1, "inPosition": true, "distanceToGo": 0, "currentVel": 17.5, "requestedVel": 10, "servoPeriod": 0.1, "missingPins": [], "inPositionMatched": true, "distanceToGoMatched": true, "movingMatched": true, "axisFeedbackRows": [ { "axis": "x", "expected": 1, "axisPosition": 1, "jointFeedback": 1, "haluiFeedback": 1, "matched": true }, { "axis": "y", "expected": -0.5, "axisPosition": -0.5, "jointFeedback": -0.5, "haluiFeedback": -0.5, "matched": true }, { "axis": "z", "expected": 0.25, "axisPosition": 0.25, "jointFeedback": 0.25, "haluiFeedback": 0.25, "matched": true } ], "frameCount": 1 }, { "id": "abc-rotary-feedback", "label": "Rotary axis feedback follows target", "source": "linuxcnc-motion-source-derived-virtual-motion-controller", "sourceFiles": [ "linuxcnc/src/emc/motion/motion.c", "linuxcnc/src/emc/motion/axis.c", "wasm-port/vendor/linuxcnc/src/emc/motion/motion.h" ], "simConfigTargets": [ "vismach-remap-sims" ], "simConfigEvidenceRows": [ { "id": "vismach-remap-sims", "label": "Vismach remap sims", "sourceFiles": [ "linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa.ini", "linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc", "linuxcnc/configs/sim/axis/vismach/melfa-sim/remap_subs/428remap.ngc", "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc", "linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc" ], "capabilities": [ "interpreter-hal-bridge-snapshot", "motion-controller-simulation-replacement" ], "evidence": "Vendored LinuxCNC vismach remap configs remain LinuxCNC-owned remap/kinematics assets staged through the WASM boundary." } ], "simConfigSourceFiles": [ "linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa.ini", "linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc", "linuxcnc/configs/sim/axis/vismach/melfa-sim/remap_subs/428remap.ngc", "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc", "linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc" ], "missingSimConfigTargets": [], "manifestChecked": true, "missingManifestFiles": [], "complete": true, "target": { "a": 0.4, "b": -0.2, "c": 0.1 }, "initialPosition": { "a": 0, "b": 0, "c": 0 }, "maxVelocity": 8, "dt": 0.1, "cycleCount": 1, "inPosition": true, "distanceToGo": 0, "currentVel": 7, "requestedVel": 8, "servoPeriod": 0.1, "missingPins": [], "inPositionMatched": true, "distanceToGoMatched": true, "movingMatched": true, "axisFeedbackRows": [ { "axis": "a", "expected": 0.4, "axisPosition": 0.4, "jointFeedback": 0.4, "haluiFeedback": 0.4, "matched": true }, { "axis": "b", "expected": -0.2, "axisPosition": -0.2, "jointFeedback": -0.2, "haluiFeedback": -0.2, "matched": true }, { "axis": "c", "expected": 0.1, "axisPosition": 0.1, "jointFeedback": 0.1, "haluiFeedback": 0.1, "matched": true } ], "frameCount": 1 } ], "summaryRows": [ { "id": "fixtures", "label": "Motion matrix fixtures", "value": "3" }, { "id": "source", "label": "LinuxCNC motion source", "value": "source-derived" }, { "id": "sim-config-source", "label": "LinuxCNC sim config source", "value": "source-derived" }, { "id": "manifest", "label": "Sim config manifest check", "value": "passed" }, { "id": "servo-period", "label": "Servo period stepping", "value": "covered" }, { "id": "axis-joint-feedback", "label": "Axis/joint feedback", "value": "covered" } ] }, "virtualHalMotionControllerMatrixReady": true, "blockedRuntimeFamilies": [ "L4-USER-M-PROCESS", "L4-TOOL-DB", "L4-PYTHON-REMAP" ], "promotedRuntimeFamilies": [], "promotedBlockedFamilies": [], "axisScreenshotArtifactSummary": { "apiName": "project-release-axis-screenshot-artifact-summary", "summaryVersion": 1, "phase": "ready", "ready": true, "expectedViewports": [ "desktop-preview", "desktop-dro", "mobile-preview", "mobile-mdi" ], "artifactCount": 0, "viewportNames": [], "missingViewports": [ "desktop-preview", "desktop-dro", "mobile-preview", "mobile-mdi" ], "undersizedViewports": [], "totalScreenshotBytes": 0, "artifacts": [] }, "gateManifest": { "apiName": "project-release-gate-manifest", "manifestVersion": 1, "gateCount": 12, "gateIds": [ "diff-check", "vendor-sync", "standalone-cnc-semantics", "interp-wasm", "sim-config-inventory", "ini-panel-browser", "opfs-session-browser", "release-artifact-url-browser", "project-batch-acceptance", "ui-node-smokes", "host-smokes", "project-release-gate" ], "gates": [ { "id": "diff-check", "label": "Git diff check", "command": "git diff --check", "expectedOutput": null }, { "id": "vendor-sync", "label": "Vendor sync guard", "command": "wasm-port/tools/verify_vendor_sync.sh", "expectedOutput": "vendor sync up to date" }, { "id": "standalone-cnc-semantics", "label": "Standalone CNC semantics guard", "command": "wasm-port/tools/verify_no_standalone_cnc_semantics.sh", "expectedOutput": "standalone CNC semantics guard complete" }, { "id": "interp-wasm", "label": "Interpreter WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh", "expectedOutput": "interp_wasm_node_smoke=ok" }, { "id": "sim-config-inventory", "label": "Sim config inventory WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh", "expectedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0" }, { "id": "ini-panel-browser", "label": "INI panel browser smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh", "expectedOutput": "browser_ini_shell_integration_workflow_smoke=ok" }, { "id": "opfs-session-browser", "label": "OPFS session browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_opfs_session_workflow_browser.sh", "expectedOutput": "browser_opfs_session_workflow_smoke=ok" }, { "id": "release-artifact-url-browser", "label": "Release artifact URL browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh", "expectedOutput": "browser_release_artifact_url_workflow_smoke=ok" }, { "id": "project-batch-acceptance", "label": "Project batch acceptance workflow smoke", "command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh", "expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok" }, { "id": "ui-node-smokes", "label": "UI Node smokes", "command": "wasm-port/tests/ui/node/verify_ui_node_smokes.sh", "expectedOutput": "ui_node_smokes=ok" }, { "id": "host-smokes", "label": "Host aggregate smoke", "command": "wasm-port/tests/host/verify_host_smokes.sh", "expectedOutput": "host_wasm_opfs_browser_smokes=ok" }, { "id": "project-release-gate", "label": "Project release gate", "command": "wasm-port/tests/host/verify_project_release_gate.sh", "expectedOutput": "project_release_gate=ok" } ] }, "gateExecutionManifest": { "apiName": "project-release-gate-execution-manifest", "manifestVersion": 1, "phase": "ready", "ready": true, "gateCount": 12, "passedCount": 12, "unknownCount": 0, "missingGateIds": [], "manifest": { "apiName": "project-release-gate-manifest", "manifestVersion": 1, "gateCount": 12, "gateIds": [ "diff-check", "vendor-sync", "standalone-cnc-semantics", "interp-wasm", "sim-config-inventory", "ini-panel-browser", "opfs-session-browser", "release-artifact-url-browser", "project-batch-acceptance", "ui-node-smokes", "host-smokes", "project-release-gate" ], "gates": [ { "id": "diff-check", "label": "Git diff check", "command": "git diff --check", "expectedOutput": null }, { "id": "vendor-sync", "label": "Vendor sync guard", "command": "wasm-port/tools/verify_vendor_sync.sh", "expectedOutput": "vendor sync up to date" }, { "id": "standalone-cnc-semantics", "label": "Standalone CNC semantics guard", "command": "wasm-port/tools/verify_no_standalone_cnc_semantics.sh", "expectedOutput": "standalone CNC semantics guard complete" }, { "id": "interp-wasm", "label": "Interpreter WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh", "expectedOutput": "interp_wasm_node_smoke=ok" }, { "id": "sim-config-inventory", "label": "Sim config inventory WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh", "expectedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0" }, { "id": "ini-panel-browser", "label": "INI panel browser smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh", "expectedOutput": "browser_ini_shell_integration_workflow_smoke=ok" }, { "id": "opfs-session-browser", "label": "OPFS session browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_opfs_session_workflow_browser.sh", "expectedOutput": "browser_opfs_session_workflow_smoke=ok" }, { "id": "release-artifact-url-browser", "label": "Release artifact URL browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh", "expectedOutput": "browser_release_artifact_url_workflow_smoke=ok" }, { "id": "project-batch-acceptance", "label": "Project batch acceptance workflow smoke", "command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh", "expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok" }, { "id": "ui-node-smokes", "label": "UI Node smokes", "command": "wasm-port/tests/ui/node/verify_ui_node_smokes.sh", "expectedOutput": "ui_node_smokes=ok" }, { "id": "host-smokes", "label": "Host aggregate smoke", "command": "wasm-port/tests/host/verify_host_smokes.sh", "expectedOutput": "host_wasm_opfs_browser_smokes=ok" }, { "id": "project-release-gate", "label": "Project release gate", "command": "wasm-port/tests/host/verify_project_release_gate.sh", "expectedOutput": "project_release_gate=ok" } ] }, "rows": [ { "id": "diff-check", "label": "Git diff check", "command": "git diff --check", "expectedOutput": null, "observedOutput": null, "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "explicit-result" }, { "id": "vendor-sync", "label": "Vendor sync guard", "command": "wasm-port/tools/verify_vendor_sync.sh", "expectedOutput": "vendor sync up to date", "observedOutput": "vendor sync up to date", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" }, { "id": "standalone-cnc-semantics", "label": "Standalone CNC semantics guard", "command": "wasm-port/tools/verify_no_standalone_cnc_semantics.sh", "expectedOutput": "standalone CNC semantics guard complete", "observedOutput": "standalone CNC semantics guard complete", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" }, { "id": "interp-wasm", "label": "Interpreter WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh", "expectedOutput": "interp_wasm_node_smoke=ok", "observedOutput": "interp_wasm_node_smoke=ok", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" }, { "id": "sim-config-inventory", "label": "Sim config inventory WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh", "expectedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0", "observedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" }, { "id": "ini-panel-browser", "label": "INI panel browser smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh", "expectedOutput": "browser_ini_shell_integration_workflow_smoke=ok", "observedOutput": "browser_ini_shell_integration_workflow_smoke=ok", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" }, { "id": "opfs-session-browser", "label": "OPFS session browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_opfs_session_workflow_browser.sh", "expectedOutput": "browser_opfs_session_workflow_smoke=ok", "observedOutput": "browser_opfs_session_workflow_smoke=ok", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" }, { "id": "release-artifact-url-browser", "label": "Release artifact URL browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh", "expectedOutput": "browser_release_artifact_url_workflow_smoke=ok", "observedOutput": "browser_release_artifact_url_workflow_smoke=ok", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" }, { "id": "project-batch-acceptance", "label": "Project batch acceptance workflow smoke", "command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh", "expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok", "observedOutput": "project_batch_acceptance_workflow_node_smoke=ok", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" }, { "id": "ui-node-smokes", "label": "UI Node smokes", "command": "wasm-port/tests/ui/node/verify_ui_node_smokes.sh", "expectedOutput": "ui_node_smokes=ok", "observedOutput": "ui_node_smokes=ok", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" }, { "id": "host-smokes", "label": "Host aggregate smoke", "command": "wasm-port/tests/host/verify_host_smokes.sh", "expectedOutput": "host_wasm_opfs_browser_smokes=ok", "observedOutput": "host_wasm_opfs_browser_smokes=ok", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" }, { "id": "project-release-gate", "label": "Project release gate", "command": "wasm-port/tests/host/verify_project_release_gate.sh", "expectedOutput": "project_release_gate=ok", "observedOutput": "project_release_gate=ok", "observedOutputCount": 11, "status": "passed", "passed": true, "evidence": "expected-output" } ] }, "gateExecutionSummaryViewModel": { "apiName": "project-release-gate-execution-summary-view-model", "viewModelVersion": 1, "phase": "ready", "ready": true, "title": "Project release gate execution", "statusText": "Ready", "detailText": "All release gate evidence present", "statusLine": "Ready: All release gate evidence present", "gateCount": 12, "passedCount": 12, "unknownCount": 0, "missingGateIds": [], "nextGateId": null, "evidenceCounts": { "explicit-result": 1, "expected-output": 11 }, "rows": [ { "id": "gate-results", "label": "Release gate evidence", "value": "12/12 passed" }, { "id": "unknown-gates", "label": "Unknown gates", "value": "0" }, { "id": "next-gate", "label": "Next gate", "value": "none" }, { "id": "expected-output-evidence", "label": "Expected-output evidence", "value": "11" }, { "id": "explicit-result-evidence", "label": "Explicit-result evidence", "value": "1" }, { "id": "missing", "label": "Missing gate evidence", "value": "none" } ], "gateRows": [ { "id": "diff-check", "label": "Git diff check", "command": "git diff --check", "expectedOutput": null, "observedOutput": null, "evidence": "explicit-result", "status": "passed", "passed": true }, { "id": "vendor-sync", "label": "Vendor sync guard", "command": "wasm-port/tools/verify_vendor_sync.sh", "expectedOutput": "vendor sync up to date", "observedOutput": "vendor sync up to date", "evidence": "expected-output", "status": "passed", "passed": true }, { "id": "standalone-cnc-semantics", "label": "Standalone CNC semantics guard", "command": "wasm-port/tools/verify_no_standalone_cnc_semantics.sh", "expectedOutput": "standalone CNC semantics guard complete", "observedOutput": "standalone CNC semantics guard complete", "evidence": "expected-output", "status": "passed", "passed": true }, { "id": "interp-wasm", "label": "Interpreter WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh", "expectedOutput": "interp_wasm_node_smoke=ok", "observedOutput": "interp_wasm_node_smoke=ok", "evidence": "expected-output", "status": "passed", "passed": true }, { "id": "sim-config-inventory", "label": "Sim config inventory WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh", "expectedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0", "observedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0", "evidence": "expected-output", "status": "passed", "passed": true }, { "id": "ini-panel-browser", "label": "INI panel browser smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh", "expectedOutput": "browser_ini_shell_integration_workflow_smoke=ok", "observedOutput": "browser_ini_shell_integration_workflow_smoke=ok", "evidence": "expected-output", "status": "passed", "passed": true }, { "id": "opfs-session-browser", "label": "OPFS session browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_opfs_session_workflow_browser.sh", "expectedOutput": "browser_opfs_session_workflow_smoke=ok", "observedOutput": "browser_opfs_session_workflow_smoke=ok", "evidence": "expected-output", "status": "passed", "passed": true }, { "id": "release-artifact-url-browser", "label": "Release artifact URL browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh", "expectedOutput": "browser_release_artifact_url_workflow_smoke=ok", "observedOutput": "browser_release_artifact_url_workflow_smoke=ok", "evidence": "expected-output", "status": "passed", "passed": true }, { "id": "project-batch-acceptance", "label": "Project batch acceptance workflow smoke", "command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh", "expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok", "observedOutput": "project_batch_acceptance_workflow_node_smoke=ok", "evidence": "expected-output", "status": "passed", "passed": true }, { "id": "ui-node-smokes", "label": "UI Node smokes", "command": "wasm-port/tests/ui/node/verify_ui_node_smokes.sh", "expectedOutput": "ui_node_smokes=ok", "observedOutput": "ui_node_smokes=ok", "evidence": "expected-output", "status": "passed", "passed": true }, { "id": "host-smokes", "label": "Host aggregate smoke", "command": "wasm-port/tests/host/verify_host_smokes.sh", "expectedOutput": "host_wasm_opfs_browser_smokes=ok", "observedOutput": "host_wasm_opfs_browser_smokes=ok", "evidence": "expected-output", "status": "passed", "passed": true }, { "id": "project-release-gate", "label": "Project release gate", "command": "wasm-port/tests/host/verify_project_release_gate.sh", "expectedOutput": "project_release_gate=ok", "observedOutput": "project_release_gate=ok", "evidence": "expected-output", "status": "passed", "passed": true } ] }, "gateResultMatrix": { "apiName": "project-release-gate-result-matrix", "matrixVersion": 1, "phase": "ready", "ready": true, "gateCount": 12, "passedCount": 12, "unknownCount": 0, "missingGateIds": [], "manifest": { "apiName": "project-release-gate-manifest", "manifestVersion": 1, "gateCount": 12, "gateIds": [ "diff-check", "vendor-sync", "standalone-cnc-semantics", "interp-wasm", "sim-config-inventory", "ini-panel-browser", "opfs-session-browser", "release-artifact-url-browser", "project-batch-acceptance", "ui-node-smokes", "host-smokes", "project-release-gate" ], "gates": [ { "id": "diff-check", "label": "Git diff check", "command": "git diff --check", "expectedOutput": null }, { "id": "vendor-sync", "label": "Vendor sync guard", "command": "wasm-port/tools/verify_vendor_sync.sh", "expectedOutput": "vendor sync up to date" }, { "id": "standalone-cnc-semantics", "label": "Standalone CNC semantics guard", "command": "wasm-port/tools/verify_no_standalone_cnc_semantics.sh", "expectedOutput": "standalone CNC semantics guard complete" }, { "id": "interp-wasm", "label": "Interpreter WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh", "expectedOutput": "interp_wasm_node_smoke=ok" }, { "id": "sim-config-inventory", "label": "Sim config inventory WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh", "expectedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0" }, { "id": "ini-panel-browser", "label": "INI panel browser smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh", "expectedOutput": "browser_ini_shell_integration_workflow_smoke=ok" }, { "id": "opfs-session-browser", "label": "OPFS session browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_opfs_session_workflow_browser.sh", "expectedOutput": "browser_opfs_session_workflow_smoke=ok" }, { "id": "release-artifact-url-browser", "label": "Release artifact URL browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh", "expectedOutput": "browser_release_artifact_url_workflow_smoke=ok" }, { "id": "project-batch-acceptance", "label": "Project batch acceptance workflow smoke", "command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh", "expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok" }, { "id": "ui-node-smokes", "label": "UI Node smokes", "command": "wasm-port/tests/ui/node/verify_ui_node_smokes.sh", "expectedOutput": "ui_node_smokes=ok" }, { "id": "host-smokes", "label": "Host aggregate smoke", "command": "wasm-port/tests/host/verify_host_smokes.sh", "expectedOutput": "host_wasm_opfs_browser_smokes=ok" }, { "id": "project-release-gate", "label": "Project release gate", "command": "wasm-port/tests/host/verify_project_release_gate.sh", "expectedOutput": "project_release_gate=ok" } ] }, "rows": [ { "id": "diff-check", "label": "Git diff check", "command": "git diff --check", "expectedOutput": null, "status": "passed", "passed": true }, { "id": "vendor-sync", "label": "Vendor sync guard", "command": "wasm-port/tools/verify_vendor_sync.sh", "expectedOutput": "vendor sync up to date", "status": "passed", "passed": true }, { "id": "standalone-cnc-semantics", "label": "Standalone CNC semantics guard", "command": "wasm-port/tools/verify_no_standalone_cnc_semantics.sh", "expectedOutput": "standalone CNC semantics guard complete", "status": "passed", "passed": true }, { "id": "interp-wasm", "label": "Interpreter WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh", "expectedOutput": "interp_wasm_node_smoke=ok", "status": "passed", "passed": true }, { "id": "sim-config-inventory", "label": "Sim config inventory WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh", "expectedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0", "status": "passed", "passed": true }, { "id": "ini-panel-browser", "label": "INI panel browser smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh", "expectedOutput": "browser_ini_shell_integration_workflow_smoke=ok", "status": "passed", "passed": true }, { "id": "opfs-session-browser", "label": "OPFS session browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_opfs_session_workflow_browser.sh", "expectedOutput": "browser_opfs_session_workflow_smoke=ok", "status": "passed", "passed": true }, { "id": "release-artifact-url-browser", "label": "Release artifact URL browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh", "expectedOutput": "browser_release_artifact_url_workflow_smoke=ok", "status": "passed", "passed": true }, { "id": "project-batch-acceptance", "label": "Project batch acceptance workflow smoke", "command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh", "expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok", "status": "passed", "passed": true }, { "id": "ui-node-smokes", "label": "UI Node smokes", "command": "wasm-port/tests/ui/node/verify_ui_node_smokes.sh", "expectedOutput": "ui_node_smokes=ok", "status": "passed", "passed": true }, { "id": "host-smokes", "label": "Host aggregate smoke", "command": "wasm-port/tests/host/verify_host_smokes.sh", "expectedOutput": "host_wasm_opfs_browser_smokes=ok", "status": "passed", "passed": true }, { "id": "project-release-gate", "label": "Project release gate", "command": "wasm-port/tests/host/verify_project_release_gate.sh", "expectedOutput": "project_release_gate=ok", "status": "passed", "passed": true } ] }, "gateActionPlan": { "apiName": "project-release-gate-action-plan", "planVersion": 1, "phase": "ready", "ready": true, "gateCount": 12, "completedCount": 12, "pendingCount": 0, "completedGateIds": [ "diff-check", "vendor-sync", "standalone-cnc-semantics", "interp-wasm", "sim-config-inventory", "ini-panel-browser", "opfs-session-browser", "release-artifact-url-browser", "project-batch-acceptance", "ui-node-smokes", "host-smokes", "project-release-gate" ], "pendingGateIds": [], "nextGateId": null, "nextCommand": null, "commands": [], "shellScript": "# Project release gates are already marked passed.\n", "rows": [] }, "gates": [ { "id": "diff-check", "label": "Git diff check", "command": "git diff --check", "expectedOutput": null, "status": "passed", "passed": true }, { "id": "vendor-sync", "label": "Vendor sync guard", "command": "wasm-port/tools/verify_vendor_sync.sh", "expectedOutput": "vendor sync up to date", "status": "passed", "passed": true }, { "id": "standalone-cnc-semantics", "label": "Standalone CNC semantics guard", "command": "wasm-port/tools/verify_no_standalone_cnc_semantics.sh", "expectedOutput": "standalone CNC semantics guard complete", "status": "passed", "passed": true }, { "id": "interp-wasm", "label": "Interpreter WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh", "expectedOutput": "interp_wasm_node_smoke=ok", "status": "passed", "passed": true }, { "id": "sim-config-inventory", "label": "Sim config inventory WASM Node smoke", "command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh", "expectedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0", "status": "passed", "passed": true }, { "id": "ini-panel-browser", "label": "INI panel browser smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh", "expectedOutput": "browser_ini_shell_integration_workflow_smoke=ok", "status": "passed", "passed": true }, { "id": "opfs-session-browser", "label": "OPFS session browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_opfs_session_workflow_browser.sh", "expectedOutput": "browser_opfs_session_workflow_smoke=ok", "status": "passed", "passed": true }, { "id": "release-artifact-url-browser", "label": "Release artifact URL browser workflow smoke", "command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh", "expectedOutput": "browser_release_artifact_url_workflow_smoke=ok", "status": "passed", "passed": true }, { "id": "project-batch-acceptance", "label": "Project batch acceptance workflow smoke", "command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh", "expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok", "status": "passed", "passed": true }, { "id": "ui-node-smokes", "label": "UI Node smokes", "command": "wasm-port/tests/ui/node/verify_ui_node_smokes.sh", "expectedOutput": "ui_node_smokes=ok", "status": "passed", "passed": true }, { "id": "host-smokes", "label": "Host aggregate smoke", "command": "wasm-port/tests/host/verify_host_smokes.sh", "expectedOutput": "host_wasm_opfs_browser_smokes=ok", "status": "passed", "passed": true }, { "id": "project-release-gate", "label": "Project release gate", "command": "wasm-port/tests/host/verify_project_release_gate.sh", "expectedOutput": "project_release_gate=ok", "status": "passed", "passed": true } ], "rows": [ { "id": "project-release-gate", "label": "Project release gate", "value": "passed" }, { "id": "sim-config-inventory", "label": "Sim config inventory", "value": "unexpected_fail=0" }, { "id": "virtual-hal-sim-config-source-coverage", "label": "Virtual HAL sim-config source coverage", "value": "ready" }, { "id": "virtual-hal-sim-config-promotion-candidates", "label": "Virtual HAL sim-config promotion candidates", "value": "ready" }, { "id": "promotion-candidate-artifact", "label": "Promotion candidate artifact", "value": "wasm-port/build/wasm/sim-configs-inventory/promotion-candidates.tsv" }, { "id": "promotion-candidate-layers", "label": "Promotion candidate layers", "value": "evidence-ready=8 inventory-ready=20" }, { "id": "promotion-candidate-total", "label": "Promotion candidate total", "value": "28" }, { "id": "evidence-expansion-candidates", "label": "Evidence expansion candidates", "value": "13" }, { "id": "evidence-expansion-artifact", "label": "Evidence expansion artifact", "value": "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv" }, { "id": "promotion-candidate-allowed", "label": "Promotion candidates allowed", "value": "0" }, { "id": "virtual-hal-promotion-families", "label": "Virtual HAL promotion families", "value": "qtdragon-on-abort: 6/6 ready; vismach-remap-sims: 1/1 ready; rose-engine-rcone-demo: 1/1 ready" }, { "id": "virtual-hal-promotion-family-qtdragon-on-abort", "label": "Promotion family qtdragon-on-abort", "value": "6/6 ready; sources=12; diagnostics=ready", "sourceFiles": [ "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/qtdragon_inch.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini", "linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/qtdragon_hd_vertical.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_xyz/on_abort.ngc", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini", "linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/on_abort.ngc", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/qtdragon_mpg.ini", "linuxcnc/configs/sim/qtvcp_screens/qtdragon/on_abort.ngc" ] }, { "id": "virtual-hal-promotion-family-vismach-remap-sims", "label": "Promotion family vismach-remap-sims", "value": "1/1 ready; sources=3; diagnostics=ready", "sourceFiles": [ "linuxcnc/configs/sim/axis/vismach/puma/puma.ini", "linuxcnc/configs/sim/axis/vismach/puma/puma_seam_weld.ngc", "linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc" ] }, { "id": "virtual-hal-promotion-family-rose-engine-rcone-demo", "label": "Promotion family rose-engine-rcone-demo", "value": "1/1 ready; sources=2; diagnostics=ready", "sourceFiles": [ "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini", "linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc" ] }, { "id": "virtual-hal-sim-config-macro-load-fixtures", "label": "Virtual HAL sim-config macro/load fixtures", "value": "ready" }, { "id": "virtual-hal-motion-controller-matrix", "label": "Virtual HAL motion controller matrix", "value": "ready" }, { "id": "blocked-runtime-families", "label": "Blocked runtime families", "value": "L4-USER-M-PROCESS, L4-TOOL-DB, L4-PYTHON-REMAP" }, { "id": "hard-block-runtime-lock", "label": "Hard-block runtime lock", "value": "locked (3 families)" }, { "id": "promoted-blocked-family-count", "label": "Promoted blocked families", "value": "0 promoted" }, { "id": "axis-screenshot-artifacts", "label": "AXIS screenshot artifacts", "value": "not captured" } ] }