1461 lines
64 KiB
Markdown
1461 lines
64 KiB
Markdown
# 5 轴数控系统 Web 仿真实现追溯文档
|
||
|
||
生成时间:2026-06-20 CST
|
||
|
||
## 1. 目的
|
||
|
||
本文件用于追溯后续实现中的每个主要功能来自哪里、参考了哪些 LinuxCNC 源文件/配置/图片、属于什么边界、如何验证。
|
||
|
||
追溯原则:
|
||
|
||
```text
|
||
界面形态可参考 LinuxCNC Python GUI;
|
||
CNC 语义必须来自 LinuxCNC source/WASM/source-derived boundary;
|
||
浏览器代码只负责 UI、状态编排、文件会话、可视化和调用边界;
|
||
任何 fixture 或 UI-only 结果不得冒充 LinuxCNC runtime proof。
|
||
```
|
||
|
||
## 2. 总体追溯表
|
||
|
||
| 功能 | Web 实现位置 | LinuxCNC 参考 | 边界分类 | 验证方式 |
|
||
| --- | --- | --- | --- | --- |
|
||
| gmoccapy 风格 shell | `app/src/ui/gmoccapy-shell.ts` | `docs/src/gui/images/gmoccapy_5_axis.png`, `configs/sim/gmoccapy/gmoccapy_XYZAC.ini` | UI reference | browser shell smoke |
|
||
| 大号 DRO | `app/src/ui/gmoccapy-dro-panel.ts` | gmoccapy 5 axis screenshot, LinuxCNC DRO conventions | UI rendering of runtime state | DOM smoke + state smoke |
|
||
| 右侧模式按钮栏 | `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/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-referenced 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 |
|
||
| LinuxCNC 5 轴源程序案例覆盖 | `tests/node/verify_real_linuxcnc_5axis_program_cases.mjs`, `tests/browser/gmoccapy_shell_smoke.html`, `app/src/runtime/linuxcnc-interpreter-runtime.js` | `boat-xyzac.ngc`, `boat-xyzbc.ngc`, `impeller-7bl-xyzac.ngc`, `xyzac_switchkins*.ngc`, `xyzbc_switchkins.ngc` | source-guarded LinuxCNC demo canonical/TP/toolpath coverage; `o<sub> call` entries verified through machine-file staging/remap boundary | real LinuxCNC 5-axis program cases node smoke + browser source program 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 consuming runtime state | canvas nonblank smoke |
|
||
| Three.js 程序预览和执行轨迹 | `app/src/visualization/five-axis-scene.js`, `tests/browser/gmoccapy_shell_smoke.html` | LinuxCNC interpreter canonical motion, LinuxCNC TP timing samples, task/motion/HAL feedback | display only; no G-code semantics generated in Three.js | source-program browser smoke + desktop/mobile canvas nonblank |
|
||
| 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.js` | `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini` | source/config reference + runtime module switch | profile node smoke + browser profile switch smoke |
|
||
| `gmoccapy-xyzab` reference profile | `app/src/profiles/gmoccapy-xyzab.js` | `linuxcnc/configs/sim/gmoccapy/gmoccapy_XYZAB.ini`, `core_sim_XYZAB.hal`, `spindle_sim.hal`, `simulated_home.hal`, `gmoccapy_postgui.hal` | gmoccapy/trivkins reference profile only; not RTCP proof | gmoccapy XYZAB profile node smoke |
|
||
| gmoccapy_XYZAB NML/HAL communication model | `app/src/runtime/gmoccapy-communication-model.js`, `docs/gmoccapy-xyzab-reference.md` | `gmoccapy.py`, `linuxcnc.command/stat/error_channel`, `milltask`, HALUI, POSTGUI_HALFILE startup order | native communication reference mapped to Web store/task policy; browser does not attach to NML/HAL shared memory | gmoccapy communication model node smoke |
|
||
| gmoccapy_XYZAB HAL/postgui diagnostics model | `app/src/runtime/gmoccapy-hal-model.js`, `docs/gmoccapy-xyzab-reference.md` | `core_sim_XYZAB.hal`, `spindle_sim.hal`, `simulated_home.hal`, `gmoccapy_postgui.hal` | HAL pin/postgui reference and Web diagnostics only | gmoccapy HAL model node smoke |
|
||
| gmoccapy button icon manifest | `app/src/ui-reference/gmoccapy-button-icons.json`, `app/src/assets/gmoccapy-icons/` | `work/working3/gmoccapy_button_icons/button_icon_inventory.csv`, copied classic theme and macro image files | UI asset provenance only; button semantics still require task policy/runtime evidence | gmoccapy icon manifest node 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/TP WASM adapter point | kinematics + interpreter + TP timing runtime connected; task/motion/HAL simulation runtime connected separately | 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, task/motion/HAL WASM, `runSimConfigProgram({ executionMode: "fiveAxisRemap" })`, TRT remap files | machine-file remap, TP timing, and task/motion/HAL ready for Web simulation boundary; hardware/realtime kernel/external processes still false | full execution boundary node smoke + browser DOM smoke |
|
||
| Native task/HAL readiness artifact | `app/src/runtime/native-task-hal-audit.js`, `tests/node/verify_native_task_hal_audit.mjs`, `build/readiness/native-task-hal-readiness.json` | `wasm-port/tools/task-hal-source-manifest.txt`, `wasm-port/tests/native/probe_trt_task_hal_runtime.sh`, task/motion/HAL WASM gates | machine-readable audit that separates Web simulation promotion from host realtime/hardware/native process blockers | native task/HAL audit node smoke |
|
||
| Native task / realtime HAL sync runtime | `docs/native-task-hal-sync-implementation-steps.md`, `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`, `app/src/runtime/linuxcnc-task-hal-runtime.js` | `src/emc/task/emctaskmain.cc`, `src/emc/task/emctask.cc`, `src/emc/task/taskintf.cc`, `src/emc/task/emccanon.cc`, `src/emc/motion/control.c`, `src/emc/motion/command.c`, `src/emc/motion/motion.c`, `src/hal/hal_lib.c`, `src/hal/hal_priv.h` | task/motion/HAL deterministic WASM simulation runtime; host realtime/hardware out of scope | source manifest, native opt-in probe, HAL runtime smoke, motion/HAL sync smoke, task/HAL WASM SDK smoke, Web store/browser 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 storage capability | `app/src/runtime/five-axis-session.js`, `app/src/runtime/linuxcnc-machine-file-staging.js`, `app/src/ui/gmoccapy-shell.js` | browser OPFS contract and current page memory fallback | OPFS persistence when available; memory fallback is current page lifecycle only | five_axis_session_smoke + machine_file_staging_smoke + public HTTP fallback browser smoke |
|
||
|
||
## 3. 源文件追溯清单
|
||
|
||
### UI 图片
|
||
|
||
```text
|
||
linuxcnc/docs/src/gui/images/gmoccapy_5_axis.png
|
||
linuxcnc/docs/src/gui/images/qtvismach_5axis_gantry.png
|
||
linuxcnc/docs/src/gui/images/axis.png
|
||
linuxcnc/docs/src/gui/images/axis-pyvcp.png
|
||
linuxcnc/docs/src/gui/images/qtdragon.png
|
||
linuxcnc/docs/src/gui/images/qtdragon_hd.png
|
||
```
|
||
|
||
本项目副本:
|
||
|
||
```text
|
||
assets/reference/linuxcnc-gui/
|
||
```
|
||
|
||
### Python GUI
|
||
|
||
```text
|
||
src/emc/usr_intf/axis/scripts/axis.py
|
||
lib/python/vismach.py
|
||
src/hal/user_comps/vismach/5axisgui.py
|
||
src/hal/user_comps/vismach/xyzac-trt-gui.py
|
||
src/hal/user_comps/vismach/xyzbc-trt-gui.py
|
||
configs/sim/gmoccapy/gmoccapy_XYZAC.ini
|
||
configs/sim/gmoccapy/gmoccapy_XYZAB.ini
|
||
configs/sim/gmoccapy/core_sim_XYZAB.hal
|
||
configs/sim/gmoccapy/spindle_sim.hal
|
||
configs/sim/gmoccapy/simulated_home.hal
|
||
configs/sim/gmoccapy/gmoccapy_postgui.hal
|
||
configs/sim/qtvcp_screens/qtdragon/README
|
||
```
|
||
|
||
使用方式:
|
||
|
||
```text
|
||
UI/visualization reference only
|
||
```
|
||
|
||
### 5 轴配置
|
||
|
||
```text
|
||
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/bridgemill/5axis.ini
|
||
configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini
|
||
```
|
||
|
||
### PyVCP/HAL
|
||
|
||
```text
|
||
configs/sim/axis/vismach/5axis/bridgemill/5axis.xml
|
||
configs/sim/axis/vismach/5axis/bridgemill/5axis_postgui.hal
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.xml
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
|
||
configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.xml
|
||
configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr-postgui.hal
|
||
```
|
||
|
||
### 5 轴运动学源码
|
||
|
||
```text
|
||
src/emc/kinematics/trtfuncs.c
|
||
src/emc/kinematics/xyzac-trt-kins.c
|
||
src/emc/kinematics/xyzbc-trt-kins.c
|
||
src/emc/kinematics/5axiskins.c
|
||
src/emc/kinematics/switchkins.c
|
||
src/emc/kinematics/switchkins.h
|
||
src/emc/kinematics/userkfuncs.c
|
||
src/emc/kinematics/kins_util.c
|
||
```
|
||
|
||
## 4. 边界状态
|
||
|
||
| 边界 | 当前状态 | 说明 |
|
||
| --- | --- | --- |
|
||
| gmoccapy UI style | ready | 可直接 Web 化 |
|
||
| Three.js preview | implemented_basic_canvas_scene | 已显示基础五轴机床、刀具/TCP marker、刀轴、刀路,并消费 `rtcpFrame` |
|
||
| 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/node 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_task_motion_hal_simulation_runtime | `web-rtcp-5axis-full-linuxcnc-execution-boundary` 汇总 kinematics/interpreter/machine-file-remap/TP/task-HAL evidence;Web simulation boundary 可提升,仍明确 `hardwareDrive=false`、`hostRealtimeKernel=false`、`externalUserMProcessReady=false`、`toolDbProcessReady=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 | 不在第一版实现 |
|
||
| tool DB runtime | blocked | 不在第一版实现 |
|
||
| external user-M process | blocked | 不在第一版实现 |
|
||
| native hard realtime | out_of_scope | Web 仿真不实现 |
|
||
|
||
## 5. 每批开发追溯记录模板
|
||
|
||
后续每批完成后追加:
|
||
|
||
```text
|
||
Batch:
|
||
Date:
|
||
Files changed:
|
||
Feature:
|
||
LinuxCNC references:
|
||
Boundary:
|
||
Tests:
|
||
Result:
|
||
Remaining risk:
|
||
Next:
|
||
```
|
||
|
||
## 6. 首批追溯记录
|
||
|
||
```text
|
||
Batch: M0-docs-preparation
|
||
Date: 2026-06-20 CST
|
||
Files changed:
|
||
README.md
|
||
docs/implementation-plan.md
|
||
docs/technical-roadmap.md
|
||
docs/program-implementation-guide.md
|
||
docs/development-continuation.md
|
||
docs/traceability-matrix.md
|
||
docs/linuxcnc-python-gui-reference.md
|
||
docs/linuxcnc-gui-reference-gallery.md
|
||
Feature:
|
||
完成 5 轴数控系统 Web 仿真程序开发前准备文档。
|
||
LinuxCNC references:
|
||
gmoccapy_5_axis.png
|
||
qtvismach_5axis_gantry.png
|
||
axis.py
|
||
vismach.py
|
||
xyzac-trt.ini
|
||
xyzbc-trt.ini
|
||
trtfuncs.c
|
||
5axiskins.c
|
||
Boundary:
|
||
docs_only
|
||
Tests:
|
||
git diff --check -- web-rtcp-5axis-sim-plan
|
||
Result:
|
||
ready_for_M1_web_shell_gmoccapy
|
||
Remaining risk:
|
||
尚未实现 app 代码;LinuxCNC kinematics WASM ABI 尚未建立。
|
||
Next:
|
||
M1-web-shell-gmoccapy
|
||
```
|
||
|
||
## 7. M1 追溯记录
|
||
|
||
```text
|
||
Batch: M1-web-shell-gmoccapy
|
||
Date: 2026-06-20 CST
|
||
Files changed:
|
||
.gitignore
|
||
app/index.html
|
||
app/package.json
|
||
app/tsconfig.json
|
||
app/scripts/build-static.mjs
|
||
app/src/main.js
|
||
app/src/state/store.js
|
||
app/src/ui/gmoccapy-shell.js
|
||
app/src/styles/gmoccapy.css
|
||
tests/browser/gmoccapy_shell_smoke.html
|
||
tests/browser/verify_gmoccapy_shell_browser.sh
|
||
Feature:
|
||
实现 gmoccapy 5 轴风格 Web shell,并补齐 M1 build gate。
|
||
LinuxCNC references:
|
||
docs/src/gui/images/gmoccapy_5_axis.png
|
||
docs/src/gui/images/qtvismach_5axis_gantry.png
|
||
configs/sim/gmoccapy/gmoccapy_XYZAC.ini
|
||
Boundary:
|
||
ui_reference_only
|
||
sourceMode=fixture-ui-only
|
||
Tests:
|
||
npm --prefix web-rtcp-5axis-sim-plan/app run build
|
||
web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
|
||
git diff --check -- web-rtcp-5axis-sim-plan
|
||
Result:
|
||
gmoccapy_static_build=ok
|
||
gmoccapy_shell_smoke=ok
|
||
Remaining risk:
|
||
M1 shell/build gate 已闭环;Three.js 真实场景、LinuxCNC interpreter/WASM、5 轴 kinematics ABI 仍未接入。
|
||
Next:
|
||
M2-state-and-controls
|
||
```
|
||
|
||
## 8. M2 追溯记录
|
||
|
||
```text
|
||
Batch: M2-state-and-controls
|
||
Date: 2026-06-20 CST
|
||
Files changed:
|
||
app/package.json
|
||
app/src/profiles/xyzac-trt.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_rtcp_store.mjs
|
||
tests/browser/gmoccapy_shell_smoke.html
|
||
docs/development-continuation.md
|
||
docs/traceability-matrix.md
|
||
Feature:
|
||
实现 gmoccapy store/control 链路,并加入 RTCP fixture frame plumbing。
|
||
Run/Step 会推进 fixture motion frame;TCP/IDENTITY 会切换 RTCP on/off;
|
||
DRO、preview badge 和 info diagnostics 显示 TCP pose、tool axis vector、frame readiness。
|
||
Preview view/Fit/Clear、Rapid/Feed override、Spindle override、Flood/Mist、
|
||
Reload/Home/Full 已接入 store action,并由 node/browser smoke 覆盖。
|
||
LinuxCNC references:
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.xml
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
|
||
src/emc/kinematics/xyzac-trt-kins.c
|
||
src/emc/kinematics/trtfuncs.c
|
||
Boundary:
|
||
sourceMode=fixture-ui-only
|
||
semanticBoundary=fixture_frame_ui_plumbing_not_linuxcnc_kinematics_proof
|
||
linuxCncKinematicsReady=false
|
||
promotionAllowed=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
|
||
rtcp_store_smoke=ok
|
||
gmoccapy_shell_smoke=ok
|
||
Remaining risk:
|
||
RTCP 当前是 UI/runtime frame plumbing,不是 LinuxCNC/source-derived kinematics WASM proof;
|
||
Three.js 仍是 SVG placeholder,M3 需要接入真实 canvas scene 并消费 rtcpFrame。
|
||
Next:
|
||
M3-threejs-preview
|
||
```
|
||
|
||
## 9. M3 追溯记录
|
||
|
||
```text
|
||
Batch: M3-threejs-preview
|
||
Date: 2026-06-21 CST
|
||
Files changed:
|
||
app/src/vendor/three/three.module.js
|
||
app/src/vendor/three/three.core.js
|
||
app/src/visualization/five-axis-scene.js
|
||
app/src/ui/gmoccapy-shell.js
|
||
tests/browser/gmoccapy_shell_smoke.html
|
||
docs/development-continuation.md
|
||
docs/traceability-matrix.md
|
||
Feature:
|
||
将 preview 区域从占位内容升级为 Three.js WebGL canvas。
|
||
场景显示基础五轴工作区、工作台、刀具/TCP marker、刀轴和刀路;
|
||
tool marker 消费 store 的 tcpPose,刀轴消费 toolAxisVector,RTCP on/off 影响可见刀轴长度和姿态数据。
|
||
LinuxCNC references:
|
||
docs/src/gui/images/qtvismach_5axis_gantry.png
|
||
lib/python/vismach.py
|
||
src/hal/user_comps/vismach/xyzac-trt-gui.py
|
||
Boundary:
|
||
visualization_only
|
||
sourceMode=fixture-ui-only
|
||
semanticBoundary=fixture_frame_ui_plumbing_not_linuxcnc_kinematics_proof
|
||
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
|
||
rtcp_store_smoke=ok
|
||
gmoccapy_shell_smoke=ok
|
||
Remaining risk:
|
||
Three.js 当前消费 fixture frame;五轴运动学仍未接入 LinuxCNC/source-derived WASM。
|
||
Next:
|
||
M4-profile-and-linuxcnc-boundary
|
||
```
|
||
|
||
## 10. M4 追溯记录
|
||
|
||
```text
|
||
Batch: M4-profile-and-linuxcnc-boundary
|
||
Date: 2026-06-21 CST
|
||
Files changed:
|
||
app/package.json
|
||
app/src/profiles/xyzac-trt.js
|
||
app/src/profiles/source-reference-map.js
|
||
app/src/panel-schema/xyzac-trt-pyvcp.js
|
||
app/src/runtime/linuxcnc-boundary-adapter.js
|
||
app/src/state/store.js
|
||
app/src/ui/gmoccapy-shell.js
|
||
tests/node/verify_rtcp_store.mjs
|
||
tests/node/verify_profile_boundary.mjs
|
||
tests/browser/gmoccapy_shell_smoke.html
|
||
docs/development-continuation.md
|
||
docs/program-implementation-guide.md
|
||
docs/traceability-matrix.md
|
||
Feature:
|
||
建立 `xyzac-trt` profile/source reference map、PyVCP/HAL SWITCHKINS panel schema
|
||
和 LinuxCNC boundary adapter 接入点。store/UI 暴露 boundary readiness,
|
||
并明确保持 `linuxCncKinematicsReady=false`、`promotionAllowed=false`。
|
||
本批后续已进一步按 LinuxCNC `xyzac-trt.ini`、`xyzac-trt_cmds.hal`、
|
||
`switchkins_postgui.hal`、`xyzac-trt.tbl`、`428/429/430remap.ngc` 显式整理
|
||
DISPLAY/RS274NGC/TRAJ、axis/joint limits、HALCMD feedback/offset nets、
|
||
HALUI MDI commands、tool table 和 remap IO 约束,使 M4 在 source-aligned
|
||
profile/schema/adapter 层面完整闭环。
|
||
LinuxCNC references:
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.xml
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt_cmds.hal
|
||
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/xyzac-trt-kins.c
|
||
src/emc/kinematics/trtfuncs.c
|
||
src/emc/kinematics/switchkins.c
|
||
Boundary:
|
||
sourceMapBoundary=profile_source_map_only_not_runtime_proof
|
||
panelSchemaBoundary=pyvcp_hal_schema_reference_only
|
||
adapterBoundary=adapter_entrypoint_only_runtime_not_connected
|
||
linuxCncKinematicsReady=false
|
||
promotionAllowed=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
|
||
rtcp_store_smoke=ok
|
||
profile_boundary_smoke=ok
|
||
gmoccapy_shell_smoke=ok
|
||
Remaining risk:
|
||
Adapter 目前只是接入点;尚未连接 LinuxCNC interpreter/kinematics WASM ABI。
|
||
Next:
|
||
linuxcnc_kinematics_wasm_abi
|
||
```
|
||
|
||
## 11. M5 追溯记录
|
||
|
||
```text
|
||
Batch: M5-operator-program-workflow
|
||
Date: 2026-06-21 CST
|
||
Files changed:
|
||
app/src/state/store.js
|
||
app/src/ui/gmoccapy-shell.js
|
||
app/src/styles/gmoccapy.css
|
||
tests/node/verify_rtcp_store.mjs
|
||
tests/browser/gmoccapy_shell_smoke.html
|
||
docs/development-continuation.md
|
||
docs/traceability-matrix.md
|
||
Feature:
|
||
补齐 operator workflow:上电、急停、AUTO/MANUAL/JOG/MDI、复位、
|
||
本地 G-code 文件加载、刀具预览、程序执行当前行显示和高亮。
|
||
LinuxCNC references:
|
||
gmoccapy operator workflow
|
||
AXIS program loading/current-line workflow
|
||
vismach tool preview conventions
|
||
Boundary:
|
||
operatorWorkflowBoundary=browser_ui_runtime_fixture
|
||
gcodeLoadBoundary=file_text_staging_only
|
||
programExecutionBoundary=fixture_line_playback_not_linuxcnc_interpreter
|
||
linuxCncKinematicsReady=false
|
||
promotionAllowed=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
|
||
rtcp_store_smoke=ok
|
||
profile_boundary_smoke=ok
|
||
gmoccapy_shell_smoke=ok
|
||
Remaining risk:
|
||
程序执行仍是 fixture line playback;下一步必须接 LinuxCNC interpreter/WASM 或
|
||
source-derived kinematics WASM,才能把执行来源升级为 LinuxCNC-owned。
|
||
Next:
|
||
linuxcnc_interpreter_or_kinematics_wasm_execution_source
|
||
```
|
||
|
||
## 12. M6 追溯记录
|
||
|
||
```text
|
||
Batch: M6-linuxcnc-kinematics-frame-proof
|
||
Date: 2026-06-21 CST
|
||
Files changed:
|
||
app/package.json
|
||
app/src/runtime/linuxcnc-kinematics-runtime.js
|
||
app/src/runtime/linuxcnc-boundary-adapter.js
|
||
app/src/runtime/rtcp-frame.js
|
||
app/src/state/store.js
|
||
tests/node/verify_linuxcnc_kinematics_runtime.mjs
|
||
tests/node/verify_rtcp_store.mjs
|
||
tests/node/verify_profile_boundary.mjs
|
||
docs/program-implementation-guide.md
|
||
docs/development-continuation.md
|
||
docs/traceability-matrix.md
|
||
Feature:
|
||
将 RTCP frame/boundary adapter 从 fixture-only 接到
|
||
createLinuxCncKinematicsSdk({ moduleId: "xyzac-trt" })。
|
||
新增 web runtime adapter,只加载共享 wasm-port SDK 并返回 LinuxCNC
|
||
forward/inverse 结果;frame builder 使用 forward.pose 和 inverse.joints
|
||
生成 source-derived kinematics frame。
|
||
LinuxCNC references:
|
||
wasm-port/runtime/sdk/src/linuxcnc-kinematics.js
|
||
wasm-port/build/wasm/kinematics/linuxcnc_xyzac_trt_kinematics.wasm
|
||
src/emc/kinematics/xyzac-trt-kins.c
|
||
src/emc/kinematics/trtfuncs.c
|
||
src/emc/kinematics/switchkins.c
|
||
Boundary:
|
||
sourceMode=source-derived-kinematics-wasm
|
||
semanticBoundary=linuxcnc_kinematics_wasm_c_abi
|
||
linuxCncKinematicsReady=true
|
||
kinematicsFramePromotionAllowed=true
|
||
fullLinuxCncProgramExecutionReady=false
|
||
browserFallback=fixture-ui-only
|
||
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
|
||
Remaining risk:
|
||
Browser path still runs fixture fallback because kinematics WASM asset copy/worker
|
||
is not wired into app/src/main.js. Program RUN/STEP still advances fixture lines;
|
||
LinuxCNC interpreter/remap/planner execution is not promoted.
|
||
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
|
||
```
|
||
|
||
## 22. Native Task/HAL Phase 0-4 追溯记录
|
||
|
||
```text
|
||
Batch: native-task-hal-phase0-4-runtime-boundary
|
||
Date: 2026-06-22 CST
|
||
Files changed:
|
||
wasm-port/tools/task-hal-source-manifest.txt
|
||
wasm-port/tools/verify_task_hal_source_manifest.sh
|
||
wasm-port/tests/native/probe_trt_task_hal_runtime.sh
|
||
wasm-port/runtime/core/shims/hal.h
|
||
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_hal_runtime.hh
|
||
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_hal_runtime.cpp
|
||
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_hal_runtime_probe.cpp
|
||
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.h
|
||
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c
|
||
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.hh
|
||
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp
|
||
wasm-port/tools/build_task_hal_wasm.sh
|
||
wasm-port/runtime/sdk/src/linuxcnc-task-hal.js
|
||
wasm-port/runtime/sdk/src/index.js
|
||
wasm-port/tests/wasm/node/verify_hal_runtime.sh
|
||
wasm-port/tests/wasm/node/verify_motion_hal_sync.sh
|
||
wasm-port/tests/wasm/node/verify_task_hal_wasm.sh
|
||
wasm-port/tests/wasm/node/verify_task_hal_sdk.sh
|
||
Feature:
|
||
Establishes the unpromoted native task/HAL implementation path through
|
||
phase 0 source manifest evidence, phase 1 opt-in native TRT task/HAL probe,
|
||
phase 2 C/C++ HAL runtime registry, and phase 3 minimal motion/HAL servo-cycle
|
||
C ABI. The HAL runtime owns pin/signal/param/net/thread state and blocks
|
||
`loadusr`; the motion runtime accepts LinuxCNC-style command JSON and
|
||
synchronizes `motion.*`, `axis.*`, and `joint.*` HAL pins on deterministic
|
||
servo cycles. Phase 4 adds the planned `lctask_*` C ABI as an in-process
|
||
task shim that stages files, opens a program, tracks task state/mode/interp
|
||
and exec status, and forwards RUN/PAUSE/RESUME/ABORT/MDI/JOG into motion/HAL
|
||
runtime snapshots. It also adds the SDK wrapper needed for later Worker
|
||
integration.
|
||
LinuxCNC references:
|
||
src/emc/task/task.hh
|
||
src/emc/task/emctask.cc
|
||
src/emc/task/emctaskmain.cc
|
||
src/emc/task/taskintf.cc
|
||
src/emc/task/emccanon.cc
|
||
src/emc/nml_intf/emc.hh
|
||
src/emc/motion/motion.h
|
||
src/emc/motion/command.c
|
||
src/emc/motion/control.c
|
||
src/emc/motion/mot_priv.h
|
||
src/hal/hal_lib.c
|
||
src/hal/hal_priv.h
|
||
src/hal/components/threads.c
|
||
Boundary:
|
||
taskHalSourceManifestReady=true
|
||
nativeTaskHalProbe=opt_in_ready_disabled_by_default
|
||
halRuntimeBoundary=linuxcnc_hal_runtime_phase2_minimal
|
||
motionHalBoundary=linuxcnc_motion_runtime_phase3_minimal
|
||
taskHalBoundary=linuxcnc_task_motion_hal_wasm_phase4_minimal
|
||
nativeTaskReady=false
|
||
nativeHalSyncReady=false
|
||
fullLinuxCncProgramExecutionReady=false
|
||
promotionAllowed=false
|
||
Tests:
|
||
wasm-port/tools/verify_task_hal_source_manifest.sh
|
||
wasm-port/tests/native/probe_trt_task_hal_runtime.sh
|
||
wasm-port/tests/wasm/node/verify_hal_runtime.sh
|
||
wasm-port/tests/wasm/node/verify_motion_hal_sync.sh
|
||
wasm-port/tests/wasm/node/verify_task_hal_wasm.sh
|
||
wasm-port/tests/wasm/node/verify_task_hal_sdk.sh
|
||
Result:
|
||
task_hal_source_manifest_ready=1
|
||
native_probe_status=ready_disabled_by_default
|
||
hal_runtime_registry=ok
|
||
hal_net_signal_propagation=ok
|
||
hal_thread_scheduler=ok
|
||
loadusr_blocked_evidence=ok
|
||
motion_hal_servo_cycle=ok
|
||
motion_program_line_hal_sync=ok
|
||
switchkins_type_hal_sync=ok
|
||
jog_motion_status_sync=ok
|
||
linuxcnc_task_runtime_smoke=ok
|
||
task_status_from_linuxcnc_runtime=ok
|
||
task_commands_drive_motion_runtime=ok
|
||
mdi_jog_task_motion_hal_sync=ok
|
||
linuxcnc_task_hal_sdk=ok
|
||
Remaining risk:
|
||
Phase 4 is still a narrow deterministic runtime-edge adapter. Full LinuxCNC
|
||
task loop, in-process NML queue sourced from `emc.hh`, canonical queue,
|
||
real `emcmotController()`, machine-file session integration, native/WASM
|
||
comparison artifacts, and browser Worker/store wiring are still required
|
||
before promotion.
|
||
Next:
|
||
task_hal_machine_file_session_and_worker_wiring
|
||
```
|
||
|
||
## 20. M20 追溯记录
|
||
|
||
```text
|
||
Batch: M20-task-hal-machine-file-worker-boundary
|
||
Date: 2026-06-22 CST
|
||
Files changed:
|
||
app/src/runtime/linuxcnc-task-hal-runtime.js
|
||
app/src/runtime/linuxcnc-task-hal-worker.js
|
||
app/src/runtime/linuxcnc-task-hal-worker-client.js
|
||
app/src/runtime/linuxcnc-machine-file-staging.js
|
||
app/src/runtime/full-execution-boundary.js
|
||
app/src/state/store.js
|
||
app/src/ui/gmoccapy-shell.js
|
||
app/scripts/build-static.mjs
|
||
tests/node/verify_linuxcnc_task_hal_runtime.mjs
|
||
tests/node/verify_full_execution_boundary.mjs
|
||
Feature:
|
||
Connects the task/motion/HAL WASM runtime to the Web simulator boundary.
|
||
Machine-file staging now emits a task/HAL session descriptor. The Web runtime
|
||
can init/stage/open files, send task commands, run deterministic task/servo
|
||
cycles, read task/motion/HAL status, and map `motion.program-line` plus
|
||
`motion.switchkins-type` back into gmoccapy current line, DRO, RTCP state, and
|
||
diagnostics. Full boundary promotion now depends on task runtime, motion
|
||
runtime, HAL runtime, HAL sync, and task/HAL cycle artifact evidence.
|
||
LinuxCNC references:
|
||
src/emc/task/task.hh
|
||
src/emc/task/emctask.cc
|
||
src/emc/task/emctaskmain.cc
|
||
src/emc/task/taskintf.cc
|
||
src/emc/task/emccanon.cc
|
||
src/emc/nml_intf/emc.hh
|
||
src/emc/motion/motion.h
|
||
src/emc/motion/command.c
|
||
src/emc/motion/control.c
|
||
src/hal/hal_lib.c
|
||
src/hal/hal_priv.h
|
||
src/hal/components/threads.c
|
||
Boundary:
|
||
taskHalBoundary=linuxcnc_task_motion_hal_wasm_simulation_runtime
|
||
nativeTaskReady=true for Web simulation boundary
|
||
nativeHalSyncReady=true for Web simulation boundary
|
||
fullLinuxCncProgramExecutionReady=true when kinematics/interpreter/machine-file-remap/TP/task-HAL gates pass
|
||
hardwareDrive=false
|
||
hostRealtimeKernel=false
|
||
externalUserMProcessReady=false
|
||
toolDbProcessReady=false
|
||
Tests:
|
||
bash wasm-port/tools/build_task_hal_wasm.sh
|
||
bash wasm-port/tools/verify_task_hal_source_manifest.sh
|
||
bash wasm-port/tests/native/verify_task_hal_phase0.sh
|
||
bash wasm-port/tests/native/probe_trt_task_hal_runtime.sh
|
||
bash wasm-port/tests/wasm/node/verify_hal_runtime.sh
|
||
bash wasm-port/tests/wasm/node/verify_motion_hal_sync.sh
|
||
bash wasm-port/tests/wasm/node/verify_task_hal_wasm.sh
|
||
bash wasm-port/tests/wasm/node/verify_task_hal_sdk.sh
|
||
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
|
||
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_task_hal_wasm_build=ok
|
||
task_hal_source_manifest_ready=1
|
||
task_hal_phase0_native_probe_gate=ok
|
||
native_probe_status=ready_disabled_by_default
|
||
hal_runtime_registry=ok
|
||
motion_hal_sync_smoke=ok
|
||
linuxcnc_task_runtime_smoke=ok
|
||
linuxcnc_task_hal_sdk=ok
|
||
linuxcnc_task_hal_runtime_smoke=ok
|
||
task_hal_machine_file_smoke=ok
|
||
switchkins_remap_hal_sync_smoke=ok
|
||
browser_task_hal_worker_smoke=ok
|
||
gmoccapy_static_build=ok
|
||
gmoccapy_shell_smoke=ok
|
||
gmoccapy_dist_smoke=ok
|
||
Remaining risk:
|
||
The promoted boundary is deterministic Web simulation only. It does not run
|
||
a host LinuxCNC realtime kernel, hardware IO, Mesa/parallel-port drivers,
|
||
arbitrary external user-M processes, or the full tool DB process.
|
||
Next:
|
||
hardware_realtime_external_processes_if_required
|
||
```
|
||
|
||
## 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
|
||
```
|
||
|
||
## 21. M18 追溯记录
|
||
|
||
```text
|
||
Batch: M18-native-task-hal-source-and-artifact-audit
|
||
Date: 2026-06-22 CST
|
||
Files changed:
|
||
.gitignore
|
||
app/package.json
|
||
app/src/runtime/native-task-hal-audit.js
|
||
tests/node/verify_native_task_hal_audit.mjs
|
||
docs/development-continuation.md
|
||
docs/program-implementation-guide.md
|
||
docs/traceability-matrix.md
|
||
Feature:
|
||
Adds a machine-readable readiness audit for the native task/HAL source and
|
||
artifact boundary. The audit consumes task/HAL source manifest evidence,
|
||
default non-exclusive TRT native probe evidence, full execution boundary
|
||
readiness, and task/HAL runtime status, then writes
|
||
build/readiness/native-task-hal-readiness.json.
|
||
LinuxCNC references:
|
||
wasm-port/tools/task-hal-source-manifest.txt
|
||
wasm-port/tests/native/probe_trt_task_hal_runtime.sh
|
||
src/emc/task/emctaskmain.cc
|
||
src/emc/motion/control.c
|
||
src/hal/hal_lib.c
|
||
Boundary:
|
||
webSimulation.promotionScope=web_simulation_only
|
||
nativeTaskReady=true for Web simulation boundary only
|
||
nativeHalSyncReady=true for Web simulation boundary only
|
||
hardwareDrive=false
|
||
hostRealtimeKernel=false
|
||
externalUserMProcessReady=false
|
||
toolDbProcessReady=false
|
||
Tests:
|
||
node web-rtcp-5axis-sim-plan/tests/node/verify_native_task_hal_audit.mjs
|
||
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
|
||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
|
||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh
|
||
Result:
|
||
native_task_hal_source_artifact_audit=ok
|
||
task_hal_web_simulation_boundary_consistent=1
|
||
native_task_hal_host_probe_status=ready_disabled_by_default
|
||
hardware_drive=0
|
||
host_realtime_kernel=0
|
||
external_user_m_process_ready=0
|
||
tool_db_process_ready=0
|
||
promotion_scope=web_simulation_only
|
||
Remaining risk:
|
||
The readiness artifact does not execute host realtime LinuxCNC or hardware IO.
|
||
It intentionally keeps external user-M process and tool DB process readiness
|
||
false.
|
||
Next:
|
||
M19-linuxcnc-source-program-case-coverage
|
||
```
|
||
|
||
## 22. M19 追溯记录
|
||
|
||
```text
|
||
Batch: M19-linuxcnc-source-program-case-coverage
|
||
Date: 2026-06-22 CST
|
||
Files changed:
|
||
app/package.json
|
||
app/src/runtime/linuxcnc-interpreter-runtime.js
|
||
tests/node/verify_real_linuxcnc_5axis_program_cases.mjs
|
||
tests/browser/gmoccapy_shell_smoke.html
|
||
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_tp_wasm.c
|
||
docs/development-continuation.md
|
||
docs/program-implementation-guide.md
|
||
docs/traceability-matrix.md
|
||
Feature:
|
||
Adds a real LinuxCNC TRT source-program case gate. The gate covers staged
|
||
source guards for boat, impeller, xyzac switchkins, and xyzbc switchkins demo
|
||
programs; validates direct interpreter canonical motion and LinuxCNC TP
|
||
samples where the source file is directly executable; and validates
|
||
machine-file staging/remap readiness for subroutine-entry demo files.
|
||
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/xyzac_switchkins_test_1.ngc
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_2.ngc
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins_test_3.ngc
|
||
configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc
|
||
src/emc/tp/tp.c
|
||
Boundary:
|
||
sourceProgramBoundary=linuxcnc_vendored_5axis_gcode_source_file
|
||
toolpathPreviewBoundary=linuxcnc_interpreter_canonical_motion
|
||
toolExecutionTraceBoundary=linuxcnc_tp_samples_or_task_motion_hal_feedback
|
||
threejsGeneratedToolpathSemantics=forbidden
|
||
fixtureToolpathFallbackPromoted=false
|
||
Tests:
|
||
source /home/cnc/emsdk/emsdk_env.sh >/dev/null && bash wasm-port/tools/build_tp_wasm.sh
|
||
bash wasm-port/tests/wasm/node/verify_tp_wasm.sh
|
||
node web-rtcp-5axis-sim-plan/tests/node/verify_real_linuxcnc_5axis_program_cases.mjs
|
||
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
|
||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
|
||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh
|
||
Result:
|
||
linuxcnc_source_program_case_count=8
|
||
all_cases_program_preview_points=ok
|
||
all_cases_executed_path_points=ok_after_run_or_step
|
||
all_cases_toolpath_preview_source=linuxcnc_interpreter_canonical_motion
|
||
all_cases_tool_execution_trace_source=linuxcnc_tp_samples_or_task_motion_hal_feedback
|
||
all_switchkins_cases_rtcp_state_changes_verified=1
|
||
all_cases_source_guard=linuxcnc_vendored_5axis_gcode_source_file
|
||
fixture_toolpath_fallback_not_promoted=1
|
||
real_linuxcnc_5axis_program_cases_smoke=ok
|
||
Remaining risk:
|
||
`xyzac_switchkins.ngc` and `xyzbc_switchkins.ngc` are subroutine-entry demo
|
||
files; direct interpreter execution without staged subroutine context still
|
||
has zero canonical motion, so they remain verified through source guard and
|
||
machine-file remap staging rather than direct single-file preview.
|
||
Next:
|
||
M20-threejs-tool-execution-quality
|
||
```
|
||
|
||
## 23. M20 Three.js 显示质量追溯记录
|
||
|
||
```text
|
||
Batch: M20-threejs-tool-execution-quality
|
||
Date: 2026-06-22 CST
|
||
Files changed:
|
||
app/src/visualization/five-axis-scene.js
|
||
tests/browser/gmoccapy_shell_smoke.html
|
||
docs/development-continuation.md
|
||
docs/program-implementation-guide.md
|
||
docs/traceability-matrix.md
|
||
Feature:
|
||
Adds program-preview and tool-execution display quality gates to Three.js.
|
||
The scene now draws rapid/feed/arc layers, the executed TP/task trace, and
|
||
the current segment highlight while fitting the camera to real LinuxCNC
|
||
source-program bounds.
|
||
LinuxCNC references:
|
||
LinuxCNC interpreter canonical motion events
|
||
LinuxCNC TP queue timing samples
|
||
task/motion/HAL runtime feedback snapshots
|
||
Boundary:
|
||
threejsProgramPreviewMode=program-preview-and-tool-execution
|
||
toolpathPreviewBoundary=linuxcnc_interpreter_canonical_motion
|
||
toolExecutionTraceBoundary=linuxcnc_tp_samples_or_task_motion_hal_feedback
|
||
threejsGeneratedToolpathSemantics=forbidden
|
||
Tests:
|
||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
|
||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh
|
||
Result:
|
||
threejs_program_preview_mode=program-preview-and-tool-execution
|
||
threejs_toolpath_preview_source=linuxcnc_interpreter_canonical_motion
|
||
threejs_tool_execution_trace_source=linuxcnc_tp_samples_or_task_motion_hal_feedback
|
||
threejs_path_fit_bounds=ok
|
||
threejs_current_segment_highlight=ok
|
||
threejs_rapid_feed_visual_distinction=ok
|
||
threejs_no_gcode_semantics_generation=ok
|
||
threejs_canvas_nonblank_desktop=ok
|
||
threejs_canvas_nonblank_mobile=ok
|
||
Remaining risk:
|
||
The visual distinction is display-only and remains limited to canonical/TP
|
||
segment data already emitted by LinuxCNC runtimes. It does not add lookahead,
|
||
blending, planner semantics, or hardware execution semantics in Three.js.
|
||
Next:
|
||
M21-public-http-opfs-degradation
|
||
```
|
||
|
||
## 24. M21 公网 OPFS 降级追溯记录
|
||
|
||
```text
|
||
Batch: M21-public-http-opfs-degradation
|
||
Date: 2026-06-22 CST
|
||
Files changed:
|
||
app/src/runtime/five-axis-session.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
|
||
docs/development-continuation.md
|
||
docs/program-implementation-guide.md
|
||
docs/traceability-matrix.md
|
||
Feature:
|
||
Adds explicit storage capability detection and current-page memory fallback
|
||
for public HTTP/IP deployments where OPFS is unavailable. Session save/restore
|
||
and machine-file staging continue inside the current page lifecycle, while UI
|
||
diagnostics report OPFS unavailable and the fallback reason.
|
||
LinuxCNC references:
|
||
LinuxCNC machine-file staging remains based on vendored TRT source/config
|
||
files; storage fallback does not alter interpreter, TP, task/HAL, or
|
||
kinematics semantics.
|
||
Boundary:
|
||
opfsAvailable=false when browser capability is missing or forced unavailable
|
||
fallbackMode=memory-fallback
|
||
memoryFallbackPersistence=current_page_lifecycle_only
|
||
nonOpfsWorkflowsStillPass=true
|
||
Tests:
|
||
node web-rtcp-5axis-sim-plan/tests/node/verify_machine_file_staging.mjs
|
||
node web-rtcp-5axis-sim-plan/tests/node/verify_five_axis_session.mjs
|
||
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
|
||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
|
||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh
|
||
Result:
|
||
opfs_unavailable_detected=1
|
||
opfs_fallback_current_page_lifecycle_only=1
|
||
opfs_dependent_actions_report_clear_fallback_message=1
|
||
non_opfs_workflows_still_pass=1
|
||
public_http_smoke_no_uncaught_exception=1
|
||
Remaining risk:
|
||
Memory fallback is not persistent across reloads. True OPFS persistence still
|
||
requires a secure context and browser OPFS support.
|
||
Next:
|
||
none_from_development_continuation
|
||
```
|
||
|
||
## 25. M22 Host/native 边界可见性追溯记录
|
||
|
||
```text
|
||
Batch: M22-host-native-boundary-visibility
|
||
Date: 2026-06-22 CST
|
||
Files changed:
|
||
app/src/ui/gmoccapy-shell.js
|
||
tests/browser/gmoccapy_shell_smoke.html
|
||
docs/development-continuation.md
|
||
docs/traceability-matrix.md
|
||
Feature:
|
||
Adds an explicit Host/native diagnostics row in gmoccapy info tabs so the
|
||
promoted Web simulation task/motion/HAL boundary remains visibly separated
|
||
from hardware drive, host realtime kernel, external user-M process, and tool
|
||
DB process readiness.
|
||
LinuxCNC references:
|
||
No new LinuxCNC source semantics are introduced. The change displays existing
|
||
full execution boundary fields emitted by the LinuxCNC task/motion/HAL Web
|
||
simulation runtime audit.
|
||
Boundary:
|
||
hardwareDrive=false
|
||
hostRealtimeKernel=false
|
||
externalUserMProcessReady=false
|
||
toolDbProcessReady=false
|
||
promotionScope=web_simulation_only
|
||
Tests:
|
||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
|
||
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh
|
||
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
|
||
Result:
|
||
host_native_boundary_ui=ok
|
||
hardware_drive_false_visible=1
|
||
host_realtime_false_visible=1
|
||
external_user_m_false_visible=1
|
||
tool_db_false_visible=1
|
||
Remaining risk:
|
||
This is a visibility and regression guard only. It does not implement host
|
||
realtime kernel, hardware IO, external user-M process, or native tool DB
|
||
process support.
|
||
Next:
|
||
none_from_development_continuation
|
||
```
|