Files
cnc_wams/wasm-port/tests/fixtures/project-release-readiness-ready.json
wangdequan 00af30c074 收束promotion候选证据
结论:按text22铁律完成promotion-candidates双层证据管理,baseline保持28/28/131/0,Python remap、tool DB、external user-M hard block继续locked。
2026-06-18 19:32:28 +08:00

2435 lines
93 KiB
JSON

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