Complete sim config boundary coverage
This commit is contained in:
@@ -36,6 +36,12 @@ The current WASM sim-config smoke validation command is:
|
||||
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
|
||||
```
|
||||
|
||||
The current WASM sim-config inventory validation command is:
|
||||
|
||||
```bash
|
||||
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
|
||||
```
|
||||
|
||||
The current WASM `nc_files` smoke validation command is:
|
||||
|
||||
```bash
|
||||
@@ -92,6 +98,7 @@ running the aggregate host check:
|
||||
wasm-port/tests/wasm/node/verify_ini_wasm.sh
|
||||
wasm-port/tests/wasm/node/verify_interp_wasm.sh
|
||||
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
|
||||
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
|
||||
wasm-port/tests/wasm/node/verify_nc_files_wasm.sh
|
||||
wasm-port/tests/wasm/node/verify_tp_wasm.sh
|
||||
wasm-port/tests/opfs/node/verify_file_service.sh
|
||||
@@ -122,7 +129,278 @@ Layer responsibilities are intentionally narrow:
|
||||
|
||||
The current `wasm-port/tests/native/verify_sim_configs.sh` run reports
|
||||
`total: 159`, `pass: 151`, `expected_fail: 8`, and `unexpected_fail: 0`.
|
||||
The eight expected failures are:
|
||||
The eight expected failures are listed in the table below.
|
||||
|
||||
The tracked per-program inventory for this layer now lives in
|
||||
`wasm-port/docs/sim-configs-coverage-matrix.md`. That matrix maps all 159
|
||||
current `summary.tsv` records to program class, native result, current
|
||||
Layer 3/4 coverage, and the first-pass blocked or follow-up note used for
|
||||
future `configs/sim` coverage work.
|
||||
|
||||
The native harness also emits machine-readable derived artifacts without
|
||||
changing the `summary.tsv` schema:
|
||||
|
||||
```text
|
||||
wasm-port/build/native/sim-configs/class-summary.tsv
|
||||
wasm-port/build/native/sim-configs/path-matrix.tsv
|
||||
```
|
||||
|
||||
`class-summary.tsv` aggregates class/status/expected-failure counts.
|
||||
`path-matrix.tsv` records each path, class, native status, expected-failure
|
||||
reason, INI, tool table, runtime family, and blocked kind for CI and Node
|
||||
inventory reconciliation.
|
||||
|
||||
The Node inventory layer writes its own machine-readable artifacts:
|
||||
|
||||
```text
|
||||
wasm-port/build/wasm/sim-configs-inventory/summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/skip-summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/blocked-dependency-summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/full-process-boundary-summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/user-m-process-state-targets.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/user-m-process-native-state-alignment.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/tool-db-process-protocol-gates.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/tool-db-process-native-protocol-alignment.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/python-remap-boundary-summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/python-remap-runtime-gates.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/python-remap-native-runtime-alignment.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/python-remap-native-runtime-readiness.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/python-remap-native-runtime-state-plan.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/python-remap-native-runtime-fixture-plan.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/python-remap-family-summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/boundary-phase-completion-summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/native-proof-alignment-summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-native-alignment-summary.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/blocked-runtime-promotion-lock.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/next-boundary-worklist.tsv
|
||||
wasm-port/build/wasm/sim-configs-inventory/boundary-proof-gates.tsv
|
||||
```
|
||||
|
||||
The current skip/block summary is `ASSET-ONLY=65`, `L4-PYTHON-REMAP=53`,
|
||||
`L4-TOOL-DB=1`, `L4-USER-M-PROCESS=1`, `NON_MAIN_CLASS=10`, and
|
||||
`UPSTREAM-DEMO=1`.
|
||||
`skip-summary.tsv` is checked against the skip reasons derived from
|
||||
`path-matrix.tsv`, so both the per-row inventory status and the aggregate
|
||||
skip counts fail on blocked-policy drift.
|
||||
For eligible rows, missing vendored machine context is an inventory failure,
|
||||
not an expected skip; blocked rows must be classified by runtime dependency
|
||||
before the Node inventory filter runs.
|
||||
`boundary-summary.tsv` records one row per native inventory path with the
|
||||
matrix blocked kind, SDK classifier recommendation, declared HAL/UI/HALUI/Python
|
||||
process dependencies, `[EMCIO]DB_PROGRAM`, user-M execution codes, and the
|
||||
subset of execution user-M codes that are not staged by vendored
|
||||
`USER_M_PATH` files. It also separates Python UI/DB process dependencies from
|
||||
Python remap runtime dependencies. For vendored INI rows, the SDK classifier
|
||||
report must be available and `L4-TOOL-DB` / `L4-USER-M-PROCESS` hard blocks
|
||||
must match the classifier recommendation. `recommended_blocked=UNAVAILABLE` is
|
||||
only allowed when the boundary row records a missing vendored INI. Non-vendored
|
||||
Python-remap families remain unavailable until their dependency inventory batch
|
||||
vendors the required INI context.
|
||||
`ini-boundary-summary.tsv` aggregates those path-level reports by INI, giving
|
||||
vendored sim-config INIs a direct `report_available=1` coverage check and
|
||||
recording hard-block recommendation alignment at INI granularity.
|
||||
The inventory also guards safe representative rows such as
|
||||
`axis/gladevcp/probe.ngc`, `woodpecker/on_abort.ngc`,
|
||||
`axis/vismach/puma/puma_cube.ngc`, and
|
||||
`axis/vismach/melfa-sim/example.ngc`: they must keep their declared process
|
||||
dependencies in `boundary-summary.tsv`, remain Node/browser representatives,
|
||||
match the expected HAL/UI/HALUI/Python process flags, and avoid hard-block
|
||||
promotion unless a real hard runtime dependency appears.
|
||||
Deterministic `M110`/`M111` representatives are also guarded: the inventory
|
||||
must see the execution-chain user-M code, a vendored user-M file, and no hard
|
||||
`L4-USER-M-PROCESS` recommendation. `opa_demo.ngc` includes its vendored
|
||||
`circles.ngc` subroutine text in the boundary analysis so the `M111` call is
|
||||
accounted for even though it is reached through `SUBROUTINE_PATH`.
|
||||
`blocked-dependency-summary.tsv` records the hard blocked rows without
|
||||
promoting them: 53 Python-remap rows, one tool-database row, and one external
|
||||
user-M process row. It reads the source `linuxcnc/configs/sim` INI files for
|
||||
dependency accounting only and records Python modules, remap/prolog/epilog
|
||||
function ownership, NGC remap subpaths, HAL/UI/HALUI process declarations,
|
||||
`DB_PROGRAM`, tool database protocol evidence, external user-M execution
|
||||
codes, user-M process script files, user-M process side-effect evidence, and
|
||||
the LinuxCNC source/config files that own the blocked behavior. The user-M
|
||||
evidence is source-derived from the `M128`/`M129` Tcl scripts and records their
|
||||
Tcl/HAL runtime use, kinstype guard, and `ini.[xyz]` HAL pin updates. The tool
|
||||
database evidence is source-derived from `taskclass.cc`, `tooldata_db.cc`, and
|
||||
`axis/db_demo/db.py`, including the `v2.1` handshake, `g`/`FINI` get-all, and
|
||||
`l`/`u`/`p` notification protocol.
|
||||
The final Node inventory `summary.tsv` also guards every hard-blocked row:
|
||||
`L4-TOOL-DB`, `L4-USER-M-PROCESS`, and `L4-PYTHON-REMAP` paths must remain
|
||||
`SKIP` with their matching blocked reason, not only carry a matrix-level
|
||||
blocked label.
|
||||
The detailed boundary design for the current non-Python hard blocks is tracked
|
||||
in `wasm-port/docs/full-process-boundary-design.md`. That document records the
|
||||
LinuxCNC owner sets and proof required before `axis/vismach/millturn/example.ngc`
|
||||
or `axis/db_demo/base.ngc` can move out of `L4-USER-M-PROCESS` or
|
||||
`L4-TOOL-DB`. It is not an execution artifact and does not change the current
|
||||
Layer 4 blocked counts.
|
||||
`full-process-boundary-summary.tsv` is the machine-readable companion for that
|
||||
design record. It has one designed-but-blocked row for `millturn` and one for
|
||||
`db_demo`, records the LinuxCNC runtime owner evidence from the corresponding
|
||||
blocked dependency row, records the required native/Node/browser proof, and
|
||||
keeps `execution_enabled=0` until the corresponding LinuxCNC-owned runtime
|
||||
boundary exists. The tracked matrix and inventory guard also require those two
|
||||
rows to remain non-representative in Node/browser until that proof exists.
|
||||
`user-m-process-state-targets.tsv` expands the `millturn` M128/M129 process
|
||||
boundary into per-pin proof targets: two user-M codes, three axes, and four
|
||||
`ini.[xyz]` HAL pins per axis. Each row records the source Tcl file, remap
|
||||
caller, kinstype guard, INI source section/field, expected value,
|
||||
`proof_status=pending`, `execution_enabled=0`, and `promotion_allowed=0`.
|
||||
`user-m-process-native-state-alignment.tsv` then aligns each generated pin
|
||||
target with the native source probe stdout key/value pair, for example
|
||||
`M128_X_AXIS_X.MIN_LIMIT_ok=1`. This catches drift between generated target
|
||||
rows and the LinuxCNC-owned native source proof without executing Tcl/HAL or
|
||||
allowing promotion.
|
||||
`user-m-process-native-transition-alignment.tsv` performs the same source
|
||||
alignment for the `M428/M429` transition plan. It checks the native probe
|
||||
stdout for `motion.analog-out-03`, kinstype targets `0` and `1`,
|
||||
`G59.1`/`G59.2`, `P7`/`P8`, and the `M428 -> M128` / `M429 -> M129` calls.
|
||||
Those rows also remain `proof_status=pending`, `execution_enabled=0`, and
|
||||
`promotion_allowed=0`.
|
||||
`user-m-process-native-runtime-state-plan.tsv` is the runnable native probe
|
||||
contract that follows those source-alignment tables. It names the required
|
||||
LinuxCNC task/HAL/Tcl user-M process runtime, the required HAL/INI
|
||||
environment, and the exact `ini.[xyz].*` state values that a future native
|
||||
runtime probe must record after `M428` and `M429`. It remains a plan only with
|
||||
`native_runtime_status=pending_native_hal_tcl_process_probe`,
|
||||
`execution_enabled=0`, and `promotion_allowed=0`.
|
||||
`user-m-process-native-runtime-readiness.tsv` is the host capability gate for
|
||||
that future probe. It records availability of `tclsh`, `halrun`, `halcmd`, and
|
||||
`linuxcnc`, captures PATH evidence for available commands, and leaves
|
||||
`proof_status=pending`, `execution_enabled=0`, and `promotion_allowed=0`.
|
||||
`user-m-process-native-runtime-probe-gate.tsv` combines that readiness with the
|
||||
source/state proof for `M428/M128` and `M429/M129`. The native
|
||||
`probe_millturn_user_m_runtime.sh` entry point is wired through
|
||||
`build_native_probes.sh`; without the full LinuxCNC HAL/Tcl command set it
|
||||
reports `skipped_missing_host_runtime`, and with the runtime present it remains
|
||||
disabled by default. When explicitly enabled with
|
||||
`ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1`, it starts the vendored `millturn.ini`,
|
||||
runs the LinuxCNC-owned Tcl `M128`/`M129` scripts, verifies the expected
|
||||
`ini.[xyz].*` HAL pin state, and reports `runtime_state_probe_passed` without
|
||||
enabling promotion.
|
||||
`tool-db-process-protocol-gates.tsv` expands the `db_demo` tool-database
|
||||
boundary into pending protocol, callback, and state gates. It records the
|
||||
LinuxCNC `v2.1`, `g`, `l`, `u`, and `p` protocol requirements, the demo DB
|
||||
callbacks, DB mode state targets such as ignored `TOOL_TABLE`, `T10..T19`,
|
||||
`tno+100` pockets, and OPFS/host persistence boundaries, while keeping
|
||||
`proof_status=pending`, `execution_enabled=0`, and `promotion_allowed=0`.
|
||||
`tool-db-process-native-protocol-alignment.tsv` aligns each generated DB gate
|
||||
with the native source probe stdout proof keys, including the protocol
|
||||
handshake, get-all, notifications, callback registration, and nonrandom state
|
||||
targets. This is still dependency/proof accounting only: it does not spawn
|
||||
`DB_PROGRAM`, emulate the tool database protocol in JavaScript, or fall back to
|
||||
a `.tbl` file.
|
||||
`tool-db-process-native-runtime-readiness.tsv` records the host prerequisites
|
||||
for the guarded DB process protocol probe: `python3`, `linuxcnc`, `milltask`,
|
||||
`halcmd`, the configured `db_nonran.py` executable, and LinuxCNC's Python
|
||||
`linuxcnc.so` / `tooldb.py` modules. It captures availability evidence while
|
||||
keeping `proof_status=pending`, `execution_enabled=0`, and
|
||||
`promotion_allowed=0`. When explicitly enabled with
|
||||
`ENABLE_TOOL_DB_RUNTIME_PROBE=1`, `probe_tool_db_runtime.sh` starts the
|
||||
vendored `DB_PROGRAM`, drives the LinuxCNC `tooldb.py` `v2.1`/`g`/`p`/`l`/`u`
|
||||
protocol, verifies nonrandom startup/update/load/unload state and persistence,
|
||||
and reports `runtime_protocol_probe_passed` without enabling promotion.
|
||||
`python-remap-boundary-summary.tsv` is the machine-readable companion for the
|
||||
Python remap inventory batch. It has one inventory-only row for each
|
||||
`L4-PYTHON-REMAP` path, records Python modules, remap/prolog/epilog functions,
|
||||
NGC-only subpaths, HAL/UI/HALUI assumptions, LinuxCNC Python runtime owner
|
||||
evidence from `interp_python.cc` and `python_plugin.cc`, and keeps
|
||||
`execution_enabled=0` until a LinuxCNC-owned Python runtime boundary exists.
|
||||
`python-remap-runtime-gates.tsv` expands those rows into Python module,
|
||||
remap/prolog/epilog callable, NGC-only subpath, process-assumption, and
|
||||
runtime-owner gates, all with `proof_status=pending`,
|
||||
`execution_enabled=0`, and `promotion_allowed=0`.
|
||||
`python-remap-native-runtime-alignment.tsv` aligns every generated Python gate
|
||||
with native source proof: exact runtime owner gates use keys such as
|
||||
`python_runtime_pycall_dispatch`, while dependency gates use representative
|
||||
family inventory proof or the aggregate
|
||||
`python_remap_native_source_inventory_proof`. It does not initialize Python,
|
||||
import modules, execute callbacks, or promote browser/Node coverage.
|
||||
`python-remap-native-runtime-readiness.tsv` records the native runtime
|
||||
prerequisites for guarded probes by family: `python3`, `linuxcnc`,
|
||||
LinuxCNC's `interp_python.cc` / `python_plugin.cc` owner source files, and the
|
||||
configured Python modules. It is a readiness gate only and keeps every row
|
||||
`proof_status=pending`, `execution_enabled=0`, and `promotion_allowed=0`.
|
||||
`python-remap-native-runtime-state-plan.tsv` records the next native runtime
|
||||
probe target set by family: LinuxCNC Python phases, configured modules,
|
||||
callables, NGC-only subpaths, process assumptions, readiness counts, and
|
||||
source-alignment artifacts. It remains a plan only and does not initialize
|
||||
Python, import modules, execute callbacks, or permit promotion.
|
||||
`python-remap-native-runtime-fixture-plan.tsv` selects the first minimal
|
||||
Python runtime lifecycle fixture, `axis/remap/stop-lookahead/nc_files`, because
|
||||
it exercises Python runtime phases and configured modules without Python
|
||||
callable or NGC-only subpath complexity. It is still a fixture plan only:
|
||||
`proof_status=pending`, `execution_enabled=0`, and `promotion_allowed=0`.
|
||||
When explicitly enabled with `ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1`,
|
||||
`probe_python_remap_runtime.sh` follows the fixture `demo.ini` Python path and
|
||||
toplevel declarations, imports the vendored modules, verifies `queuebuster`
|
||||
callable lookup, generator return, and first `INTERP_EXECUTE_FINISH` yield, and
|
||||
reports `runtime_lifecycle_probe_passed` without promoting Python-remap
|
||||
execution.
|
||||
`python-remap-family-summary.tsv` aggregates the same blocked rows by runtime
|
||||
family, preserving row and INI counts plus family-level Python module,
|
||||
remap/prolog/epilog, NGC-only subpath, Python runtime owner evidence,
|
||||
HAL/UI/HALUI, and `execution_enabled=0` evidence. It is dependency inventory
|
||||
only and must not be used to promote Python-remap execution.
|
||||
`boundary-phase-completion-summary.tsv` records the current boundary-phase
|
||||
completion criteria as machine-readable checks: vendored INI boundary report
|
||||
coverage, hard-block dependency evidence, safe HAL/UI representative coverage,
|
||||
proof that blocked families remain skipped/non-representative with execution
|
||||
disabled, and proof that blocked runtime families carry LinuxCNC-owned user-M,
|
||||
tool DB, and Python runtime evidence fields. It also records native source
|
||||
proof alignment when the native proof summary is available, plus the aggregate
|
||||
native stdout alignment summary for user-M, tool DB, and Python runtime gates.
|
||||
`native-proof-alignment-summary.tsv` aligns native source proof rows with the
|
||||
generated worklist and native proof gates for user-M, tool DB, and Python
|
||||
runtime blockers. It is proof-consumption accounting only and keeps execution
|
||||
and promotion disabled.
|
||||
`runtime-boundary-native-alignment-summary.tsv` summarizes the three detailed
|
||||
native alignment artifacts. It requires every alignment row to have native
|
||||
stdout evidence, `alignment_ok=1`, `proof_status=pending`,
|
||||
`execution_enabled=0`, and `promotion_allowed=0`.
|
||||
`blocked-runtime-promotion-lock.tsv` combines the next-boundary worklist,
|
||||
native/Node/browser proof gates, and runtime native alignment summary into one
|
||||
promotion lock per blocked runtime target. A lock row is active only while
|
||||
every proof layer is still pending, execution and promotion remain disabled,
|
||||
and the matching runtime alignment artifact is complete.
|
||||
`next-boundary-worklist.tsv` records the next blocked runtime-boundary design
|
||||
targets in priority order. It starts with the designed-but-disabled
|
||||
`millturn` external user-M process and `db_demo` tool database process
|
||||
boundaries, then lists Python runtime families from the inventory. Every row
|
||||
keeps `execution_enabled=0` and `promotion_allowed=0`, records the LinuxCNC
|
||||
owner set and runtime owner evidence, records required native, Node, and
|
||||
browser proof, and names the next boundary-design action before promotion.
|
||||
`boundary-proof-gates.tsv` expands that worklist into one pending native,
|
||||
Node, and browser proof gate per target. It is a promotion guard only: current
|
||||
rows keep `proof_status=pending`, `execution_enabled=0`, and
|
||||
`promotion_allowed=0`; user-M gates must require HAL pin state rather than
|
||||
event-only proof, tool-DB gates must require protocol proof rather than a
|
||||
`.tbl` fallback, and Python gates must require a LinuxCNC-owned Python runtime
|
||||
boundary rather than JavaScript semantics.
|
||||
The browser interpreter smoke reads the browser-layer rows from this artifact
|
||||
before running safe representatives, so `millturn`, `db_demo`, and Python
|
||||
runtime families cannot be accidentally treated as browser/full-process
|
||||
coverage while their proof gates remain pending.
|
||||
|
||||
Current `configs/sim` class taxonomy:
|
||||
|
||||
| Class | Meaning | Current policy |
|
||||
| --- | --- | --- |
|
||||
| `main` | A complete standalone-executable sim-config program. | Eligible for native inventory; promote to Layer 3/4 when the required runtime boundary exists. |
|
||||
| `macro_load` | A macro or load/parse asset that is not the primary machine program entry point. | Keep in native inventory, but do not treat it as a browser main-program target by default. Add class-level load/parse representatives instead of widening browser execution blindly. |
|
||||
| `remap_subroutine` | A remap or subroutine asset under `remap_subs/` or similar directories. | Validate through remap parse/execute paths, not by pretending it is a standalone browser main program. |
|
||||
|
||||
Current `configs/sim` blocked policy:
|
||||
|
||||
| Blocked kind | Meaning | Current examples |
|
||||
| --- | --- | --- |
|
||||
| `ASSET-ONLY` | The file is a macro/remap asset or subroutine and is not a standalone browser main-program target. | `configs/sim/*/remap_subs/*.ngc` entries in the matrix. |
|
||||
| `L4-TOOL-DB` | Native LinuxCNC `rs274` coverage exists, but Node/browser inventory is blocked by LinuxCNC tool-database process boundaries such as `[EMCIO]DB_PROGRAM`. | `configs/sim/axis/db_demo/*`. |
|
||||
| `L4-USER-M-PROCESS` | Native LinuxCNC `rs274` coverage exists, but Node/browser inventory is blocked because the config depends on external `USER_M_PATH` process execution rather than the deterministic `M110`/`M111` boundary already modeled by the standalone runtime. | `configs/sim/axis/vismach/millturn/*`. |
|
||||
| `L4-PYTHON-REMAP` | Native LinuxCNC `rs274` coverage exists, but full Node/browser inventory is blocked until an intentional Python-remap runtime boundary is exposed for Layer 4. | `configs/sim/gmoccapy/*`, `configs/sim/axis/laser/*`, `configs/sim/axis/remap/*/nc_files/*.ngc`, `configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos/*`, and `configs/sim/axis/vismach/VMC_toolchange/toolchange.ngc`. |
|
||||
| `UPSTREAM-DEMO` | A preserved upstream demo edge that should remain an expected failure instead of being forced through standalone semantics. | `axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos/incremental_repetition_g533.ngc`. |
|
||||
|
||||
| Program | Layer 2 classification | Current Layer 3/4 coverage or boundary |
|
||||
| --- | --- | --- |
|
||||
@@ -499,14 +777,15 @@ The validation fails if:
|
||||
| Harness | Purpose |
|
||||
| --- | --- |
|
||||
| `tests/wasm/node/verify_ini_wasm.sh` | Validates the browser-facing INI WASM module can be built from vendored LinuxCNC `inifile.cc`, loaded through the JS SDK in Node, and queried through the exported C ABI, including LinuxCNC-backed boolean conversion and machine-session file-name string lookup. |
|
||||
| `tests/wasm/node/verify_interp_wasm.sh` | Validates the interpreter-core WASM module can be built from vendored LinuxCNC interpreter/remap source, loaded through the interpreter JS SDK, run the first fixture group through `Interp::execute()` and selected file fixtures plus vendored upstream `tests/interp` regression files through `Interp::open()`/`read()`/`execute()`, match the native canonical event plus required state readback fixtures, emit `run_step` execution-status records with LinuxCNC line number, encoded source statement, return code, and interpreter axis positions for file execution, cover vendored `tests/interp/flowsnake` recursive O-word file execution, `tests/interp/g6164` path-control and naive-cam tolerance execution, `tests/interp/oword-unwind` continue-on-error stack unwind behavior through planner-staged INI context, selected `tests/interp/bad` file-error paths, and `tests/interp/g33.1` rigid-tap file execution, run vendored `xyzac-trt`/`xyzbc-trt` switchkins remap demo files through the WASM C ABI/SDK path, and run parameter-file restore/save through vendored LinuxCNC `Interp::restore_parameters()` and `Interp::save_parameters()`. |
|
||||
| `tests/wasm/node/verify_sim_configs_wasm.sh` | Validates representative vendored LinuxCNC `configs/sim` programs in Node WASM through `planSimConfigStaging()` plus `runSimConfigProgram()`. The generic `planIniFileContextStaging()` planner and its sim-config wrapper use INI text and `tools/source-manifest.txt` to collect the program, INI, tool table, parameter file when vendored, `SUBROUTINE_PATH` files, `USER_M_PATH` files, and remap-NGC files before forwarding to `runFileWithIni()` or `runFiveAxisRemapFile()`. This covers INI-driven `U/V/W` axis mask handling, real `USER_M_PATH` registration for executable `M110`/`M111`, all four current external-offset M111 expected-failure programs, `SUBROUTINE_PATH` staging for `opa_demo.ngc -> circles.ngc`, bridge-mill remap-subroutine staging, and vendored LinuxCNC bridge-mill NGC remap execution without spawning host processes. The same smoke includes synthetic staging-plan assertions for generic `TOOL_TABLE`, `PARAMETER_FILE`, multi-directory `SUBROUTINE_PATH`, `USER_M_PATH`, and `REMAP ... ngc=...` file collection. |
|
||||
| `tests/wasm/node/verify_interp_wasm.sh` | Validates the interpreter-core WASM module can be built from vendored LinuxCNC interpreter/remap source, loaded through the interpreter JS SDK, run the first fixture group through `Interp::execute()` and selected file fixtures plus vendored upstream `tests/interp` regression files through `Interp::open()`/`read()`/`execute()`, match the native canonical event plus required state readback fixtures, emit `run_step` execution-status records with LinuxCNC line number, encoded source statement, return code, and interpreter axis positions for file execution, cover vendored `tests/interp/flowsnake` recursive O-word file execution, `tests/interp/g6164` path-control and naive-cam tolerance execution, `tests/interp/oword-unwind` continue-on-error stack unwind behavior through planner-staged INI context, selected `tests/interp/bad` file-error paths, and `tests/interp/g33.1` rigid-tap file execution, run vendored `xyzac-trt`/`xyzbc-trt` table-rotary-tilting and `xyzab-tdr` table-dual-rotary switchkins remap demo files through the WASM C ABI/SDK path, and run parameter-file restore/save through vendored LinuxCNC `Interp::restore_parameters()` and `Interp::save_parameters()`. |
|
||||
| `tests/wasm/node/verify_sim_configs_wasm.sh` | Validates representative vendored LinuxCNC `configs/sim` programs in Node WASM through `planSimConfigStaging()` plus `runSimConfigProgram()`. The generic `planIniFileContextStaging()` planner and its sim-config wrapper use INI text and `tools/source-manifest.txt` to collect the program, INI, tool table, parameter file when vendored, `SUBROUTINE_PATH` files, `USER_M_PATH` files, and remap-NGC files before forwarding to `runFileWithIni()` or `runFiveAxisRemapFile()`. This covers INI-driven `U/V/W` axis mask handling, real `USER_M_PATH` registration for executable `M110`/`M111`, all four current external-offset M111 expected-failure programs, deterministic `woodpecker/on_abort.ngc` file execution, plain INI/tool-table execution through `axis/gladevcp/probe.ngc`, `SUBROUTINE_PATH` staging for `opa_demo.ngc -> circles.ngc`, bridge-mill remap-subroutine staging, vendored LinuxCNC bridge-mill and `melfa-sim` NGC remap execution, and PUMA machine-context execution without spawning host processes. The same smoke includes synthetic staging-plan assertions for generic `TOOL_TABLE`, `PARAMETER_FILE`, multi-directory `SUBROUTINE_PATH`, `USER_M_PATH`, and `REMAP ... ngc=...` file collection. |
|
||||
| `tests/wasm/node/verify_sim_configs_inventory_wasm.sh` | Validates the first machine-readable Node inventory layer for `configs/sim`. It ensures native `build/native/sim-configs/summary.tsv`, generated `class-summary.tsv`, and generated `path-matrix.tsv` exist; verifies that generated `path-matrix.tsv` and tracked `docs/sim-configs-coverage-matrix.md` contain the same 159 paths as native `summary.tsv`; checks tracked matrix fields for class, native status, expected-failure reason, and blocked kind drift against generated `path-matrix.tsv`; and checks that generated `class-summary.tsv` matches class/status/expected-failure counts derived from `summary.tsv`. It then executes only entries that are currently vendored and have a defined standalone/WASM runtime path, and writes the sim-config inventory TSV artifacts. The boundary summary records one row per native inventory path with the matrix block, SDK classifier recommendation, declared HAL/UI/HALUI/Python process dependencies, `[EMCIO]DB_PROGRAM`, and execution-chain user-M codes; vendored INI rows must have an available classifier report, vendored hard blocks fail on classifier/matrix drift, safe process-declaring representatives must remain Node/browser `REP` rows with the expected process flag combinations rather than full-process promotions, and the designed full-process blocked rows must remain non-`REP` until their proof criteria are met. The generated inventory summary also requires all hard-blocked rows to remain `SKIP` with matching reasons, and `skip-summary.tsv` must match the matrix-derived skip counts. The blocked-dependency and boundary summaries record hard blocked Python-remap, tool-database, and external user-M rows from source `linuxcnc/configs/sim` INI files for dependency accounting only, including LinuxCNC source/config ownership fields, user-M script side effects, tool DB protocol evidence, Python runtime owner evidence, and completion criteria that all remain non-executing. Current gate: `executed=28`, `passed=28`, `skipped=131`, `unexpected_fail=0`; current skip/block counts are `ASSET_ONLY=65`, `L4_PYTHON_REMAP=53`, `L4_TOOL_DB=1`, `L4_USER_M_PROCESS=1`, `NON_MAIN_CLASS=10`, and `UPSTREAM_DEMO=1`. The executed set now includes the deterministic `woodpecker` plus `qtdragon` / `qtdragon_hd` / `qtvcp_screens` `on_abort.ngc` family, `axis/gladevcp/probe.ngc`, `axis/rose_engine/rcone_demo.ngc`, `axis/vismach/melfa-sim/example.ngc`, and the `axis/vismach/puma` sample programs after vendoring the required machine INI, tool-table, and remap-subroutine inputs. When an upstream INI declares a missing local tool table but the native harness resolved a valid fallback table, the Node inventory stages that native-selected table at the INI-declared path so WASM execution uses the same machine context. The skip reasons are explicit: `NON_MAIN_CLASS`, `L4-TOOL-DB`, `L4-USER-M-PROCESS`, `L4-PYTHON-REMAP`, and `UPSTREAM-DEMO`; an eligible row that lacks vendored machine context is reported as an inventory failure. This runner is an inventory source-of-truth for Node WASM and is intentionally narrower than a browser full inventory. |
|
||||
| `tests/wasm/node/verify_nc_files_wasm.sh` | Validates representative vendored LinuxCNC `nc_files` examples in Node WASM by copying `3D_Chips.ngc`, `arcspiral.ngc`, `hole-circle.ngc`, `factorial.ngc`, and `m6demo.ngc` into the Emscripten filesystem and forwarding to the LinuxCNC-backed `Interp::open()`/`read()`/`execute()` path. `3D_Chips.ngc` is staged with a minimal INI-declared `tool.tbl` because the upstream program contains `T1 M6`; JavaScript only stages files and checks LinuxCNC output, including `run_step` status records, and does not implement G-code, O-word, tool-change, or M-code behavior. |
|
||||
| `tests/wasm/node/verify_tp_wasm.sh` | Validates a standalone trajectory-planner WASM module can be built from vendored LinuxCNC TP/TC/Ruckig support source, loaded in Node, and run the same linear, arc, and queued-line planner probe paths covered by the native TP harness. |
|
||||
| `tests/opfs/node/verify_file_service.sh` | Validates the host-owned OPFS text-file adapter, path model, session snapshot store including custom filenames and envelope/path rejection paths, machine file store, G-code text store including filename rejection paths, OPFS-to-WASM parameter/tool-table bridges, and grouped machine-session loading without moving file persistence, parameter semantics, or tool-table semantics into the WASM core. |
|
||||
| `tests/browser/verify_ini_panel_browser.sh` | Validates the INI SDK, INI/interpreter WASM module loading, LinuxCNC-backed INI machine-session file-name string lookup, OPFS text-file round trip, generic session snapshot round trip plus custom filename and envelope/path rejection paths, machine file text round trip, G-code text round trip plus filename rejection paths, and the INI panel UI's machine-session load with default OPFS parameter/tool-table file mapping, G-code run, `run_step`-backed progress/line/statement/axis display, canonical-event display paths, and 5-axis remap demo action in a real browser runtime. |
|
||||
| `tests/browser/verify_interp_browser.sh` | Validates the interpreter-core WASM module loads through the interpreter JS SDK in a real browser runtime and runs selected positive and negative canonical fixtures plus vendored upstream `tests/interp` regression files through vendored LinuxCNC `Interp::execute()` and `Interp::open()`/`read()`/`execute()` via the exported C ABI, including direct browser SDK and OPFS-backed parameter-file restore/save, non-random/random tool-table load/save through vendored LinuxCNC source, vendored `xyzac-trt`/`xyzbc-trt` switchkins remap demo execution, representative vendored `configs/sim` `foam`, `geometry`, `external_offsets`, and bridge-mill programs through `runSimConfigProgram()`, representative vendored `nc_files` examples through `runFile()` or `runFileWithIni()` when the upstream file requires INI/tool-table context, and a synthetic browser assertion that `planIniFileContextStaging()` can collect INI, program, tool-table, parameter, multi-directory subroutine, executable user-M, and remap-NGC files using only manifest text. |
|
||||
| `tests/host/verify_host_smokes.sh` | Runs the current host-side Node, WASM interpreter-core, WASM trajectory-planner, OPFS, and browser smoke validation with shared WASM builds. |
|
||||
| `tests/browser/verify_interp_browser.sh` | Validates the interpreter-core WASM module loads through the interpreter JS SDK in a real browser runtime and runs selected positive and negative canonical fixtures plus vendored upstream `tests/interp` regression files through vendored LinuxCNC `Interp::execute()` and `Interp::open()`/`read()`/`execute()` via the exported C ABI, including direct browser SDK and OPFS-backed parameter-file restore/save, non-random/random tool-table load/save through vendored LinuxCNC source, vendored `xyzac-trt`/`xyzbc-trt` table-rotary-tilting and `xyzab-tdr` table-dual-rotary switchkins remap demo execution, representative vendored `configs/sim` `foam`, `geometry`, `external_offsets`, `axis/gladevcp/probe.ngc`, deterministic `woodpecker/on_abort.ngc`, bridge-mill, `melfa-sim`, and `puma_cube.ngc` programs through `runSimConfigProgram()`, representative vendored `nc_files` examples through `runFile()` or `runFileWithIni()` when the upstream file requires INI/tool-table context, and a synthetic browser assertion that `planIniFileContextStaging()` can collect INI, program, tool-table, parameter, multi-directory subroutine, executable user-M, and remap-NGC files using only manifest text. |
|
||||
| `tests/host/verify_host_smokes.sh` | Runs the current host-side Node, WASM interpreter-core, sim-config representative smoke, sim-config Node inventory, WASM trajectory-planner, OPFS, and browser smoke validation with shared WASM builds. |
|
||||
|
||||
## Fixture Coverage
|
||||
|
||||
|
||||
Reference in New Issue
Block a user