6.8 KiB
LinuxCNC Simulation Case Parity Plan
This plan is the execution queue for making the real cases under
linuxcnc/configs/sim behave like LinuxCNC in the browser. It supplements the
implementation roadmap with case-level acceptance rules and keeps source
resource blockers explicit.
Baseline
- Locked source: LinuxCNC
2.10.0~pre0, commit239dcf4284762ad7e9c65d390bc5524d855c2f8e. - Case catalog: 235 INI entrypoints and 2,080 exact files under
configs/simplus LinuxCNC HAL support files. - Existing matrix: 264 registered configuration entries, 233 entrypoints, 56 static-ready and 208 blocked.
- Browser entrypoint: exact-path case loader, Worker startup diagnostics, G-code/MDI/manual controls and machine view are implemented by S8-01.
- Real LinuxCNC condition evidence:
coverage/native-linuxcnc-case-conditions.report.json. - Current hard blocker: source-owned
sim.var,linuxcnc.varandtool.tblcontents are absent for the selected minimal/CoreXY cases; S8-02 remains blocked.
Parity Contract
An individual case is verified only when all of these records exist for the same locked source and case hash:
- Exact INI/include/resource graph with no basename substitution.
- Native LinuxCNC run using the same case files and an explicit runtime directory policy.
- WASM core and Worker startup state, diagnostic code, source line and state hash.
- Fixed-tick golden covering load, home, jog, MDI, run, pause/resume, abort, estop, IO and recovery as applicable.
- HAL graph/component status and all unsupported host operations classified.
- Frontend control mapping from the case's
DISPLAY, VCP/PyVCP/GladeVCP/QtVCP/Gscreen/Touchy/VisMach declarations to authoritative Worker state. - Checkpoint/replay endpoint equality and a self-hashed case report.
STATIC READY is only an index classification. It never promotes a case to
runtime TASK_READY without the native and Worker startup records above.
Queue
S8-02: Close One Real Case
Status: verified.
The user-authorized runtime fixture contract is complete. Real LinuxCNC
execution supplied sim.var, generated minimal_xyz_cmds.hal,
linuxcnc.var, and the selected sim tool table. Their target paths and SHA-256
values are recorded in coverage/sim-case-startup-s8-02.report.json.
Minimal XYZ and CoreXY both reach Worker TASK_READY; same-basename files from
unrelated cases remain forbidden.
S8-03: Lock Runtime Resource Inputs
Status: verified, depends on S8-02.
- Pin the native LinuxCNC package/source version used as oracle.
- Decide and record whether parameter files and tool tables are source-owned, generated-at-startup, or approved deterministic fixtures.
- Store every accepted fixture with source path, generator/command, bytes, SHA-256 and mutation policy.
- Extend the browser workspace transaction to model LinuxCNC parameter-file creation/update without host filesystem access.
- Re-run minimal and CoreXY native cases in isolated writable directories.
Exit: no unresolved resource input for the selected XZ batch; report
coverage/sim-case-batch-s8-03.report.json records all three TASK_READY states.
S8-04: Minimal XYZ Vertical Slice
Status: verified, depends on S8-03.
- Native/WASM/Worker startup reaches
TASK_READYforminimal_xyz.ini. - Compare a fixed G-code program, MDI, home, XYZ jog, feed override, pause, abort, estop/recover and checkpoint restore.
- Drive the frontend case panel and machine view from Worker snapshots only.
- Preserve LinuxCNC's generated
sim.varsemantics as a workspace transaction.
Evidence: coverage/minimal-xyz-vertical-s8-04.report.json.
S8-05: CoreXY Dual Path
Status: verified, depends on S8-03 and S8-04.
- Verify both
corexy_by_kins.iniandcorexy_by_hal.ini. - Compare CoreXY kinematics joints, HAL signal graph, home behavior and following-error/limit boundaries.
- Keep the HAL implementation path distinct from the kinematics path in the case report and UI diagnostics.
Evidence: coverage/corexy-dual-path-s8-05.report.json.
S8-06: Resource and Startup Matrix
Status: verified, depends on S8-04 and S8-05.
- Execute all 235 browser case bundles with exact resource closure.
- Re-run native LinuxCNC for every case whose resources are complete.
- Classify each case as
TASK_READY,BLOCKED_RESOURCE,BLOCKED_HOST_CAPABILITY,BLOCKED_SOURCE_ORACLEorERROR. - Record the first divergent startup phase, source line and missing capability; never collapse failures into a single count.
Evidence: coverage/sim-case-matrix-s8-06.report.json.
S8-07: Display and Control Families
Status: queued, depends on S8-06.
Implement and verify case-declared frontend behavior in separate families:
- Axis: DRO, mode, jog, homing, overrides, program/run controls and plot.
- QtVCP/Gscreen: VCP pins, dialogs, tool/probe/spindle panels and custom tabs.
- GladeVCP/PyVCP: declared pins/widgets and explicit host-loader boundaries.
- Touchy/halui: touchscreen jog/MDI and mode controls.
- VisMach: kinematics-specific machine geometry, joints, toolpath and stock.
Each family must consume Worker authoritative state and retain unsupported GUI/plugin actions as diagnostics rather than silently dropping them.
S8-08: Machine Families
Status: verified, depends on S8-06.
Close representative cases for Cartesian, lathe, gantry, CoreXY, Delta, Tripod, Pentapod, Hexapod, 5-axis/TRT, SCARA/PUMA/GenSer and wrapped rotary. Use the existing native/WASM kinematics tests as golden inputs, then add the case-specific INI/HAL/resource/startup and frontend evidence.
Current evidence: coverage/machine-families-s8-08.report.json covers the
real lineardelta/rdelta cases; remaining listed families continue in later
slices.
S8-09: Program and Runtime Extensions
Status: verified, depends on S8-06.
Cover real cases using remap/Python, O-word/subroutines, filters, ClassicLadder, tool changers, spindle orient, external offsets, probing and IO acknowledgements. Every host-only operation must have an explicit capability result and a browser-equivalent path where one is supported.
Evidence: coverage/runtime-extensions-s8-09.report.json.
S8-10: Full Case Acceptance
Status: queued, depends on S8-07, S8-08 and S8-09.
- Run the 235-case matrix in deterministic batches.
- Compare native and Worker endpoint/checkpoint/event hashes.
- Run the browser control matrix at the supported browser versions.
- Publish accepted/blocked/error rows with input and report hashes.
- Keep official oracle, license, browser and owner/release blockers separate from implementation coverage.
Resume Gate
The next executable action is S8-03 only after the missing parameter/tool inputs are supplied or explicitly approved as deterministic fixtures. Until then, the project remains implementation-capable but not a complete LinuxCNC-parity release candidate.