Files
cnc_wams/web-rtcp-5axis-sim-plan/docs/traceability-matrix.md

73 KiB
Raw Blame History

5 轴数控系统 Web 仿真实现追溯文档

生成时间2026-06-20 CST

1. 目的

本文件用于追溯后续实现中的每个主要功能来自哪里、参考了哪些 LinuxCNC 源文件/配置/图片、属于什么边界、如何验证。

追溯原则:

界面形态可参考 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 图片

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

本项目副本:

assets/reference/linuxcnc-gui/

Python GUI

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

使用方式:

UI/visualization reference only

5 轴配置

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

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 轴运动学源码

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 executionremap/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=falsebrowser/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/tool-DB/user-M evidenceWeb simulation boundary 可提升,仍明确 hardwareDrive=falsehostRealtimeKernel=falsehostExternalUserMProcessReady=falsehostToolDbProcessReady=falsearbitraryUserMExecution=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 web_simulation_only 读取 staged tool.tbl,支持查询/编辑/保存刀具号、刀长、刀径、刀袋,并接入 Tn/M6/G43/M61 仿真状态host tool DB process 仍为 false
external user-M process controlled_web_simulation_only 只允许白名单 M128/M129/M428/M429/M430 输出 HAL/state 事件;任意 host user-M 脚本和系统进程执行仍为 false
native hard realtime out_of_scope Web 仿真不实现

5. 每批开发追溯记录模板

后续每批完成后追加:

Batch:
Date:
Files changed:
Feature:
LinuxCNC references:
Boundary:
Tests:
Result:
Remaining risk:
Next:

6. 首批追溯记录

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 追溯记录

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 追溯记录

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 frameTCP/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 placeholderM3 需要接入真实 canvas scene 并消费 rtcpFrame。
Next:
  M3-threejs-preview

9. M3 追溯记录

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刀轴消费 toolAxisVectorRTCP 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 追溯记录

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 追溯记录

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 追溯记录

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 追溯记录

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 追溯记录

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 eventsRUN/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 追溯记录

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 selectorprofile 切换后重载对应 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 追溯记录

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 追溯记录

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 追溯记录

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 追溯记录

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 追溯记录

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 追溯记录

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 追溯记录

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 追溯记录

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 追溯记录

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 追溯记录

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 追溯记录

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 显示质量追溯记录

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 降级追溯记录

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 边界可见性追溯记录

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:
  M23 adds controlled tool DB and user-M Web simulation while keeping host
  external process readiness false.

26. M23 受控 tool DB / user-M Web 仿真追溯记录

Batch: M23-controlled-tool-db-user-m-web-simulation
Date: 2026-07-01 CST
Files changed:
  app/src/runtime/tool-db-simulation.js
  app/src/runtime/controlled-user-m-simulation.js
  app/src/runtime/full-execution-boundary.js
  app/src/runtime/native-task-hal-audit.js
  app/src/state/store.js
  app/src/main.js
  app/src/ui/gmoccapy-shell.js
  app/package.json
  tests/node/verify_tool_db_web_simulation.mjs
  tests/node/verify_tool_db_user_m_simulation.mjs
  tests/node/verify_full_execution_boundary.mjs
  tests/node/verify_machine_file_staging.mjs
  tests/node/verify_native_task_hal_audit.mjs
  tests/browser/gmoccapy_shell_smoke.html
Feature:
  Implements the previously excluded red-box external user-M/tool DB capability
  as a controlled Web/WASM simulation boundary. The runtime reads staged
  LinuxCNC tool tables, models CANON_TOOL_TABLE fields, preserves LinuxCNC
  non-random changer idx versus pocketno semantics, keeps idx=0 as the spindle
  pocket, simulates tool prepare/load/read_tool_inputs/offset state, saves edits
  through OPFS or memory fallback, and converts whitelisted user-M/remap actions
  into traceable HAL/state events without executing arbitrary host scripts.
