# 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 | | 程序执行当前行显示 | `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.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 | | 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 / 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 | `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. 源文件追溯清单 ### 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/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 ```