33 KiB
LinuxCNC Test Porting Tracker
Purpose
This file tracks the continuing work to validate this simulation port against LinuxCNC behavior by using LinuxCNC's own source files and test assets.
Hard rule: CNC semantics must come directly from LinuxCNC source. Project-owned code may provide build logic, runtime shims, filesystem adapters, C ABI, SDK, browser UI, and test runners, but must not reimplement interpreter, remap, tool, parameter, kinematics, planner, or machine-control behavior.
Fixed Validation Gates
Run these checks as the baseline for every substantial porting step:
wasm-port/tools/verify_upstream_baseline.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tests/native/verify_native_probes.sh
wasm-port/tests/native/verify_nc_files.sh
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_nc_files_wasm.sh
wasm-port/tests/wasm/node/verify_tp_wasm.sh
wasm-port/tests/opfs/node/verify_file_service.sh
wasm-port/tests/browser/verify_ini_panel_browser.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
Status Legend
| Status | Meaning |
|---|---|
| Done | Native, WASM, browser, docs, and source-sync validation are complete for the current scope. |
| In progress | Test assets or runners are present, but coverage still needs extension or verification. |
| Planned | The item is selected for future work. |
| Blocked | The item needs missing LinuxCNC source, runtime boundary work, or upstream baseline clarification. |
Continuing Steps
| Step | Status | Tracking notes |
|---|---|---|
| Lock LinuxCNC upstream baseline | Done | Baseline commit is recorded in wasm-port/tools/upstream-baseline.txt; keep docs/scope-and-baseline.md synchronized when it changes. |
| Verify vendored source byte identity | Done | tools/verify_vendor_sync.sh must pass for every file in tools/source-manifest.txt. |
| Reject standalone CNC semantics | Done | tools/verify_no_standalone_cnc_semantics.sh guards project-owned Interp::... definitions outside documented runtime-edge stubs. |
| Maintain source reuse map | Done | Current sim-config, remap, interpreter, kinematics, TP, user-M, tool, named-parameter, and OPFS runtime boundaries are recorded in docs/source-reuse-map.md; keep updating it whenever LinuxCNC source, test assets, or runtime boundaries are added. |
| Maintain compatibility validation notes | Done | Current native, Node WASM, browser, OPFS, and host aggregate checks are recorded in docs/compatibility-validation.md; keep updating it whenever a validation command or fixture class is added. |
| Document validation layers | Done | docs/compatibility-validation.md now records Layer 1 nc_files basic smoke, Layer 2 configs/sim native strict harness, Layer 3 standalone native runtime probes, and Layer 4 WASM Node/browser representative smokes with entry commands, current results, expected boundaries, and the no-LinuxCNC-semantics rule. |
| Build LinuxCNC test inventory | In progress | linuxcnc/tests/remap has been inventoried by dependency class; the first broader linuxcnc/tests pass now records full-process, HAL/realtime, linuxcncrsh, Python-binding, and external-component families in the blocked table. |
| Prefer pure interpreter tests first | In progress | Continue with tests that can run through Interp::open(), read(), and execute() without realtime hardware or GUI. |
| Add upstream-output comparison | In progress | Use upstream ../linuxcnc/bin/rs274 or original test.sh output where practical, then compare against native/WASM/browser output. |
| Promote tests through three layers | In progress | Add each selected test first to native harnesses, then WASM Node, then browser smoke where meaningful. |
| Record blocked tests | In progress | First broader family-level blocked batch is recorded below; continue expanding it as each linuxcnc/tests family is inspected. |
| Add aggregate smoke coverage | Done | tests/host/verify_host_smokes.sh now runs stable Node WASM, sim-config WASM, nc_files WASM, OPFS, and browser smoke checks with shared builds. Current run passed with host_wasm_opfs_browser_smokes=ok. |
Add linuxcnc/nc_files basic examples |
Done | tests/native/verify_nc_files.sh now runs the basic/example subset of upstream linuxcnc/nc_files through LinuxCNC bin/rs274; current native baseline is 107 total, 101 pass, 6 expected context/entry-point edges, 0 unexpected failures. Exploratory --all inventory is 247 total, 219 pass, 28 expected context/entry-point edges, 0 unexpected failures. A representative vendored subset now passes Node WASM and browser execution through LinuxCNC-backed Interp::open()/read()/execute(), with 3D_Chips.ngc using an INI-declared tool-table context for its upstream T1 M6 line. |
Current Review Boundaries
Use these batches when reviewing or splitting the current uncommitted work.
| Batch | Scope | Files |
|---|---|---|
| A | run_step status output and UI/Node/browser assertions. |
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_minimal_harness.cpp, wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_minimal_runtime.cpp, wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_wasm.cpp, wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_runtime_state.hh, wasm-port/tests/wasm/node/verify_interp_wasm.mjs, wasm-port/tests/browser/interp_smoke.html, wasm-port/tests/fixtures/canon/arc_semantics.events. |
| B | nc_files representative smoke and 3D_Chips.ngc tool-table context. |
wasm-port/tests/native/verify_native_probes.sh, wasm-port/tests/wasm/node/verify_interp_wasm.mjs, wasm-port/tests/browser/interp_smoke.html, wasm-port/tools/source-manifest.txt, vendored wasm-port/vendor/linuxcnc/nc_files/3D_Chips.ngc, arcspiral.ngc, factorial.ngc, hole-circle.ngc, and m6demo.ngc. |
| C | Selected upstream tests/interp/* and tests/ccomp/* fixture intake. |
wasm-port/tests/native/verify_native_probes.sh, wasm-port/tests/wasm/node/verify_interp_wasm.mjs, wasm-port/tests/browser/interp_smoke.html, wasm-port/tools/extract_sources.sh, wasm-port/tools/source-manifest.txt, vendored wasm-port/vendor/linuxcnc/tests/interp/..., and vendored wasm-port/vendor/linuxcnc/tests/ccomp/... files listed in tools/source-manifest.txt. |
| D | Interpreter regression coverage for G92 parameter persistence, tool tables, G10/G52/G71/G72/G76, rotation, INI parameters, M19, M98/M99, subroutine lookup, sequence numbers, nested-sub errors, and ABORT hot comments. | wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_minimal_harness.cpp, wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_minimal_runtime.cpp, wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_interp_wasm.cpp, wasm-port/tests/native/verify_native_probes.sh, wasm-port/tests/wasm/node/verify_interp_wasm.mjs, wasm-port/tests/browser/interp_smoke.html, and the corresponding vendored upstream fixture files under wasm-port/vendor/linuxcnc/tests/interp/. |
| E | Generic INI-context staging helper and Node/browser synthetic coverage. | wasm-port/runtime/sdk/src/sim-config-staging.js, wasm-port/runtime/sdk/src/index.js, wasm-port/runtime/sdk/README.md, wasm-port/tests/wasm/node/verify_sim_configs_wasm.mjs, wasm-port/tests/browser/interp_smoke.html. |
| F | Validation docs, source reuse map, tracker updates, native probe build/source-sync glue. | wasm-port/docs/compatibility-validation.md, wasm-port/docs/drift-report.md, wasm-port/docs/linuxcnc-test-porting-tracker.md, wasm-port/docs/source-reuse-map.md, wasm-port/tools/build_native_probes.sh, wasm-port/tools/extract_sources.sh, wasm-port/tools/source-manifest.txt, wasm-port/tools/verify_vendor_sync.sh. |
Vendored files in the current workset must stay byte-identical to upstream and
covered by both wasm-port/tools/source-manifest.txt and
wasm-port/tools/verify_vendor_sync.sh. The current untracked vendor groups
are wasm-port/vendor/linuxcnc/tests/ccomp/, selected
wasm-port/vendor/linuxcnc/tests/interp/bad/*.ngc, and selected upstream
directories under wasm-port/vendor/linuxcnc/tests/interp/ including
cam-nisley, crazy-paths, g10, g52, g71-*, g72-*, g76, good,
inside-corners, inverse-time-with-comp, and selected m98m99 cases.
LinuxCNC Test Asset Queue
| LinuxCNC test path | Status | Current target | Notes |
|---|---|---|---|
nc_files basic/example programs |
Done | Native, WASM Node, browser | Native coverage is tracked by wasm-port/tests/native/verify_nc_files.sh; complete programs execute strictly, macro/library files are wrapped with temporary M2 for load/parse validation, and six known LinuxCNC-native context edges are classified explicitly. --all also inventories probe/plasmac/NURBS files and currently classifies all 28 non-passing files as expected runtime-context or entry-point edges. The representative vendored WASM/browser subset covers 3D_Chips.ngc, arcspiral.ngc, hole-circle.ngc, factorial.ngc, and m6demo.ngc through LinuxCNC-backed file execution, with 3D_Chips.ngc staged through runFileWithIni() and an INI-declared tool.tbl instead of being judged without its required tool context. |
tests/remap/duplicate-o-word |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/remap/duplicate-o-word; validates duplicate O-word behavior through vendored LinuxCNC remap/O-word/file execution paths. |
tests/remap/fail/args.0 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/remap/fail/args.0; validates required P/Q remap arguments when both are present through vendored LinuxCNC remap argument handling. |
tests/remap/fail/args.1 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/remap/fail/args.1; validates LinuxCNC missing-Q remap error text and upstream-style continue-after-error flow. |
tests/remap/fail/args.2 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/remap/fail/args.2; validates LinuxCNC missing-P,Q remap error text and upstream-style continue-after-error flow. |
tests/remap/fail/body-ngc |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/remap/fail/body-ngc; validates LinuxCNC NGC remap body failure text and remap level restoration after continue-on-error execution. |
tests/remap/m30-interaction |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/remap/m30-interaction; validates LinuxCNC remap/M30 interaction through vendored interpreter paths. |
tests/remap/nested-remaps-oword |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/remap/nested-remaps-oword; validates nested NGC remaps through vendored LinuxCNC O-word dispatch. |
tests/remap/posargs.0 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/remap/posargs.0; validates LinuxCNC positional remap arguments and OWORD_NARGS through vendored interpreter paths. |
tests/remap/sequencing |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/remap/sequencing; validates LinuxCNC G/M remap execution ordering through vendored interpreter paths. |
tests/remap/remap-io NGC-only branch |
Done | Native, WASM Node, browser | Vendored test-ngc.ini plus io_*.ngc subroutines validate LinuxCNC NGC remaps for M62-M68 and M66 immediate input through vendored Interp::parse_remap() and Interp::execute(); the standalone boundary only stages inputs and captures canonical events. |
tests/interp/do-while-break |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/do-while-break; validates LinuxCNC O-word do/while/break flow through vendored Interp::open(), read(), and execute() paths. |
tests/interp/oword-bug315 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/oword-bug315; validates LinuxCNC O-word break-out-of-subroutine behavior through vendored file execution paths. |
tests/interp/oword-bug315-p2 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/oword-bug315-p2; validates LinuxCNC dynamic O-word subroutine call selection through vendored file execution paths. |
tests/interp/exists |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/exists; validates LinuxCNC EXISTS[] parameter handling through vendored file execution paths. |
tests/interp/return-value |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/return-value; validates LinuxCNC O-word return-value and #<_value> behavior through vendored file execution paths. |
tests/interp/subs-follow-main |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/subs-follow-main; validates LinuxCNC subroutines after main program text through vendored file execution paths. |
tests/interp/fractional-linenumbers |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/fractional-linenumbers; validates LinuxCNC fractional line-number parsing through vendored file execution paths. |
tests/interp/cam-nisley |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/cam-nisley; validates the upstream storm-door latch cam toolpath through Interp::open(), read(), and execute() with upstream test.tbl staged through an INI-declared tool table. Native, WASM Node, and browser checks also assert that bare execution without that tool-table context fails at the upstream T1 M6 lookup. |
tests/interp/namedparam-bug424 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/namedparam-bug424; validates LinuxCNC named-parameter parsing regression behavior through vendored file execution paths. |
tests/interp/flowsnake |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/flowsnake; validates LinuxCNC recursive O-word subroutine execution, expression evaluation, and comment argument handling through a pure file-execution fractal toolpath. |
tests/interp/inside-corners |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/inside-corners; validates LinuxCNC cutter-compensation geometry through concave corners, convex corners, and tangencies across XY and ZX plane file execution. |
tests/interp/inverse-time-with-comp |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/inverse-time-with-comp; validates LinuxCNC inverse-time feed (G93), units-per-minute feed (G94), and cutter compensation interaction across uncompensated, right-compensated, and left-compensated subprogram calls. |
tests/ccomp selected standalone cases |
Done | Native, WASM Node, browser | Vendored lathe-comp, mill-g90g91g92, mill-line-arc-entry, and mill-zchanges under wasm-port/vendor/linuxcnc/tests/ccomp; validates standalone LinuxCNC cutter-compensation file execution with upstream tool tables staged through LinuxCNC tooldata_load() and Interp::load_tool_table(), with the standalone minimal interpreter startup now aligned to LinuxCNC's default incremental IJK mode (G91.1). |
tests/interp/bad selected file errors |
Done | Native, WASM Node, browser | Vendored selected upstream files under wasm-port/vendor/linuxcnc/tests/interp/bad; validates LinuxCNC file-execution error text for canned-cycle A-axis rejection, center-format arc radius mismatch rejection, cutter-compensation arc-exit/gouging rejection, malformed EXISTS[] parameter expressions, nested subroutine definitions, zero-feed G1, missing arc center/radius words, and probe motion without axes. |
tests/interp/good selected arc tolerance cases |
Done | Native, WASM Node, browser | Vendored selected upstream files under wasm-port/vendor/linuxcnc/tests/interp/good; validates LinuxCNC center-format arc tolerance acceptance across small/medium/big inch and metric cases through ARC_FEED canonical output and successful program end. |
tests/interp/g6164 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/g6164; validates LinuxCNC G61/G64 path-control and naive-cam tolerance canonical output through vendored file execution paths. |
tests/interp/g72-facing and tests/interp/g72-missing-iteration |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/g72-facing and wasm-port/vendor/linuxcnc/tests/interp/g72-missing-iteration; validates LinuxCNC G72 lathe facing canned-cycle iteration behavior through vendored file execution paths, canonical STRAIGHT_FEED endpoints, and successful program end without timeout. |
tests/interp/g71-* selected lathe canned-cycle cases |
Done | Native, WASM Node, browser | Vendored g71-endless-loop, g71-endless-loop2, g71-endless-loop_2, and g71-with-g70; validates LinuxCNC G71 roughing and G70 finishing canned-cycle regressions through vendored file execution paths, canonical feed/arc endpoints, and successful program end without timeout. |
tests/interp/g76 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/g76; validates LinuxCNC G76 lathe threading with upstream test.tbl staged through an INI-declared tool table, covering tool change, spindle start, speed-feed sync, threading feed events, and successful program end. |
tests/interp/g33.1 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/g33.1; validates LinuxCNC rigid-tap G33.1 file execution, spindle start, feed synchronization, and RIGID_TAP canonical output through vendored interpreter paths. |
tests/interp/g10 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/g10; validates LinuxCNC G10 L1/L10/L11/L2/L20, tool-table updates, tool-length offset application timing, active G5X offset changes, G92 interaction, and XY-rotation behavior through vendored file execution paths with upstream test.tbl files staged through LinuxCNC tool-table loading. |
tests/interp/g52/g52-g92-interaction plus G92 startup persistence |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/g52/g52-g92-interaction; validates LinuxCNC G52/G92 shared offset parameter behavior, G92.1/G92.2/G92.3 transitions, and SET_G92_OFFSET canonical output through vendored file execution paths. Native, WASM Node, and browser validation also stage a [RS274NGC]PARAMETER_FILE and exercise vendored ini_load()/Interp::init()/restore_parameters() startup behavior, including DISABLE_G92_PERSISTENCE clearing parameters 5210-5219. |
tests/interp/rotation selected pure interpreter cases |
Done | Native, WASM Node, browser | Vendored selected upstream cases under wasm-port/vendor/linuxcnc/tests/interp/rotation; validates LinuxCNC machine-coordinate G53 absolute-position named parameters #<_abs_x>, #<_abs_y>, and #<_abs_z> across G54 offsets, G92 offsets, XY rotation, and inch/millimeter modes, plus rotated-coordinate G28 and G53 endpoint behavior through vendored file execution paths. |
tests/interp/iniparam |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/iniparam; validates LinuxCNC _ini[...] lookup, missing INI-parameter error text, and continued file execution through vendored file execution paths and INI_FILE_NAME. |
tests/interp/iniparam-failassign |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/iniparam-failassign; validates LinuxCNC _ini[...] read-only named-parameter assignment rejection through vendored file execution paths and INI_FILE_NAME. |
tests/interp/m19 |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/m19; validates LinuxCNC M19 spindle orient canonical events, wait timeout, and [RS274NGC]ORIENT_OFFSET handling through vendored file execution paths. |
tests/interp/magic_comments/param_format_printing |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/magic_comments/param_format_printing; validates LinuxCNC (DEBUG,...) magic-comment parameter formatting for integer, default float, and explicit precision formats through vendored file execution paths. |
tests/interp/m98m99 selected pure interpreter cases |
Done | Native, WASM Node, browser | Vendored selected upstream cases under wasm-port/vendor/linuxcnc/tests/interp/m98m99; validates LinuxCNC Fanuc-style M98/M99, missing-P-word, missing-subprogram, mixed Fanuc/RS274NGC sub-style, DISABLE_FANUC_STYLE_SUB INI-gated errors, main-program O-word termination rules, parameter scope, loop counts including L0, nested numbered subprograms, subprograms after main program text, leading-zero O-word lookup, named and numbered main programs, and expression-based O-sub/M98 calls through vendored file execution paths. |
tests/interp/sub-call-from-sub |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/sub-call-from-sub; validates LinuxCNC external subroutine calls from another external subroutine through vendored file execution paths and LinuxCNC INI SUBROUTINE_PATH. |
tests/interp/sequence-number |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/sequence-number; validates LinuxCNC #<_line> reporting in main files and external subroutines through vendored file execution paths and LinuxCNC INI SUBROUTINE_PATH. |
tests/interp/nested-sub-error |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/nested-sub-error; validates LinuxCNC nested-subroutine-definition rejection through vendored file execution paths and LinuxCNC INI SUBROUTINE_PATH. |
tests/interp/nested-sub-in-file-error |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/nested-sub-in-file-error; validates LinuxCNC rejection of forward seek to a later numbered subroutine in the same external subroutine file through vendored file execution paths and LinuxCNC INI SUBROUTINE_PATH. |
tests/interp/oword-unwind |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/oword-unwind; validates LinuxCNC O-word stack unwind after a subroutine error through upstream-style continue-on-error file execution and LinuxCNC INI SUBROUTINE_PATH. |
tests/interp/abort-hot-comment |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/tests/interp/abort-hot-comment; validates LinuxCNC (ABORT,...) hot-comment parameter expansion for numbered, named, and INI named parameters through vendored file execution paths and INI_FILE_NAME. |
tests/interp/compile |
Done | Native source probe | Upstream linuxcnc/tests/interp/compile is a C++ compile/source test (use-rs274.cc), not a runtime .ngc interpreter fixture. The current port covers this class through the native linuxcnc_rs274_compile_probe object build in wasm-port/tools/build_native_probes.sh; do not add it to file-execution intake unless an upstream runtime fixture appears. |
configs/sim/axis/foam/foam.ngc |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/configs/sim/axis/foam; validates LinuxCNC INI-driven U/V axis mask handling through axis_foam.ini and vendored file execution paths. |
configs/sim/axis/geometry/xyzc.ngc |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/configs/sim/axis/geometry; validates LinuxCNC USER_M_PATH registration with the real executable M110 while process execution remains a deterministic standalone USER_M_COMMAND boundary. |
configs/sim/axis/external_offsets/*.ngc M111 demos |
Done | Native, WASM Node, browser | Vendored under wasm-port/vendor/linuxcnc/configs/sim/axis/external_offsets; validates dyn_demo.ngc, eoffsets.ngc, jwp_z.ngc, and opa_demo.ngc with their corresponding INI files, real executable M111, shared eoffset.tbl, and opa_demo.ngc's circles.ngc subroutine while process execution remains a deterministic standalone boundary. |
More tests/remap/* interpreter-only cases |
Planned | Native first | Select cases that do not require Python behavior beyond documented runtime-edge stubs unless the required LinuxCNC source path is ported. |
More tests/interp/* interpreter-only cases |
Planned | Native first | Select upstream interpreter cases that can run through vendored file execution without Python, HAL, realtime motion, or GUI. |
tests/rs274ngc/* candidates |
Planned | Native first | Use upstream rs274 as the baseline where output is comparable. |
| Tool-table regression assets | Planned | Native and WASM Node | Must call vendored tooldata_common.cc; project code may only provide storage callbacks and filesystem boundaries. |
| Kinematics tests | Planned | Native probes first | Add runtime probes only around LinuxCNC kinematics entry points; HAL lifecycle remains a shim boundary. |
| Trajectory-planner tests | Planned | Native then WASM Node | Must call vendored LinuxCNC TP APIs; project code may only seed deterministic status/config state. |
Per-Test Intake Checklist
Use this checklist when adding each LinuxCNC upstream test:
- Record the upstream test path.
- Copy or extract the original LinuxCNC files into
wasm-port/vendor/linuxcnc/. - Add the copied files to the relevant manifest or vendor-sync rule.
- Keep
.ini,.ngc,expected, and original support files unchanged. - Identify the LinuxCNC source files that own the behavior being tested.
- Add native runner coverage that calls vendored LinuxCNC code.
- Add WASM Node coverage through the exported C ABI and SDK filesystem bridge.
- Add browser coverage if the behavior crosses SDK, OPFS, or UI boundaries.
- Compare against upstream LinuxCNC output where practical.
- Update
docs/source-reuse-map.md. - Update
docs/compatibility-validation.md. - Add any blocked dependency to the blocked-test table below.
Blocked Test Table
| LinuxCNC test path | Status | Blocking dependency | Next action |
|---|---|---|---|
tests/remap/introspect |
Blocked | Python remap modules and Python interpreter introspection. | Port or expose the required LinuxCNC Python remap runtime boundary before executing. |
tests/remap/fail/body-py |
Blocked | Python remap body error path. | Port the LinuxCNC Python remap body boundary before executing. |
tests/remap/fail/canon_error |
Blocked | Python prolog plus emccanon.CANON_ERROR. |
Port LinuxCNC Python prolog and canonical-error boundary before executing. |
tests/remap/fail/epilog |
Blocked | Python epilog failure path. | Port LinuxCNC Python epilog boundary before executing. |
tests/remap/fail/prolog |
Blocked | Python prolog failure path. | Port LinuxCNC Python prolog boundary before executing. |
tests/remap/oword-pycall |
Blocked | Python O-word callable modules plus tool-change path. | Port the LinuxCNC Python O-word call boundary and required tool-change runtime edges. |
tests/remap/predefined-named-params |
Blocked | Python predefined named parameters. | Port the LinuxCNC Python named-parameter registration boundary. |
tests/remap/remap-io full process/UI branch |
Blocked | Full LinuxCNC process, HAL pins, motion I/O status propagation, and Python UI/test driver. | Keep the full process test upstream-only until those runtime boundaries exist; the NGC-only test-ngc.ini subpath is covered separately above. |
tests/remap/remap-reentry |
Blocked | Python generator remaps, HAL/motion runtime, and remap reentry. | Port LinuxCNC Python generator remap boundary and motion/HAL synchronization first. |
tests/remap/spindle |
Blocked | Python remap body and spindle runtime state. | Port the LinuxCNC Python remap boundary and spindle status adapter. |
tests/remap/variable-injection |
Blocked | Python prolog/epilog variable injection. | Port LinuxCNC Python prolog/epilog boundary before executing. |
tests/abort/* |
Blocked | Full LinuxCNC task/motion process, abort/stop handling, HAL files, and machine state after interruption. | Keep as upstream process reference until task/motion abort boundaries are available; do not reduce to standalone interpreter execution. |
tests/ccomp/early-exit |
Blocked | Full LinuxCNC process and motion-position validation after cutter-compensation early exit. | Use interpreter-only tests/ccomp/* cases first; revisit after motion state comparison is available. |
tests/classicladder/estop |
Blocked | ClassicLadder component, full LinuxCNC process, HAL files, and UI driver. | Keep as upstream-only reference until ClassicLadder/HAL process boundaries are represented. |
tests/halui/* |
Blocked | Full LinuxCNC process with halui, postgui HAL files, and UI/test driver interaction. |
Establish HALUI/task runtime boundaries before porting. |
tests/hard-limits |
Blocked | Full LinuxCNC machine process, HAL limit wiring, and motion limit behavior. | Keep as upstream process reference until motion/HAL limit boundaries exist. |
tests/inifile/python_bindings |
Blocked | LinuxCNC Python INI bindings, not just vendored C++ inifile.cc. |
Add only after a Python binding boundary is intentionally exposed, or keep covered by upstream. |
tests/io-startup/* |
Blocked | Full LinuxCNC io startup, task process, HAL files, and postgui setup. |
Revisit after IO/task startup runtime boundaries are represented. |
tests/linuxcncrsh |
Blocked | Full LinuxCNC process plus linuxcncrsh socket protocol server. |
Keep as upstream integration reference until linuxcncrsh/server boundaries are intentionally ported. |
tests/linuxcncrsh-tcp |
Blocked | Full LinuxCNC process plus TCP socket service and network timing. | Keep as upstream integration reference until linuxcncrsh/server boundaries are intentionally ported. |
tests/mdi-queue/* |
Blocked | Full LinuxCNC task/MDI queue behavior through linuxcncrsh, tool changes, and queued command synchronization. | Port only after task queue and linuxcncrsh boundaries are available. |
tests/motion/* |
Blocked | Full LinuxCNC sim process, HAL pins, linuxcncrsh, halsampler, and realtime motion behavior. | Keep as upstream motion integration reference; prefer standalone TP/kinematics probes for now. |
tests/motion-logger/* |
Blocked | Full LinuxCNC process plus motion-logger userspace program and mock-motion HAL setup. | Revisit after motion logging/runtime process boundaries are represented. |
tests/halcompile/* |
Blocked | LinuxCNC HAL component build/install flow, often including userspace or realtime component loading. | Keep as build-system/HAL integration reference; do not treat as interpreter semantics. |
tests/module-loading/* |
Blocked | HAL realtime module loading and RTAPI lifecycle through halrun/loadrt. |
Covered only by narrow source/native probes today; full HAL module loading remains out of scope. |
tests/mb2hal/* |
Blocked | External mb2hal userspace component, Modbus I/O behavior, and HAL process wiring. |
Keep as external-component integration reference until a host I/O boundary exists. |
tests/t0/* |
Blocked | Full LinuxCNC process, linuxcncrsh display, tool table startup, random/nonrandom toolchanger behavior, and HAL files. | Continue validating tool tables through vendored tooldata_common.cc; revisit full T0 startup through task/IO boundaries later. |
tests/tool-info/* |
Blocked | Full LinuxCNC task/IO startup with HALUI, startup tool state, and random/nonrandom toolchanger process behavior. | Keep tool parsing/formatting in standalone probes; revisit process startup behavior later. |
tests/toolchanger/* |
Blocked | Full LinuxCNC tool-change process, MDI/task behavior, IO state, and subroutine/user-M paths. | Continue standalone interpreter/tooldata coverage first; revisit after task/IO tool-change boundaries exist. |
tests/trajectory-planner/circular-arcs |
Blocked | Full LinuxCNC sim configs with task, HAL/Tcl files, GUI/display settings, and motion execution logs. | Keep using standalone TP API probes for planner code; full circular-arc machine tests require task/HAL/motion boundaries. |
tests/lowlevel/emcmot-error-mpsc |
Blocked | RIP-only build against LinuxCNC motion sources and low-level motion error driver. | Revisit only if low-level motion process test drivers are intentionally ported. |
tests/uspace/spawnv-root |
Blocked | Sudo-installed userspace HAL component and spawnv root behavior. |
Keep upstream-only unless HAL component install/runtime support is added. |
Next Work Batch
- Continue inventorying
linuxcnc/tests/interp/*for additional pure interpreter cases that can run through vendored file execution without full task/HAL/motion process state. - Keep adding skipped upstream families to the blocked-test table with a concrete dependency reason before attempting implementation.
- Run
wasm-port/tests/browser/verify_interp_browser.shand thenwasm-port/tests/host/verify_host_smokes.shafter each stable batch.