LinuxCNC references:
  linuxcnc/src/emc/task/taskclass.cc:281
  linuxcnc/src/emc/task/taskclass.cc:425
  linuxcnc/src/emc/task/taskclass.cc:482
  linuxcnc/src/emc/task/taskclass.cc:527
  linuxcnc/src/emc/task/taskclass.cc:572
  linuxcnc/src/emc/task/taskclass.cc:614
  linuxcnc/src/emc/task/taskclass.hh
  linuxcnc/src/emc/tooldata/tooldata_common.cc:70
  linuxcnc/src/emc/tooldata/tooldata_common.cc:365
  linuxcnc/src/emc/nml_intf/emctool.h:29
  linuxcnc/src/emc/nml_intf/emc.hh
  linuxcnc/src/emc/rs274ngc/interp_convert.cc:6236
  linuxcnc/src/emc/rs274ngc/interp_find.cc:716
  linuxcnc/src/emc/task/emctask.cc
  linuxcnc/src/emc/task/emccanon.cc
  linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.tbl
  linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.tbl
  linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/428remap.ngc
  linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/429remap.ngc
  linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/remap_subs/430remap.ngc
Boundary:
  toolDbProcessReady=true for web_simulation_only
  externalUserMProcessReady=true for web_simulation_only
  toolDbProcessScope=web_simulation_only
  externalUserMProcessScope=web_simulation_only
  hostToolDbProcessReady=false
  hostExternalUserMProcessReady=false
  arbitraryUserMExecution=false
  hostProcessExecution=false
Tests:
  node web-rtcp-5axis-sim-plan/tests/node/verify_tool_db_web_simulation.mjs
  node web-rtcp-5axis-sim-plan/tests/node/verify_tool_db_user_m_simulation.mjs
  node web-rtcp-5axis-sim-plan/tests/node/verify_full_execution_boundary.mjs
  node web-rtcp-5axis-sim-plan/tests/node/verify_machine_file_staging.mjs
  node web-rtcp-5axis-sim-plan/tests/node/verify_native_task_hal_audit.mjs
Result:
  tool_db_web_simulation_smoke=ok
  staged_tool_tbl_loaded=1
  tool_db_query_edit_save=1
  tool_db_t_m6_g43_state=1
  tool_db_memory_fallback_save=1
  host_tool_db_process=0
  tool_db_user_m_simulation_smoke=ok
  tool_db_process_ready_web_simulation_only=1
  external_user_m_process_ready_web_simulation_only=1
  arbitrary_user_m_blocked=1
  host_process_execution=0
Remaining risk:
  This does not implement LinuxCNC DB_PROGRAM, random changer semantics, native
  host tool DB services, arbitrary user-M script execution, or hardware IO.
Next:
  Keep whitelist entries and tool-table fields traceable to staged LinuxCNC
  source assets when new machine profiles are added.

27. M24 XYZBC TRT kinematics parity proof 追溯记录

Batch: M24-xyzbc-trt-kinematics-parity
Date: 2026-07-01 CST
Files changed:
  app/src/runtime/rtcp-frame.js
  app/src/visualization/five-axis-scene.js
  tests/node/verify_linuxcnc_kinematics_runtime.mjs
  tests/node/verify_rtcp_store.mjs
  docs/development-continuation.md
  docs/linuxcnc-parity-matrix.md
  docs/program-implementation-guide.md
Feature:
  Completes the next five-axis parity step for the XYZBC table rotary tilting
  profile. The Web RTCP frame now preserves B in tcpPose for both fixture and
  LinuxCNC kinematics frames, the Three.js diagnostic dataset exposes the same
  B-axis TCP pose, and the runtime smoke proves both XYZAC and XYZBC TRT WASM
  modules in switchkins TCP mode.
LinuxCNC references:
  linuxcnc/src/emc/kinematics/xyzac-trt-kins.c
  linuxcnc/src/emc/kinematics/xyzbc-trt-kins.c
  linuxcnc/src/emc/kinematics/trtfuncs.c
  linuxcnc/src/emc/kinematics/switchkins.c
  linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini
  linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
Boundary:
  semanticBoundary=linuxcnc_kinematics_wasm_c_abi
  scope=node_direct_web_runtime_proof
  hardwareDrive=false
  hostRealtimeKernel=false
Tests:
  node --check app/src/runtime/rtcp-frame.js
  node --check app/src/visualization/five-axis-scene.js
  node tests/node/verify_linuxcnc_kinematics_runtime.mjs
  node tests/node/verify_rtcp_store.mjs
Result:
  xyzac_trt_kinematics_runtime=ok
  xyzbc_trt_kinematics_runtime=ok
  linuxcnc_kinematics_runtime_smoke=ok
  xyzbc_b_axis_tcp_pose_preserved=1
  rtcp_store_smoke=ok
