@@ -24,22 +24,26 @@ CNC 语义必须来自 LinuxCNC source/WASM/source-derived boundary;
| 右侧模式按钮栏 | `app/src/ui/gmoccapy-status-sidebar.ts` | gmoccapy screenshot | UI action dispatch | browser button/action smoke |
| 底部运行控制 | `app/src/ui/gmoccapy-bottom-controls.ts` | gmoccapy/AXIS run controls | UI action dispatch | playback smoke |
| G-code 当前行 | `app/src/ui/gmoccapy-gcode-panel.ts` | AXIS/gmoccapy program display | LinuxCNC output rendering | active-line smoke |
| 上电/急停/复位/模式操作 | `app/src/state/store.js` , `app/src/ui/gmoccapy-shell.js` | gmoccapy/AXIS operator workflow | browser UI runtime fixture | node smoke + browser operator smoke |
| JOG/MDI 操作 | `app/src/state/store.js` , `app/src/ui/gmoccapy-shell.js` | AXIS Manual/MDI workflow | browser UI runtime fixture | node smoke + browser operator smoke |
| G-code 文件加载 | `app/src/ui/gmoccapy-shell.js` , `app/src/state/store.js` | AXIS/gmoccapy open program workflow | file text staging only, not LinuxCNC interp ret er proof | node smoke + browser operator smoke |
| 程序执行当前行显示 | `app/src/state/store.js` , `app/src/ui/gmoccapy-shell.js` | AXIS/gmoccapy current line display | fixture line playback until LinuxCNC interpreter is connected | node smoke + browser operator smoke |
| 上电/急停/复位/模式操作 | `app/src/state/store.js` , `app/src/state/linuxcnc-task-policy.js` , `app/src/ui/gmoccapy-shell.js` | `src/emc/nml_intf/emc.hh` , `src/emc/task/emctaskmain.cc` , `src/emc/task/emctask.cc` | LinuxCNC task source-referenced Web policy | node smoke + browser operator smoke |
| JOG/MDI 操作 | `app/src/state/store.js` , `app/src/state/linuxcnc-task-policy.js` , `app/src/ui/gmoccapy-shell.js` | `src/emc/task/emctaskmain.cc` `EMC_JOG_INCR` , `EMC_JOINT_HOME` , `EMC_TASK_PLAN_EXECUTE` | LinuxCNC task source-referenced Web policy | node smoke + browser operator smoke |
| 程序运行/暂停/继续/停止 | `app/src/state/store.js` , `app/src/state/linuxcnc-task-policy.js` , `app/src/ui/gmoccapy-shell.js` | `src/emc/task/emctaskmain.cc` `EMC_TASK_PLAN_RUN` , `EMC_TASK_PLAN_PAUSE` , `EMC_TASK_PLAN_RESUME` , `EMC_TASK_ABORT` | LinuxCNC task source- ref erenced Web policy | node smoke + browser operator smoke |
| G-code 文件加载 | `app/src/ui/gmoccapy-shell.js` , `app/src/state/store.js` | AXIS/gmoccapy open program workflow | browser file staging + LinuxCNC interpreter execution | node smoke + browser operator smoke |
| LinuxCNC 5 轴源程序选择 | `app/src/runtime/linuxcnc-machine-file-staging.js` , `app/src/state/store.js` , `app/src/ui/gmoccapy-shell.js` | `configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc` | guarded vendored LinuxCNC source-directory G-code staging + selected machine-file run | machine-file staging node smoke + browser source selector smoke |
| 程序执行当前行显示 | `app/src/state/store.js` , `app/src/ui/gmoccapy-shell.js` | AXIS/gmoccapy current line display | LinuxCNC interpreter canonical motion events with fixture fallback | node smoke + browser operator smoke |
| 程序执行速度/时间 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_tp_wasm.c` , `wasm-port/runtime/sdk/src/linuxcnc-tp.js` , `app/src/runtime/linuxcnc-interpreter-runtime.js` , `app/src/state/store.js` , `app/src/ui/gmoccapy-shell.js` | LinuxCNC interpreter canonical motion events queued through `src/emc/tp/tp.c` , `tc.c` , `tcq.c` , S-curve/Ruckig support sources | LinuxCNC TP queue runtime timing from canonical motion; JS estimate kept only as fallback/MDI lightweight path | TP WASM smoke + interpreter/store node smoke + browser source/dist TP timing smoke |
| 刀具预览 | `app/src/ui/gmoccapy-shell.js` , `app/src/visualization/five-axis-scene.js` | gmoccapy/vismach tool display | visualization/runtime state display | browser operator smoke |
| 3D 五轴预览 | `app/src/visualization/five-axis-scene.js` | `qtvismach_5axis_gantry.png` , `lib/python/vismach.py` | visualization | canvas nonblank smoke |
| Vismach transform tree | `app/src/visualization/machine-model.ts` | `lib/python/vismach.py` , `src/hal/user_comps/vismach/*.py` | visualization from GUI reference | scene graph smoke |
| `xyzac-trt` profile | `app/src/profiles/xyzac-trt.js` | `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini` | source/config reference | profile boundary node smoke |
| `xyzac-trt` source reference map | `app/src/profiles/source-reference-map.js` | `xyzac-trt.ini` , `xyzac-trt.xml` , `switchkins_postgui.hal` , `xyzac-trt_cmds.hal` , `xyzac-trt-kins.c` , `trtfuncs.c` , `switchkins.c` | profile/source map only, not runtime proof | profile boundary node smoke |
| `xyzbc-trt` profile | `app/src/profiles/xyzbc-trt.t s` | `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini` | source/config reference | profile node smoke |
| `xyzbc-trt` profile | `app/src/profiles/xyzbc-trt.j s` | `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini` | source/config reference + runtime module switch | profile node smoke + browser profile switch smoke |
| SWITCHKINS panel | `app/src/panel-schema/xyzac-trt-pyvcp.js` | `xyzac-trt.xml` , `switchkins_postgui.hal` | UI/HAL binding reference | profile boundary node smoke + browser DOM smoke |
| M428/M429/M430 state | `app/src/profiles/xyzac-trt.js` , `app/src/panel-schema/xyzac-trt-pyvcp.js` | `remap_subs/428remap.ngc` , `429remap.ngc` , `430remap.ngc` | LinuxCNC remap/source reference only until runtime adapter is connected | profile boundary node smoke |
| LinuxCNC boundary adapter | `app/src/runtime/linuxcnc-boundary-adapter.js` | LinuxCNC interpreter/kinematics WASM future adapter point | adapter entrypoint only, runtime not connec ted | profile boundary node smoke + browser DOM smoke |
| LinuxCNC boundary adapter | `app/src/runtime/linuxcnc-boundary-adapter.js` | LinuxCNC interpreter/kinematics/TP WASM adapter point | kinematics + interpreter + TP timing runtime connected; native task/realtime HAL still not por ted | profile boundary node smoke + browser DOM smoke |
| Full execution boundary audit | `app/src/runtime/full-execution-boundary.js` , `app/src/state/store.js` , `app/src/ui/gmoccapy-shell.js` | LinuxCNC kinematics WASM, interpreter WASM, TP WASM, `runSimConfigProgram({ executionMode: "fiveAxisRemap" })` , TRT remap files | machine-file remap and TP timing ready; native task/realtime HAL blocked | full execution boundary node smoke + browser DOM smoke |
| Five-axis kinematics | `core/linuxcnc_kinematics_wasm` | `trtfuncs.c` , `xyzac-trt-kins.c` , `xyzbc-trt-kins.c` , `5axiskins.c` | LinuxCNC source-derived WASM | Node roundtrip smoke |
| RTCP/TCP frame | `app/src/runtime/rtcp-frame.js` | LinuxCNC kinematics output + canonical events | fixture frame plumbing until kinematics WASM is ready | RTCP/store node smoke + browser DOM smoke |
| OPFS session | `app/src/runtime/session-* ` | current `wasm-port/runtime/opfs` | host-side persistence | save/restore smoke |
| OPFS session | `app/src/runtime/five-axis- session.js ` | current `wasm-port/runtime/opfs` | browser OPFS 5-axis session persistence | five_axis_session_smoke + browser save/restore smoke |
## 3. 源文件追溯清单
@@ -118,11 +122,12 @@ src/emc/kinematics/kins_util.c
| --- | --- | --- |
| gmoccapy UI style | ready | 可直接 Web 化 |
| Three.js preview | implemented_basic_canvas_scene | 已显示基础五轴机床、刀具/TCP marker、刀轴、刀路, 并消费 `rtcpFrame` |
| LinuxCNC interpreter WASM | existing_project_capability | 可参考 `wasm-port` 现有 SDK |
| LinuxCNC 5-axis kinematics WASM | node_proof_ready | `createLinuxCncKinematicsSdk({ moduleId: "xyzac-trt" })` 已由 web adapter 加载, Node smoke 验证 forward/inverse frame |
| RTCP frame UI plumbing | implemented_fixture_and_kinematics_wasm | fixture fallback 仍为 `linuxCncKinematicsReady=false` ; N ode kinematics proof 为 `source-derived-kinematics-wasm` / `linuxcnc_kinematics_wasm_c_abi` |
| Operator workflow | implemented_fixture_only | 上电/急停/复位/模式/JOG/MDI/G-code 加载/当前行显示已闭环;执行仍是 fixture line playback |
| LinuxCNC boundary adapter | kinematics_runtime _connected_node | `web-rtcp-5axis-linuxcnc-boundary-adapter` 可区分 kinematics-only ready 与 interpreter/remap missing |
| LinuxCNC interpreter WASM | browser_and_node_canonical_execution_ready | `createLinuxCncInterpSdk()` 已接入普通 G-code canonical motion execution; remap/planner 未 promoted |
| LinuxCNC 5-axis kinematics WASM | browser_and_ node_proof_ready | `createLinuxCncKinematicsSdk({ moduleId: "xyzac-trt" })` 已由 web adapter 加载, Node/source-browser/dist-browser smoke 验证 forward/inverse frame |
| RTCP frame UI plumbing | implemented_fixture_and_kinematics_wasm | fixture fallback 仍为 `linuxCncKinematicsReady=false` ; browser/n ode kinematics proof 为 `source-derived-kinematics-wasm` / `linuxcnc_kinematics_wasm_c_abi` |
| Operator workflow | implemented_linuxcnc_task_policy_with_canonical_motion | 上电/急停/复位/模式/JOG/MDI/RUN/PAUSE/RESUME/STOP/HOME 通过 `linuxcnc_task_state_mode_command_gate` ;普通程序执行来自 LinuxCNC canonical motion |
| LinuxCNC boundary adapter | kinematics_and_interpreter _connected | `web-rtcp-5axis-linuxcnc-boundary-adapter` 可区分 kinematics-only ready 与 interpreter/remap missing |
| Full execution boundary audit | implemented_remap_ready_planner_task_hal_blocked | `web-rtcp-5axis-full-linuxcnc-execution-boundary` 汇总 kinematics/interpreter/machine-file-remap evidence; 仍明确 `plannerRuntimeReady=false` 、`nativeTaskReady=false` 、`nativeHalSyncReady=false` 、`fullLinuxCncProgramExecutionReady=false` |
| PyVCP/HAL panel schema | implemented_reference_only | `xyzac-trt-switchkins-pyvcp` 已整理 SWITCHKINS 控件与 HAL nets; 不执行 native HAL |
| Python GUI runtime | not_ported | 只参考,不运行 |
| Python remap runtime | blocked | 不在第一版实现 |
@@ -465,3 +470,548 @@ Remaining risk:
Next:
browser_kinematics_wasm_asset_worker_or_interpreter_execution_source
```
## 13. M7 追溯记录
``` text
Batch: M7-browser-kinematics-runtime
Date: 2026-06-21 CST
Files changed:
app/package.json
app/scripts/build-static.mjs
app/src/main.js
app/src/runtime/linuxcnc-kinematics-runtime.js
tests/browser/gmoccapy_shell_smoke.html
tests/browser/verify_gmoccapy_dist_browser.sh
docs/development-continuation.md
docs/program-implementation-guide.md
docs/technical-roadmap.md
docs/traceability-matrix.md
Feature:
将浏览器主流程接入 xyzac-trt LinuxCNC kinematics WASM。
runtime loader 移除顶层 node:* 依赖,支持 browser ESM import;
app/src/main.js 启动后自动 attach kinematics runtime;
build-static 复制 linuxcnc-kinematics.js 与 kinematics .js/.wasm 产物到 dist;
browser smoke 同时覆盖源码入口和 dist 入口。
LinuxCNC references:
wasm-port/runtime/sdk/src/linuxcnc-kinematics.js
wasm-port/build/wasm/kinematics/linuxcnc_xyzac_trt_kinematics.js
wasm-port/build/wasm/kinematics/linuxcnc_xyzac_trt_kinematics.wasm
src/emc/kinematics/xyzac-trt-kins.c
Boundary:
sourceMode=source-derived-kinematics-wasm
semanticBoundary=linuxcnc_kinematics_wasm_c_abi
browserKinematicsReady=true
nodeKinematicsReady=true
fullLinuxCncProgramExecutionReady=false
fixtureFallback=available_only_on_runtime_load_failure
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
gmoccapy_static_build=ok
linuxcnc_kinematics_runtime_smoke=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
Remaining risk:
Superseded by M8/M9: browser kinematics now runs through Worker and ordinary
G-code RUN/STEP uses LinuxCNC interpreter canonical events. Remap/planner
execution remains not promoted.
Next:
linuxcnc_interpreter_remap_planner_execution_source_or_worker_isolation
```
## 14. M8-M9 追溯记录
``` text
Batch: M8-kinematics-worker-runtime
Batch: M9-interpreter-canonical-program-execution
Date: 2026-06-21 CST
Files changed:
app/package.json
app/scripts/build-static.mjs
app/src/main.js
app/src/runtime/linuxcnc-interpreter-runtime.js
app/src/runtime/linuxcnc-kinematics-runtime.js
app/src/runtime/linuxcnc-kinematics-worker.js
app/src/runtime/linuxcnc-kinematics-worker-client.js
app/src/runtime/linuxcnc-boundary-adapter.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
tests/node/verify_linuxcnc_interpreter_runtime.mjs
tests/node/verify_linuxcnc_kinematics_runtime.mjs
tests/node/verify_rtcp_store.mjs
tests/browser/gmoccapy_shell_smoke.html
Feature:
浏览器默认通过 Web Worker 加载 xyzac-trt LinuxCNC kinematics WASM;
普通 G-code 程序通过 LinuxCNC interpreter WASM 执行并输出 canonical
motion events; RUN/STEP 使用 canonical motion line/pose 更新 G-code
highlight、DRO、RTCP frame 和 Three.js preview。
LinuxCNC references:
wasm-port/runtime/sdk/src/linuxcnc-kinematics.js
wasm-port/runtime/sdk/src/linuxcnc-interp.js
wasm-port/build/wasm/kinematics/linuxcnc_xyzac_trt_kinematics.wasm
wasm-port/build/wasm/core/linuxcnc_interp.wasm
Boundary:
kinematics sourceMode=source-derived-kinematics-wasm
kinematics executionContext=worker in browser
interpreter sourceMode=linuxcnc-interpreter-wasm
interpreter semanticBoundary=linuxcnc_interpreter_wasm_canonical_events
remapRuntimeReady=false
plannerRuntimeReady=false
fullLinuxCncProgramExecutionReady=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
gmoccapy_static_build=ok
linuxcnc_kinematics_runtime_smoke=ok
linuxcnc_interpreter_runtime_smoke=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
Remaining risk:
Interpreter runtime currently runs on the main browser thread; remap/planner,
OPFS machine-session staging, Python remap, tool DB, and external user-M process
remain not promoted.
Next:
remap_planner_worker_interpreter_or_opfs_machine_session_integration
```
## 15. M10-M11 追溯记录
``` text
Batch: M10-profile-switching
Batch: M11-profile-session-business-closure
Date: 2026-06-21 CST
Files changed:
app/src/profiles/index.js
app/src/profiles/xyzbc-trt.js
app/src/profiles/source-reference-map.js
app/src/runtime/five-axis-session.js
app/src/runtime/rtcp-frame.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
app/src/styles/gmoccapy.css
tests/node/verify_five_axis_session.mjs
tests/node/verify_profile_boundary.mjs
tests/node/verify_rtcp_store.mjs
tests/browser/gmoccapy_shell_smoke.html
Feature:
增加 xyzbc-trt profile、source reference map、PyVCP SWITCHKINS schema
变体和 UI profile selector; profile 切换后重载对应 LinuxCNC kinematics WASM。
增加 web-rtcp-5axis OPFS session snapshot, 可保存/恢复 profile、program、
axis/TCP pose、RTCP state、canonical execution summary、runtime readiness 和 preview state。
LinuxCNC references:
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml
src/emc/kinematics/xyzbc-trt-kins.c
wasm-port/runtime/opfs snapshot/file-service pattern
Boundary:
profile switching=source/config reference plus source-derived kinematics runtime reload
session persistence=browser OPFS UI/runtime state snapshot
machine-file staging=false
remapRuntimeReady=false
plannerRuntimeReady=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
gmoccapy_static_build=ok
linuxcnc_kinematics_runtime_smoke=ok
linuxcnc_interpreter_runtime_smoke=ok
five_axis_session_smoke=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
Remaining risk:
Session snapshot persists Web simulation state, not full LinuxCNC machine-file
staging. Interpreter still runs on the main browser thread. Remap/planner,
Python remap, tool DB, and external user-M process remain not promoted.
Next:
interpreter_worker_or_opfs_machine_file_staging_or_remap_planner_boundary
```
## 17. M18 追溯记录
``` text
Batch: M18-linuxcnc-task-policy-controls
Date: 2026-06-21 CST
Files changed:
app/src/state/linuxcnc-task-policy.js
app/src/runtime/execution-timing.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
tests/node/verify_rtcp_store.mjs
tests/node/verify_five_axis_session.mjs
tests/browser/gmoccapy_shell_smoke.html
Feature:
Adds a source-referenced LinuxCNC task policy gate for operator controls:
TOGGLE_POWER, RESET, ESTOP, SET_MODE, JOG, RUN_MDI, RUN, STEP, HOME,
PAUSE, RESUME, STOP, and ABORT. The gmoccapy diagnostics panel now exposes
task state/mode/interpreter state, gate readiness, and the source file list
including `linuxcnc/src/emc/task/emctaskmain.cc`.
Adds LinuxCNC TP queue timing from interpreter canonical motion events.
UI now reports total/elapsed/remaining time and current segment
duration/velocity from the TP WASM runtime when available.
LinuxCNC references:
src/emc/nml_intf/emc.hh
src/emc/task/emctaskmain.cc
src/emc/task/emctask.cc
Boundary:
taskPolicyBoundary=linuxcnc_task_state_mode_command_gate
timingBoundary=linuxcnc_tp_queue_runtime_timing_from_canonical_motion
sourceMode=linuxcnc-task-source-referenced-policy
nativeTaskReady=false
nativeHalSyncReady=false
plannerRuntimeReady=true
fullLinuxCncProgramExecutionReady=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
rtcp_store_smoke=ok
five_axis_session_smoke=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
Remaining risk:
The control gates are aligned to LinuxCNC task source behavior, but this is
still a Web policy mirror. The project does not run the native LinuxCNC task
process, NML IPC loop, or realtime HAL synchronization. TP timing is computed
by the vendored LinuxCNC TP queue runtime from canonical motion events; it is
still not hardware drive timing and does not make native task/HAL ready.
Next:
decide_release_handoff_or_start_native_task_hal_planner_boundary
```
## 17. M13 追溯记录
``` text
Batch: M13-interpreter-worker-runtime
Date: 2026-06-21 CST
Files changed:
app/src/main.js
app/src/runtime/linuxcnc-interpreter-worker.js
app/src/runtime/linuxcnc-interpreter-worker-client.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
tests/browser/gmoccapy_shell_smoke.html
tests/node/verify_five_axis_session.mjs
tests/node/verify_rtcp_store.mjs
Feature:
Browser LinuxCNC interpreter WASM now loads through a Web Worker by default,
matching the existing kinematics Worker isolation. Program execution in store
accepts async interpreter runtimes, exposes interpreterExecutionPending, and
uses a sequence guard so stale Worker results cannot overwrite newer program
loads.
LinuxCNC references:
wasm-port/runtime/sdk/src/linuxcnc-interp.js
wasm-port/build/wasm/core/linuxcnc_interp.js
wasm-port/build/wasm/core/linuxcnc_interp.wasm
Boundary:
browserInterpreterExecutionContext=worker
nodeInterpreterExecutionContext=direct
interpreter semanticBoundary=linuxcnc_interpreter_wasm_canonical_events
remapRuntimeReady=false
plannerRuntimeReady=false
fullLinuxCncProgramExecutionReady=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
linuxcnc_kinematics_runtime_smoke=ok
linuxcnc_interpreter_runtime_smoke=ok
five_axis_session_smoke=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
gmoccapy_static_build=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
Remaining risk:
Interpreter isolation is complete for browser canonical execution, but this
still does not promote native LinuxCNC remap/planner, tool DB, task/HAL sync,
or external user-M process.
Next:
opfs_machine_file_staging_or_remap_planner_boundary
```
## 18. M14 追溯记录
``` text
Batch: M14-opfs-machine-file-staging
Date: 2026-06-21 CST
Files changed:
app/package.json
app/scripts/build-static.mjs
app/src/main.js
app/src/runtime/linuxcnc-machine-file-staging.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
tests/node/verify_machine_file_staging.mjs
tests/browser/gmoccapy_shell_smoke.html
Feature:
Adds LinuxCNC TRT machine-file staging for the web simulator. The runtime
reuses `planSimConfigStaging()` to collect INI, tool table, HAL/PyVCP assets,
remap NGC files, and demo G-code from the vendored LinuxCNC tree, then persists
those text files into OPFS-style machine paths. Store exposes stageMachineFiles()
and gmoccapy diagnostics render staging status.
LinuxCNC references:
wasm-port/runtime/sdk/src/sim-config-staging.js
wasm-port/tools/source-manifest.txt
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/*.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc
Boundary:
machineFileStagingBoundary=linuxcnc_sim_config_file_staging_plan_plus_opfs_text_persistence
stagedFiles=ini,hal,pyvcp,tool_table,remap_ngc,demo_gcode
nativeHalTaskSync=false
remapRuntimeReady=false
plannerRuntimeReady=false
fullLinuxCncProgramExecutionReady=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
machine_file_staging_smoke=ok
linuxcnc_kinematics_runtime_smoke=ok
linuxcnc_interpreter_runtime_smoke=ok
five_axis_session_smoke=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
gmoccapy_static_build=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
Remaining risk:
Machine files are staged and persisted as browser/host text assets. This does
not yet execute a machine-file backed LinuxCNC task session, native HAL sync,
Python/NGC remap runtime, full planner, tool DB, or external user-M process.
Next:
remap_planner_boundary_or_machine_file_backed_run
```
## 19. M15 追溯记录
``` text
Batch: M15-machine-file-backed-fiveaxis-remap-run
Date: 2026-06-21 CST
Files changed:
app/src/runtime/linuxcnc-interpreter-runtime.js
app/src/runtime/linuxcnc-interpreter-worker.js
app/src/runtime/linuxcnc-interpreter-worker-client.js
app/src/runtime/linuxcnc-machine-file-staging.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
tests/node/verify_machine_file_staging.mjs
tests/browser/gmoccapy_shell_smoke.html
Feature:
Adds machine-file backed five-axis remap execution. The simulator now stages
TRT machine files, forwards the staged INI/tool table/remap/demo files into
the LinuxCNC interpreter WASM filesystem, and calls
`runSimConfigProgram({ executionMode: "fiveAxisRemap" })`. Node and browser
smokes verify LinuxCNC reports INI open, remap readiness, and program exit.
LinuxCNC references:
wasm-port/runtime/sdk/src/linuxcnc-interp.js
wasm-port/runtime/sdk/src/sim-config-staging.js
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc
Boundary:
machineFileBackedRunBoundary=linuxcnc_fiveaxis_remap_wasm_machine_file_execution
sourceMode=linuxcnc-machine-file-remap-wasm
remapRuntimeReady=vendored_linuxcnc_fiveaxis_remap_c_abi_for_staged_files
nativeTaskHalSync=false
plannerRuntimeReady=false
fullLinuxCncProgramExecutionReady=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
machine_file_staging_smoke=ok
linuxcnc_interpreter_runtime_smoke=ok
rtcp_store_smoke=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
Remaining risk:
The run uses vendored LinuxCNC five-axis remap C ABI for staged files, but
still does not promote full native task/HAL synchronization, trajectory
planner runtime, tool DB process, or external user-M process.
Next:
planner_boundary_or_full_task_hal_gap_closure
```
## 20. M16 追溯记录
``` text
Batch: M16-planner-task-hal-boundary-audit
Date: 2026-06-21 CST
Files changed:
app/package.json
app/src/runtime/full-execution-boundary.js
app/src/runtime/linuxcnc-interpreter-runtime.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
tests/node/verify_full_execution_boundary.mjs
tests/node/verify_linuxcnc_interpreter_runtime.mjs
tests/node/verify_machine_file_staging.mjs
tests/node/verify_rtcp_store.mjs
tests/browser/gmoccapy_shell_smoke.html
Feature:
Adds a full LinuxCNC execution boundary audit layer. The Web simulator now
summarizes kinematics WASM, interpreter canonical motion, machine-file
staging, five-axis remap C ABI run, and switchkins HAL evidence in one
explicit diagnostics contract. It also adds an Audit control that can trigger
staging plus machine-file backed remap execution from the gmoccapy shell.
LinuxCNC references:
wasm-port/runtime/sdk/src/linuxcnc-interp.js
wasm-port/runtime/sdk/src/linuxcnc-hal.js
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc
Boundary:
fullExecutionBoundary=linuxcnc_machine_file_remap_ready_planner_task_hal_blocked
remapRuntimeReady=true for staged fiveAxisRemap C ABI run
halSwitchkinsEvidenceReady=true for fiveaxis_hal_switchkins evidence
nativeTaskReady=false
nativeHalSyncReady=false
plannerRuntimeReady=false
fullLinuxCncProgramExecutionReady=false
promotionAllowed=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
full_execution_boundary_smoke=ok
machine_file_staging_smoke=ok
linuxcnc_interpreter_runtime_smoke=ok
rtcp_store_smoke=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
Remaining risk:
Full native LinuxCNC task/NML process, realtime HAL thread synchronization,
trajectory planner queue runtime, external user-M process, and full tool DB
process are still not ported or promoted.
Next:
optional_native_task_hal_planner_port_or_release_handoff
```
## 21. M17 追溯记录
``` text
Batch: M17-linuxcnc-5axis-gcode-source-ingest
Date: 2026-06-21 CST
Files changed:
app/src/runtime/linuxcnc-machine-file-staging.js
app/src/runtime/linuxcnc-interpreter-runtime.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
tests/node/verify_machine_file_staging.mjs
tests/browser/gmoccapy_shell_smoke.html
Feature:
Adds real vendored LinuxCNC five-axis G-code source ingestion. TRT demo
programs from `configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc`
are staged, listed in the gmoccapy G-code panel, loadable into the program
viewer, and used as the selected `wasmProgramPath` for machine-file backed
fiveAxisRemap execution.
LinuxCNC references:
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzbc.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/impeller-7bl-xyzac.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc
Boundary:
gcodeSourceBoundary=linuxcnc_vendored_5axis_gcode_source_file
sourceMode=linuxcnc-vendored-5axis-gcode
machineFileBackedRunProgram=selected_staged_linuxcnc_ngc_source
sourceDirectoryGuard=configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/*.ngc only
remapRuntimeReady=true for staged fiveAxisRemap C ABI run
plannerRuntimeReady=false
nativeTaskReady=false
nativeHalSyncReady=false
fullLinuxCncProgramExecutionReady=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
machine_file_staging_smoke=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
Remaining risk:
The selected G-code source is real LinuxCNC vendored source and the machine-file
run uses that selected file path, but full native task/NML, realtime HAL sync,
and trajectory planner queue runtime are still not promoted.
Next:
trajectory_planner_wasm_boundary_or_native_task_hal_port
```
## 16. M12 追溯记录
``` text
Batch: M12-switchkins-rtcp-program-execution
Date: 2026-06-21 CST
Files changed:
app/src/runtime/linuxcnc-interpreter-runtime.js
app/src/runtime/linuxcnc-kinematics-runtime.js
app/src/runtime/linuxcnc-kinematics-worker.js
app/src/runtime/linuxcnc-kinematics-worker-client.js
app/src/state/store.js
app/src/ui/gmoccapy-shell.js
tests/node/verify_linuxcnc_interpreter_runtime.mjs
tests/node/verify_rtcp_store.mjs
tests/browser/gmoccapy_shell_smoke.html
Feature:
LinuxCNC TRT `M428/M429/M430` switchkins remap M-code is preserved as
program-level runtime events. The interpreter runtime strips those high M-codes
only from the WASM input program so LinuxCNC interpreter canonical motion can
continue, then annotates canonical motion with active switchkins state.
RUN/STEP/RUN_FRAME now applies program switchkins state to RTCP state and calls
LinuxCNC kinematics WASM `lckins_switch()` through direct and Worker runtimes.
LinuxCNC references:
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc
configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc
src/emc/kinematics/switchkins.c
wasm-port/runtime/sdk/src/linuxcnc-kinematics.js
Boundary:
switchkinsProgramBoundary=linuxcnc_remap_mcode_preserved_and_web_runtime_applied
interpreter sourceMode=linuxcnc-interpreter-wasm
interpreter semanticBoundary=linuxcnc_interpreter_wasm_canonical_events
kinematics semanticBoundary=linuxcnc_kinematics_wasm_c_abi
remapRuntimeReady=false
plannerRuntimeReady=false
fullLinuxCncProgramExecutionReady=false
Tests:
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke
Result:
linuxcnc_kinematics_runtime_smoke=ok
linuxcnc_interpreter_runtime_smoke=ok
five_axis_session_smoke=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
gmoccapy_static_build=ok
gmoccapy_shell_smoke=ok
gmoccapy_dist_smoke=ok
Remaining risk:
This preserves and applies switchkins remap M-codes in Web runtime, but does not
execute LinuxCNC Python/NGC remap, native HAL/task synchronization, full planner,
tool DB, or external user-M process.
Next:
interpreter_worker_or_opfs_machine_file_staging_or_remap_planner_boundary
```