Files
cnc_wams/wasm-port/docs/linuxcnc-test-porting-tracker.md

40 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.
Maintain sim-config coverage matrix Done docs/sim-configs-coverage-matrix.md now maps all current verify_sim_configs.sh records to program class, native result, current Layer 3/4 coverage, and blocked/class-coverage notes. The native harness emits class-summary.tsv and path-matrix.tsv, and the Node inventory runner checks generated/tracked path sets plus tracked class/native-status/expected-failure/blocked fields against native outputs before execution. Future changes should update the matrix only with a matching regenerated native inventory.
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 representative WASM, sim-config Node inventory, 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.
configs/sim/axis/gladevcp/probe.ngc Done Native, WASM Node, browser Vendored under wasm-port/vendor/linuxcnc/configs/sim/axis/gladevcp; validates plain INI/tool-table main-program staging through gladevcp_panel.ini without treating the GTK panel process as browser runtime.
configs/sim/axis/vismach/melfa-sim/example.ngc Done Native, WASM Node, browser Vendored under wasm-port/vendor/linuxcnc/configs/sim/axis/vismach/melfa-sim; validates a robot/Genser-style remap machine representative through real INI, tool table, and M428/M429/M430 remap subroutines while GUI/HAL process launch remains outside the standalone boundary.
configs/sim/axis/vismach/puma/puma_cube.ngc Done Native, WASM Node, browser Vendored under wasm-port/vendor/linuxcnc/configs/sim/axis/vismach/puma; validates a PUMA machine-context representative through real INI, tool table, and remap subroutine staging while external GUI/HAL process launch remains outside the standalone boundary.
configs/sim/woodpecker/on_abort.ngc Done Native, WASM Node, browser Vendored under wasm-port/vendor/linuxcnc/configs/sim/woodpecker; validates deterministic on_abort file execution through the real machine INI and tool table without expanding browser coverage to unrelated full-process UI flows.
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.
configs/sim/*/remap_subs/*.ngc browser main-program inventory Blocked These files are remap/subroutine assets, not standalone browser main-program targets. Keep validating them through native remap parse/execute paths and explicit five-axis/runtime probes instead of widening browser runSimConfigProgram() blindly.
configs/sim/axis/db_demo/base.ngc Layer 4 inventory Blocked [EMCIO]DB_PROGRAM = ./db_nonran.py requires LinuxCNC task/tooldata DB process startup, command/reply protocol, and database state behavior, not standalone interpreter file execution. Keep as L4-TOOL-DB until a LinuxCNC-owned tool database runtime boundary exists and proves lookup/update behavior across native and WASM. blocked-dependency-summary.tsv records taskclass.cc, tooldata_db.cc, tooldata_common.cc, and configs/sim/axis/db_demo/db.py as the owner set plus source-derived tool_db_protocol_evidence for the v2.1 handshake, g/FINI get-all, and l/u/p notification protocol.
configs/sim/axis/vismach/millturn/example.ngc Layer 4 inventory Blocked The remap execution chain calls external USER_M_PATH process codes M128 and M129, with HAL/HALUI/UI process declarations in millturn.ini. Keep as L4-USER-M-PROCESS; do not promote until the M128/M129 LinuxCNC-owned state boundary proves the kinstype guard and ini.[xyz].* HAL pin updates. blocked-dependency-summary.tsv records the mcodes/M128 and mcodes/M129 Tcl scripts plus source-derived user_m_process_effects for Tcl/HAL runtime use, kinstype guards, and ini.[xyz] HAL pin side effects.
configs/sim/gmoccapy/* Layer 4 full inventory Blocked Python remap runtime boundary is present in native LinuxCNC rs274, but not yet intentionally exposed for Node/browser full inventory. Keep native inventory coverage as source-of-truth; add one representative Node/browser class sample only after the Python remap boundary is deliberately designed. Python module and prolog/epilog ownership is inventoried in blocked-dependency-summary.tsv; LinuxCNC runtime ownership is recorded as python_runtime_evidence in the Python boundary/family summaries.
configs/sim/axis/laser/* Layer 4 full inventory Blocked Python remap runtime boundary is present in native LinuxCNC rs274, but not yet intentionally exposed for Node/browser full inventory. Keep native inventory coverage as source-of-truth; add one representative Node/browser class sample only after the Python remap boundary is deliberately designed. Python module and remap ownership is inventoried in blocked-dependency-summary.tsv; LinuxCNC runtime ownership is recorded as python_runtime_evidence in the Python boundary/family summaries.
configs/sim/axis/remap/*/nc_files/*.ngc Layer 4 full inventory Blocked Native LinuxCNC rs274 coverage exists, but these demo main programs depend on Python remaps, Python prolog/epilog callbacks, or Python-backed queue/tool-change handlers. Keep native inventory coverage as source-of-truth; do not reduce Python remap demos to missing vendored files or browser standalone execution until the Python remap boundary is deliberately designed. Dependency ownership is inventoried in blocked-dependency-summary.tsv; LinuxCNC runtime ownership is recorded as python_runtime_evidence in the Python boundary/family summaries.
configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos/* Layer 4 full inventory Blocked Native LinuxCNC rs274 coverage exists, but the demo family depends on Python remap entry points such as g682, g69_core, and g53x_core that are not yet intentionally exposed for Node/browser inventory. Keep native inventory coverage as source-of-truth; revisit Layer 4 only after the Python remap boundary is deliberately designed rather than faked in JS. Python and NGC remap dependencies are inventoried in blocked-dependency-summary.tsv; LinuxCNC runtime ownership is recorded as python_runtime_evidence in the Python boundary/family summaries.
configs/sim/axis/vismach/VMC_toolchange/toolchange.ngc Layer 4 full inventory Blocked Native LinuxCNC rs274 coverage exists, but the program is the remapped tool-change body for a Python prolog/epilog and full tool-change/HAL process flow. Keep native inventory coverage as source-of-truth and validate tool-change mechanics through existing standalone interpreter/tooldata probes until task/HAL/tool-change runtime boundaries exist.
configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos/incremental_repetition_g533.ngc Blocked Preserved upstream demo edge: line uses bare X/Y/Z after G53.6 without an explicit motion G-code in the upstream standalone baseline. Keep as expected failure in Layer 2 and do not modify G-code or project-owned interpreter semantics to force a pass.

Next Work Batch

  1. Continue inventorying linuxcnc/tests/interp/* for additional pure interpreter cases that can run through vendored file execution without full task/HAL/motion process state.
  2. Keep adding skipped upstream families to the blocked-test table with a concrete dependency reason before attempting implementation.
  3. Run wasm-port/tests/browser/verify_interp_browser.sh and then wasm-port/tests/host/verify_host_smokes.sh after each stable batch.