Remaining risk:
  This is still browser/Web runtime parity. It does not promote hardware IO,
  host realtime kernel execution, or native LinuxCNC task/HAL processes.
Next:
  Keep XYZBC browser smoke evidence aligned with B-axis tcpPose when expanding
  UI diagnostics or adding additional TRT machine profiles.

28. M25 gmoccapy XYZAC TRT RTCP 页面对标追溯记录

Batch: M25-gmoccapy-xyzac-trt-rtcp-parity
Date: 2026-07-01 CST
Files changed:
  app/src/profiles/gmoccapy-xyzac-trt.js
  app/src/profiles/index.js
  app/src/profiles/source-reference-map.js
  app/src/profiles/xyzac-trt.js
  app/src/runtime/linuxcnc-machine-file-staging.js
  app/src/runtime/linuxcnc-ini-runtime.js
  app/src/state/store.js
  app/src/main.js
  app/scripts/build-static.mjs
  app/package.json
  tests/node/verify_gmoccapy_xyzac_trt_parity.mjs
  tests/browser/gmoccapy_shell_smoke.html
  docs/gmoccapy-xyzac-trt-rtcp-verification-evaluation.md
  docs/linuxcnc-parity-matrix.md
  docs/program-implementation-guide.md
  docs/development-continuation.md
  wasm-port/tools/source-manifest.txt
  wasm-port/vendor/linuxcnc/configs/sim/gmoccapy/...
Feature:
  Adds a gmoccapy-specific XYZAC table-rotary-tilting profile that maps the
  LinuxCNC gmoccapy non-trivial kinematics sample into the Web page. The profile
  preserves DISPLAY=gmoccapy, OPEN_FILE examples/impeller-7bl-xyzac.ngc,
  JOG_AXES=XYZC, M6/M61 gmoccapy remaps, POSTGUI tool/spindle HAL pins, gmoccapy
  macros, tool table, and fixed TRT default TCP semantics.
LinuxCNC references:
  linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/xyzac-trt.ini
  linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/postgui.hal
  linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/xyzac-trt.tbl
  linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/xyzac-trt_cmds.hal
  linuxcnc/configs/sim/gmoccapy/non_trivial_kinematics/table-rotary-tilting/examples/*.ngc
  linuxcnc/configs/sim/gmoccapy/macros/change_g43.ngc
  linuxcnc/configs/sim/gmoccapy/macros/settool_g43.ngc
  linuxcnc/src/emc/kinematics/xyzac-trt-kins.c
  linuxcnc/src/emc/kinematics/trtfuncs.c
  linuxcnc/src/emc/kinematics/switchkins.c
Boundary:
  profileId=gmoccapy-xyzac-trt
  semanticBoundary=linuxcnc_gmoccapy_nontrivial_xyzac_trt_profile_source_map
  fixedTrtDefault=true
  defaultKinsType=tcp-xyzac
  rtcpState=on
  sourceGuard=profile_specific_linuxcnc_gmoccapy_examples_only
  hardwareDrive=false
  hostRealtimeKernel=false
  nativeGtkGmoccapy=false
Tests:
  node tests/node/verify_gmoccapy_xyzac_trt_parity.mjs
  node tests/node/verify_machine_file_staging.mjs
  node tests/node/verify_linuxcnc_ini_runtime.mjs
  node tests/node/verify_linuxcnc_parity_matrix.mjs
  npm --prefix app run smoke:node
  npm --prefix app run smoke
  npm --prefix app run build
Result:
  gmoccapy_xyzac_trt_parity_smoke=ok
  machine_file_staging_smoke=ok
  linuxcnc_ini_runtime_smoke=ok
  linuxcnc_parity_matrix_smoke=ok
  gmoccapy_shell_smoke=ok
  gmoccapy_dist_smoke=ok
  gmoccapy_static_build=ok
Remaining risk:
  This proves the Web page and Web/WASM simulation boundary. It does not port
  native GTK gmoccapy, host HAL shared memory, hardware IO, host realtime kernel,
  arbitrary host user-M scripts, or native host tool DB processes.
Next:
  If native gmoccapy or host realtime capability is required, add a separate
  host/native validation layer rather than promoting this Web simulation proof.