# 03-推进台账 ## 2026-07-05 18:57 EDT - Pause 按钮 LinuxCNC AXIS 严格对标修复轮次 ### 本轮目标 根据用户反馈“Pause 仍然不好用”,以 `/home/mes123456/cnc_wams/linuxcnc` 源程序中的 `xyzbc-trt`/AXIS 行为为对标基线,严格修复 Web AXIS 工具栏 Pause 按钮。 ### 已做事项 - 读取 LinuxCNC 源码: - `/home/mes123456/cnc_wams/linuxcnc/share/axis/tcl/axis.tcl` - `/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py` - 确认 LinuxCNC AXIS 行为: - 菜单 `_Pause` 调用 `task_pause`,菜单 `Resume` 调用 `task_resume`。 - 工具栏 `.toolbar.program_pause` 不是独立 pause-only,而是调用 `task_pauseresume`。 - `task_pauseresume` 在 `s.paused` 时发送 `AUTO_RESUME`,否则在 interpreter 非 idle 时发送 `AUTO_PAUSE`。 - 修改 Web AXIS UI: - 工具栏 `tbtn_pause` 恢复为单一 `pause-resume` 动作,等价 LinuxCNC `task_pauseresume`。 - 移除独立工具栏 Resume 按钮对主路径的依赖;菜单仍保留独立 Pause/Resume。 - 更新按钮来源矩阵,记录 `axis.py:2433-2443 / axis.tcl:543-549`。 - 修改 Web 状态机: - 新增 `PAUSE_RESUME`,根据当前 paused/interpState 在 `PAUSE` 与 `RESUME` 间切换。 - `PAUSE_RESUME` 发出的 pause 标记 `source="pauseresume"`,与菜单 Pause 分支区分。 - `linuxcnc-task-policy.js` 中普通菜单 Pause 收紧为 AUTO 且 interpreter reading/waiting;工具栏 `pauseresume` 对标 AXIS,允许 AUTO/MDI 且 interpreter 非 idle。 - 保留上轮修复的 task/HAL 异步竞态防护:RUN 准备阶段可立即暂停,停止 loop 时废弃旧 tick,session 初始化不覆盖 paused。 - 更新 Node/browser smoke: - Node 增加 `pause-resume` 来源矩阵和 reducer 级暂停/继续切换断言。 - Browser 增加工具栏 `task_pauseresume` 真实点击断言:暂停、继续、再暂停、Step 后继续,并保留 Run 后立即 Pause 的异步保持断言。 ### 验证情况 ```text node --check store.js/linuxcnc-task-policy.js/axis-shell.js/verify_xyzbc_trt_web_app.mjs = ok xyzbc_trt_web_app_smoke=ok xyzbc_trt_browser_smoke=ok gmoccapy_static_build=ok 构建后 xyzbc_trt_browser_smoke=ok native.status=ok web.status=ready-for-wasm-runtime compare.status=pass compare.summary.checkCount=60 compare.summary.passCount=60 compare.summary.failCount=0 compare.summary.blockers=[] compare.requiredImprovements=[] ``` ### 结论 Pause 已按 LinuxCNC AXIS 源码恢复为工具栏单按钮 `task_pauseresume` 语义:运行中点击暂停,暂停中点击继续;菜单 Pause/Resume 仍保持独立命令。当前 native/Web/compare 复验通过,仍为 `60/60 pass`。 ## 2026-07-05 18:18 EDT - 按 working 完成全部任务复验轮次 ### 本轮目标 按用户要求“按 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working` 完成全部任务”,复核当前 `working` 任务矩阵、执行 P-002 全量复验,并确认 T-001 到 T-077 是否仍保持完成状态。 ### 已做事项 - 读取 `working/README.md`、`04-任务矩阵.md`、`11-LinuxCNC源码与真实执行严格对标任务.md`、`12-20260704-真实执行复验与缺失功能工作计划.md`,确认当前任务矩阵 T-001 到 T-077 均标记为完成。 - 使用 `rg`/Node 检查当前 evidence 摘要和文档中的 fail/blocker/required improvement 线索,确认最新硬检查应以 `working/evidence/compare-xyzbc-trt-evidence.json` 为准。 - 重新执行 Web evidence、native LinuxCNC 真实执行采集、native/Web compare、Node smoke、browser smoke 和 build。 - 未发现需要修改源码的失败点;本轮仅刷新 evidence 并补充 `working` 复验记录。 ### 验证情况 ```text native.status=ok native.collectedAt=2026-07-05T18:17:15-0400 native.executionMode=auto-run native.coverage=35/35 web.status=ready-for-wasm-runtime web.collectedAt=2026-07-05T22:17:16.154Z web.coverage=49/49 web.blockers=[] compare.status=pass compare.comparedAt=2026-07-05T22:17:25.931Z compare.summary.checkCount=60 compare.summary.passCount=60 compare.summary.failCount=0 compare.summary.blockers=[] compare.requiredImprovements=[] xyzbc_trt_web_app_smoke=ok xyzbc_trt_browser_smoke=ok gmoccapy_static_build=ok ``` ### 结论 当前 `working` 中 T-001 到 T-077 保持完成状态。按 P-002 重新生成并对比 native/Web evidence 后,compare 仍为 `60/60 pass`,没有新增 fail、blocker 或 required improvement;除实体硬件接入外,Web 仿真项目仍保持与 LinuxCNC `xyzbc-trt` 源码和真实执行双基线对标。 ## 2026-07-05 18:08 EDT - 用户要求完全对标复验与文档修订轮次 ### 本轮目标 按用户要求,确认 Web 仿真系统 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan` 除硬件相关外,在仿真所有方面完全对标 LinuxCNC 源程序中的 `5axis/table-rotary-tilting/xyzbc-trt` 配置,并完善 `working` 文档后按文档执行复验。 ### 已做事项 - 确认用户所述“linuxcnc源程序”的本工作区实际路径为 `/home/mes123456/cnc_wams/linuxcnc`。 - 定位 native 权威配置和源码范围: - `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini` - `xyzbc-trt.xml`、`switchkins_postgui.hal`、`xyzbc-trt_cmds.hal` - `remap_subs/*.ngc`、`demos/xyzbc_switchkins.ngc`、`demos/boat-xyzbc.ngc` - `xyzbc-trt.tbl`、`xyzbc.var` - `src/emc/kinematics/xyzbc-trt-kins.c`、`src/emc/kinematics/trtfuncs.c` - `src/hal/user_comps/vismach/xyzbc-trt-gui.py` - `rtlib/xyzbc-trt-kins.so`、`bin/axis`、`bin/xyzbc-trt-gui`、`scripts/rip-environment` - 重新执行 Web evidence、native LinuxCNC 真实执行采集、native/Web compare、Node smoke、browser smoke 和 build。 - 更新 `working/README.md`、`01-项目功能内容.md`、`02-项目程序开发详细步骤.md`、`04-任务矩阵.md`、`05-验收证据.md`,明确硬件排除边界、最新复验结果和后续强制复验规则。 ### 验证情况 ```text native.status=ok native.collectedAt=2026-07-05T18:07:01-0400 native.coverage=35/35 native.executionMode=auto-run web.status=ready-for-wasm-runtime web.collectedAt=2026-07-05T22:06:45.346Z web.coverage=49/49 web.blockers=[] compare.status=pass compare.comparedAt=2026-07-05T22:07:13.768Z compare.summary.checkCount=60 compare.summary.passCount=60 compare.summary.failCount=0 compare.summary.blockers=[] compare.requiredImprovements=[] gmoccapy_static_build=ok xyzbc_trt_web_app_smoke=ok xyzbc_trt_browser_smoke=ok ``` ### 结论 截至 2026-07-05 18:08 EDT,Web 仿真项目在非硬件仿真范围内继续保持与 LinuxCNC `xyzbc-trt` 源码和真实执行双基线完全对标;本轮没有发现新增缺失功能、fail、blocker 或 required improvement。 ## 2026-07-04 18:22 EDT - P-002 强制复验收口轮次 ### 本轮目标 根据 `working/12-20260704-真实执行复验与缺失功能工作计划.md` 的 P-002 规则,对当前工作区重新执行 native/Web/compare/smoke 复验,确认 `working` 中任务是否仍保持完成状态。 ### 已做事项 - 重新执行 Web evidence: - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web` - 输出 `working/evidence/web-xyzbc-trt-evidence.json`。 - 重新执行 native LinuxCNC 采集: - `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py --run --timeout 90` - 输出 `working/evidence/native-xyzbc-trt-evidence.json`。 - 重新执行 native/Web compare: - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare` - 输出 `working/evidence/compare-xyzbc-trt-evidence.json`。 - 重新执行 Node smoke 和 browser smoke。 - 更新 `working/README.md` 与 `working/05-验收证据.md`,追加本轮复验结果。 ### 验证情况 ```text compare.status=pass compare.summary.checkCount=60 compare.summary.passCount=60 compare.summary.failCount=0 compare.summary.blockers=[] compare.requiredImprovements=[] smoke:node=ok smoke:browser=ok ``` ### 结论 当前 `working` 任务保持收口状态:T-001 到 T-076 均为完成,P-002 变更后强制复验通过。本轮没有发现新增缺失功能,也没有新增 fail/blocker 处置项。 ## 2026-07-04 18:12 EDT - 真实执行复验与缺失功能工作计划轮次 ### 本轮目标 根据用户要求,重新通过真实执行 native LinuxCNC `xyzbc-trt` 与 Web 仿真项目,分析仿真项目相对 LinuxCNC 源程序是否仍存在缺失功能,并把工作计划写入 `working` 任务文档。 ### 已做事项 - 重新执行 native 采集: - `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 .../tools/collect-native-xyzbc-trt-evidence.py --run --timeout 90` - 输出 `working/evidence/native-xyzbc-trt-evidence.json`。 - 重新执行 Web 采集: - `npm --prefix .../app run evidence:web` - 输出 `working/evidence/web-xyzbc-trt-evidence.json`。 - 执行 Web Node smoke: - 输出 `xyzbc_trt_web_app_smoke=ok`。 - 执行 native/Web compare: - 输出 `compare_xyzbc_trt_status=pass`。 - 执行浏览器 smoke: - 输出 `xyzbc_trt_browser_smoke=ok`。 - 新增 `working/12-20260704-真实执行复验与缺失功能工作计划.md`。 - 更新 `working/README.md`、`04-任务矩阵.md`、`05-验收证据.md`,新增 T-076 和本轮证据摘要。 ### 验证情况 ```text native.status=ok native.executionMode=auto-run native.coverage=35/35 web.status=ready-for-wasm-runtime web.coverage=49/49 compare.status=pass compare.checkCount=60 compare.passCount=60 compare.failCount=0 compare.blockers=[] smoke:node=ok smoke:browser=ok ``` ### 结论 按 2026-07-04 18:12 EDT 重新生成的 native/Web/compare evidence,本轮未发现仿真项目相对 LinuxCNC `xyzbc-trt` 的新增缺失功能。后续工作计划转为固定当前 `60/60 pass` 证据、变更后强制复验,以及 fail/blocker 出现时按 compare 的 `requiredImprovements` 追踪处理。 ## 2026-07-04 17:57 EDT - T-051 到 T-075 源码/运行双基线实现与复验轮次 ### 本轮目标 完成 `working` 中新增的 LinuxCNC 源码与真实执行严格对标任务 T-051 到 T-075,把 native/Web/compare evidence 从原有路径与 G 代码过程对比扩展为源码 manifest、启动环境、完整 INI、HAL 图谱、运动学/remap/PyVCP/AXIS/Vismach、真实运行采样、WASM artifact 绑定、错误路径、性能预算和严格验收冻结的双基线检查。 ### 已做事项 - 修改 `tools/collect-native-xyzbc-trt-evidence.py`: - 新增 `sourceManifest`,直接从 `/home/mes123456/cnc_wams/linuxcnc` 采集 INI/HAL/XML/TBL/VAR/NGC/C/Python/rtlib/desktop 文件绝对路径、mtime、bytes、sha256、角色。 - 新增 `runtimeLaunch`、`iniFull`、`halGraph`、`kinematicsFormula`、`remapSemantics`、`pyvcpPostgui`、`axisUiSource`、`vismachStrict`、`servoTaskTiming`、`runtimeExecutionObserved`、`runtimeEvidenceClassification`、`reverseSourceIndex`、`performanceBudget`、`strictAcceptance` 等字段。 - 修正 native INI 全字段解析,保留重复 key,确保与 Web 逐行解析一致。 - 修改 `tools/collect-web-xyzbc-trt-evidence.mjs`: - 新增 Web staged 文件 sha256 manifest、完整 INI 字段、HAL/task 模型、WASM artifact sha256/source binding。 - 新增与 native 同名的严格验收字段,覆盖 Web staging hash parity、UI 行为、Vismach、错误路径、性能预算和验收冻结。 - 修改 `tools/compare-xyzbc-trt-evidence.mjs`: - 新增 `strictComparison`,覆盖 T-051 到 T-075。 - 在 compare JSON 顶层输出 `sourceManifestComparison`、`runtimeLaunchComparison`、`halGraphComparison`、`iniFullComparison`、`kinematicsFormulaComparison`、`uiBehaviorComparison`、`visualComparison`。 - 将总检查数扩展到 60 项。 - 更新 `working/04-任务矩阵.md`,T-051 到 T-075 全部标记为完成。 - 更新 `working/11-LinuxCNC源码与真实执行严格对标任务.md`,记录 T-051 到 T-075 已完成和最新 compare 摘要。 ### 验证情况 - `python3 -m py_compile web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py` 通过。 - `node --check web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-web-xyzbc-trt-evidence.mjs` 通过。 - `node --check web-rtcp-5axis-xyzbc-trt-sim-plan/tools/compare-xyzbc-trt-evidence.mjs` 通过。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web` 通过。 - `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py --run --timeout 80` 通过。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`。 ### 最新 compare 摘要 ```text status = pass summary.checkCount = 60 summary.passCount = 60 summary.failCount = 0 summary.blockers = [] summary.nativeStatus = ok summary.webStatus = ready-for-wasm-runtime ``` ### 结论 T-001 到 T-075 当前全部完成。T-051 到 T-075 已由源码/运行双基线 evidence 和 compare 硬检查覆盖,最新 `compare-xyzbc-trt-evidence.json` 为 60/60 pass 且无 blocker。 ## 2026-07-04 17:42 EDT - LinuxCNC 源码与真实执行严格对标任务整理轮次 ### 本轮目标 根据用户要求“严格完整地对标 `/home/mes123456/cnc_wams/linuxcnc` 作为 LinuxCNC `xyzbc-trt` 源码与真实执行”,整理新一轮任务,明确后续验收不能只依赖历史 Markdown、旧 evidence 或静态推导,必须以 LinuxCNC 源树与真实运行采样作为 native 权威基线。 ### 已做事项 - 复核 `working/README.md`、`04-任务矩阵.md` 和现有任务状态,确认 T-001 到 T-050 仍保持完成状态。 - 定位 `/home/mes123456/cnc_wams/linuxcnc` 中的 `xyzbc-trt` 权威源: - `configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini` - `xyzbc-trt.xml`、`switchkins_postgui.hal`、`xyzbc-trt_cmds.hal` - `xyzbc-trt.tbl`、`xyzbc.var` - `demos/xyzbc_switchkins.ngc`、`demos/boat-xyzbc.ngc` - `remap_subs/428remap.ngc`、`429remap.ngc`、`430remap.ngc`、`xyzbc_switchkins_sub.ngc`、`centering.ngc`、`helix_bc.ngc` - `src/emc/kinematics/xyzbc-trt-kins.c`、`src/emc/kinematics/trtfuncs.c` - `src/hal/user_comps/vismach/xyzbc-trt-gui.py` - `rtlib/xyzbc-trt-kins.so`、`bin/axis`、`bin/xyzbc-trt-gui`、`scripts/rip-environment` - `linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop` - 新增 `working/11-LinuxCNC源码与真实执行严格对标任务.md`,按源树权威清单、真实启动采集、INI/HAL 全量解析、运动学公式级验证、remap/switchkins 真实语义、AXIS/PyVCP/Vismach UI、真实执行采样、Web 复现与 compare 升级、截图视觉证据、回归门禁整理任务。 - 更新 `working/04-任务矩阵.md`,新增 T-051 到 T-075,全部标记为“待实现”。 - 更新 `working/README.md`,加入新文档索引和当前新增关注点。 - 使用 `rg` 复查 README、任务矩阵和新文档,确认 T-051 到 T-075、新文档索引和“待实现”状态可检索。 ### 新增任务摘要 - T-051 到 T-054:LinuxCNC 源树 manifest、真实启动入口、INI 全字段、HAL 图谱运行态。 - T-055 到 T-059:运动学源码公式、M428/M429/M430 remap、PyVCP/POSTGUI、AXIS UI、Vismach 变换树。 - T-060 到 T-067:servo/task 时间基准、真实解释器事件、Web staging hash、WASM artifact 绑定、task/HAL 全状态、限制联锁、tool/parameter、Ngcgui/示例程序。 - T-068 到 T-075:native/Web 同状态截图、错误路径、compare JSON 双基线升级、禁止静态推导冒充真实运行、一键复验、源码行反向索引、性能误差预算、严格验收冻结。 ### 结论 本轮只整理并落档新的严格完整对标任务,没有执行实现和复验。当前 `working` 的新状态是:T-001 到 T-050 已完成;T-051 到 T-075 为新一轮待实现任务。后续只有当 T-051 到 T-075 全部通过,并生成源码/运行双基线 evidence 与 compare 后,才能声明“严格完整对标 `/home/mes123456/cnc_wams/linuxcnc` 源码与真实执行”完成。 ## 2026-07-03 锥形刀尖方向修复轮次 ### 本轮目标 根据用户从截图反馈的问题:锥形刀尖方向与刀具刀杆方向不一致。修复 WebGL 刀具几何,使刀尖和刀杆共用同一实时刀轴方向。 ### 已做事项 - 修改 `app/src/visualization/five-axis-scene.js`: - 新增 `LOCAL_TOOL_AXIS=(0,0,1)` 和 `alignToolGlyphToAxis()`。 - 将 Vismach 参考模型中的刀杆 cylinder 与刀尖 cone 统一建模到本地 `+Z` 轴。 - 将 AXIS reference tool glyph 中的 holder 与 cone 同样统一到本地 `+Z` 轴。 - 取消 `toolHolder.lookAt(...)`,改为 `quaternion.setFromUnitVectors(LOCAL_TOOL_AXIS, toolAxisVector)` 对整个刀具组定向。 - 暴露 `canvas.dataset.threeToolGlyphAxis`,用于验证实际刀具几何方向。 - 修改 `tests/browser/xyzbc_trt_browser_smoke.html`: - 首屏断言存在 `threeToolGlyphAxis`。 - RUN 后断言 `threeToolGlyphAxis` 与 `state.toolAxisVector` 一致,防止刀尖/刀杆方向再次分离。 - 重新生成 `app/dist`。 - 生成截图证据: - `working/screenshots/web-tool-tip-axis-fixed-20260703T080358Z/running-helix-tool-tip-axis-fixed-canvas.png` - `working/screenshots/web-tool-tip-axis-fixed-20260703T080358Z/manifest.json` ### 验证情况 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`。 ### 结论 锥形刀尖和刀杆现在由同一个 `toolAxisVector` 定向。新 manifest 显示 `threeToolGlyphAxis={0.242,0.242,0.94}` 与运行样本 `toolAxisVector={0.2418447626,0.2418447626,0.9396926208}` 一致,截图中刀尖与刀杆沿同一倾斜刀轴排列。 ## 2026-07-03 真实 G 代码过程截图补充轮次 ### 本轮目标 接续上一轮,针对用户指出的“分析图片,要体现真实的 G 代码的真实执行过程”,把截图从只显示主程序入口,补强为能直接看到展开后的源文件、源行、调用栈、执行步骤、实时机床姿态和切削状态。 ### 已做事项 - `app/src/state/store.js`: - 加载 `xyzbc_switchkins.ngc` 时优先使用 `buildAxisExecutionTraceFromProgram`,让 `programAxisPreviewPath` 同时包含 50ms samples、line trace 和完整 `gcodeExecutionProcess`。 - 当没有 interpreter/TP timing 时,`RUN` 也能按 `programAxisPreviewPath.samples` 的真实展开采样流推进。 - `app/src/ui/axis-shell.js`: - 程序区新增真实执行过程面板,显示展开步骤数、运动步数、参数赋值步数、调用栈、Joint/TCP/Tool/Feed 和最近执行步骤。 - `app/src/styles/axis.css`: - 增加真实执行过程面板样式,保证截图中字段可读。 - `app/src/runtime/linuxcnc-machine-file-staging.js`: - 修正 dist 下 staging SDK 的候选路径顺序,保证直接打开 `app/dist` 时机器文件 staging 可用。 - `app/src/main.js`: - 增加 `TextDecoder` 对 resizable ArrayBuffer 的兼容处理,降低 wasm runtime 在不同 Chromium 环境下的解码差异。 - `app/src/visualization/five-axis-scene.js`: - 识别带 `gcodeExecutionProcess` 的执行 trace 作为 AXIS 展开预览源。 - `tests/node/verify_xyzbc_trt_web_app.mjs` 与 `tests/browser/xyzbc_trt_browser_smoke.html`: - 增加真实执行过程对象、DOM dataset、活动 G 代码步骤的断言。 ### 新增截图证据 ```text working/screenshots/web-simulation-real-gcode-process-20260703T074714Z/011-running-helix-feed-program.png working/screenshots/web-simulation-real-gcode-process-20260703T074714Z/manifest.json ``` ### 验证情况 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`。 ### 结论 新增截图已经能直接体现真实 G 代码执行过程:`helix_bc.ngc:17` 处于 `feed-helix`,画面同时显示 B/C 姿态、TCP、刀轴、F1000 cutting、调用栈和最近执行步骤;manifest 记录 `128` 个完整执行步骤、`29` 个运动步骤、`41` 个参数赋值步骤和 50ms 实时样本。 ## 2026-07-03 截图真实 G 代码执行过程修复轮次 ### 本轮目标 接续上一轮,修复 `working/screenshots/web-simulation-full-process-20260703T051258Z` 中暴露的页面/截图问题: - 截图应记录真实 G 代码真实执行过程。 - 刀具执行路径、刀具位置、刀头方向必须实时更新。 - 刀头方向与刀杆方向必须一致。 - 页面必须显示 G 代码每行执行过程。 ### 已做事项 - 修改 `app/src/runtime/axis-preview-path.js`: - 在 50ms 样本中增加 `sourceFile`、`statement`、`segmentIndex`。 - 样本可直接指向 `xyzbc_switchkins_sub.ngc` 或 `helix_bc.ngc` 的真实展开源行。 - 修改 `app/src/state/store.js`: - 新增 `programUiExecution`,记录当前样本的源文件、源行、语句、operation、动态 step、sample、joint、TCP、toolAxis 和 machineState。 - RUN/STEP/RUN_FRAME/task-HAL 状态应用统一通过当前真实样本派生当前行、刀位、刀轴和 UI 执行对象。 - 当前样本 `toolAxis.i/j/k` 提升为 `state.toolAxisVector.x/y/z`,用于 Three.js 刀头 marker、刀轴线和 Vismach 刀杆方向。 - 修改 `app/src/ui/axis-shell.js`: - 程序区新增实时执行条,显示 `sourceFile:line`、operation、sample、step 和当前 G 代码语句。 - LinuxCNC 监控面板新增 Source 行,显示展开后的当前源文件和源行。 - 程序区和监控区 dataset 暴露 live source/sample,供截图和 browser smoke 验证。 - 修改 `app/src/styles/axis.css`: - 增加实时执行条样式。 - 修改验证: - `tests/node/verify_xyzbc_trt_web_app.mjs` 增加样本源文件、语句、`programUiExecution`、toolAxis 同步断言。 - `tests/browser/xyzbc_trt_browser_smoke.html` 增加 RUN 后 DOM dataset、state、canvas `data-three-tool-axis` 一致性断言。 - 重新生成: - `working/evidence/web-xyzbc-trt-evidence.json` - `working/evidence/compare-xyzbc-trt-evidence.json` ### 验证情况 - `npm --prefix app run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `npm --prefix app run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm --prefix app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`。 - `npm --prefix app run evidence:web` 通过。 - `npm --prefix app run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。 ### 结论 页面层已从“只在 JSON 中有完整 G 代码过程”补强为“截图可见的实时 G 代码执行过程”。当前程序区、监控面板、state 和 canvas 都由同一个 50ms 真实展开样本驱动;刀具位置、已执行路径、刀头方向和刀杆方向同步更新,browser smoke 已对这些同步关系做硬断言。 ## 2026-07-02 23:50 EDT - working 任务复核完成轮次 ### 本轮目标 接续用户要求继续完成 `web-rtcp-5axis-xyzbc-trt-sim-plan/working` 的任务,复核当前工作区、重新生成 native/Web/compare 证据,确认 T-001 到 T-046 的实现和验收状态是否仍可重现。 ### 已做事项 - 读取 `working/README.md`、`03-推进台账.md`、`04-任务矩阵.md`、`05-验收证据.md`,确认当前任务矩阵已扩展到 T-046。 - 复核源码 diff,确认当前实现包含: - `AXIS_PREVIEW_SAMPLE_PERIOD_MS = 50`。 - `semanticExecutionPath`、`lineExecutionTrace`、`axisValuesByLine`、`gcodeExecutionProcess`。 - `machineState` 覆盖主轴、进给、切削、刀具、换刀、冷却状态。 - compare 对语义执行路径、逐行 trace、每行轴值和完整 G 代码执行过程做硬校验。 - 重新生成: - `working/evidence/web-xyzbc-trt-evidence.json` - `working/evidence/native-xyzbc-trt-evidence.json` - `working/evidence/compare-xyzbc-trt-evidence.json` - 复核 `working` 文档中历史失败记录:这些记录保留为推进过程档案,当前状态以最新复核段落和 compare JSON 为准。 ### 验证情况 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `python3 -m py_compile web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py` 通过。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web` 通过。 - `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py --run --timeout 80` 通过。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`。 ### 当前 JSON 摘要 ```text native.status = ok web.status = ready-for-wasm-runtime compare.status = pass compare.summary.checkCount = 35 compare.summary.passCount = 35 compare.summary.failCount = 0 compare.summary.blockers = [] native.pathSampling.samplePeriodMs = 50 web.pathSampling.samplePeriodMs = 50 native.previewPath.sampleCount = 1300 web.previewPath.sampleCount = 1300 native.semanticExecutionPath.sampleCount = 1300 web.semanticExecutionPath.sampleCount = 1300 compare.pathComparison.semanticExecutionVsSemanticExecution.machineStateMismatchCount = 0 compare.pathComparison.semanticExecutionVsSemanticExecution.maxTcpErrorMm = 3.552713678800501e-15 compare.pathComparison.semanticExecutionVsSemanticExecution.maxJointError = 3.552713678800501e-15 compare.pathComparison.semanticExecutionVsSemanticExecution.maxToolAxisAngleDeg = 0 compare.lineExecutionComparison.nativeTraceCount = 64 compare.lineExecutionComparison.webTraceCount = 64 compare.lineExecutionComparison.mismatchCount = 0 compare.axisValuesByLineComparison.nativeLineValueCount = 29 compare.axisValuesByLineComparison.webLineValueCount = 29 compare.axisValuesByLineComparison.mismatchCount = 0 compare.gcodeExecutionProcessComparison.nativeExecutionStepCount = 128 compare.gcodeExecutionProcessComparison.webExecutionStepCount = 128 compare.gcodeExecutionProcessComparison.nativeSourceLineCoverageCount = 65 compare.gcodeExecutionProcessComparison.webSourceLineCoverageCount = 65 compare.gcodeExecutionProcessComparison.mismatchCount = 0 ``` ### 结论 当前 `working` 任务矩阵 T-001 到 T-046 已完成,并可通过源码、native/Web evidence、compare evidence、Node smoke、Browser smoke 和静态构建重现。native/Web 在 50ms 同步采样下记录预览路径、语义执行路径、逐行 G 代码执行、每行轴值、完整动态执行过程和运行状态字段,compare 为 `35/35 pass` 且无 blocker。 ## 2026-07-03 G 代码执行过程运行状态字段补强轮次 ### 本轮目标 针对用户要求“刀具真实速度、完整刀具切削过程、实时轴位置、主轴转速、切削速度、进给量、换刀、冷却等全部写入 JSON,LinuxCNC 源程序与 Web 仿真程序 50ms 采样完全一致”,补强 native/Web 证据 JSON 的运行状态字段,并把这些字段纳入 compare 硬校验。 ### 已做事项 - 修改 `app/src/runtime/axis-preview-path.js`: - 在 50ms `samples[]` 中新增 `machineState`,包含 `spindle`、`feed`、`cutting`、`tool`、`toolChange`、`coolant`。 - 在 `axisValuesByLine[]` 与 `gcodeExecutionProcess.executionSteps[].result` 中新增同构运行状态。 - `feed-helix` 切削段明确记录 `cutting.active=true`、`cuttingSpeedMmPerMin=1000`、`actualMmPerMin=1000`。 - 修改 `tools/collect-native-xyzbc-trt-evidence.py`: - native preview、native semantic execution、LinuxCNC stat runtime execution 样本均写入同名 `machineState`。 - 完整 G 代码执行过程步骤写入 `machineStateBefore` 与 `machineStateAfter`。 - 修改 `tools/collect-web-xyzbc-trt-evidence.mjs`: - Web task/HAL runtime execution 样本写入同名 `machineState`。 - 修改 `tools/compare-xyzbc-trt-evidence.mjs`: - 50ms 语义执行路径逐样本比较新增 `machineStateMismatchCount`,必须为 0。 - 逐行轴值比较新增 `machineState` 比较。 - 完整 G 代码执行过程比较新增 `result.machineStateAfter` 比较。 - 修改 `tests/node/verify_xyzbc_trt_web_app.mjs`: - 增加样本、逐行轴值、完整执行步骤中的运行状态断言。 - 重新生成: - `working/evidence/native-xyzbc-trt-evidence.json` - `working/evidence/web-xyzbc-trt-evidence.json` - `working/evidence/compare-xyzbc-trt-evidence.json` ### 验证情况 - `npm --prefix app run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `python3 -m py_compile tools/collect-native-xyzbc-trt-evidence.py` 通过。 - `npm --prefix app run evidence:web` 通过。 - `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 tools/collect-native-xyzbc-trt-evidence.py --run --timeout 80` 通过。 - `npm --prefix app run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。 - `npm --prefix app run build` 通过,输出 `gmoccapy_static_build=ok`。 ### 当前 JSON 摘要 ```text native.pathSampling.samplePeriodMs = 50 web.pathSampling.samplePeriodMs = 50 native.semanticExecutionPath.sampleCount = 1300 web.semanticExecutionPath.sampleCount = 1300 compare.summary.checkCount = 35 compare.summary.passCount = 35 compare.summary.failCount = 0 compare.pathComparison.semanticExecutionVsSemanticExecution.machineStateMismatchCount = 0 compare.gcodeExecutionProcessComparison.mismatchCount = 0 web.semanticExecutionPath.samples[arc].machineState.cutting.active = true web.semanticExecutionPath.samples[arc].machineState.cutting.cuttingSpeedMmPerMin = 1000 web.semanticExecutionPath.samples[arc].machineState.feed.actualMmPerMin = 1000 web.semanticExecutionPath.samples[arc].machineState.tool.id = 2 web.semanticExecutionPath.samples[arc].machineState.tool.length = 10 web.semanticExecutionPath.samples[arc].machineState.coolant.flood = false ``` ### 结论 当前 native/Web evidence JSON 已在 50ms 同步采样基础上,显式记录完整刀具路径、实时轴位置、主轴、切削速度、进给量、换刀状态、冷却状态和刀具信息,并由 compare 对 native/Web 样本、逐行轴值和完整 G 代码执行过程执行硬一致性校验,结果全部通过。 ## 2026-07-03 50ms G 代码执行过程采样同步轮次 ### 本轮目标 接续上一轮“完整 G 代码执行过程 JSON 对标”,按用户本轮要求把 LinuxCNC 源程序和 Web 数控系统仿真程序的采样周期暂定并统一为 50ms,重新生成 native/Web/compare 三份证据。 ### 已做事项 - 将采样常量从 20ms 调整为 50ms: - `tools/collect-native-xyzbc-trt-evidence.py` - `tools/collect-web-xyzbc-trt-evidence.mjs` - `app/src/runtime/axis-preview-path.js` - `tools/compare-xyzbc-trt-evidence.mjs` - 更新 Node smoke 中 `semanticExecutionPath.samplePeriodMs` 和 `sampleCount` 断言。 - 重新生成: - `working/evidence/native-xyzbc-trt-evidence.json` - `working/evidence/web-xyzbc-trt-evidence.json` - `working/evidence/compare-xyzbc-trt-evidence.json` - 更新 `working` 文档当前规范,把路径、执行过程和 compare 采样周期统一记录为 `samplePeriodMs=50`。 ### 验证情况 - `python3 -m py_compile tools/collect-native-xyzbc-trt-evidence.py` 通过。 - `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 tools/collect-native-xyzbc-trt-evidence.py --run --timeout 80` 通过。 - `npm --prefix app run evidence:web` 通过。 - `npm --prefix app run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。 - `npm --prefix app run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `npm --prefix app run build` 通过,输出 `gmoccapy_static_build=ok`。 ### 当前 JSON 摘要 ```text native.pathSampling.samplePeriodMs = 50 native.previewPath.sampleCount = 1300 native.executionPath.sampleCount = 4 native.executionPath.taskHal.completed = true native.semanticExecutionPath.sampleCount = 1300 native.lineExecutionTrace.length = 64 native.axisValuesByLine.length = 29 native.gcodeExecutionProcess.executionStepCount = 128 native.gcodeExecutionProcess.sourceLineCoverage.length = 65 web.pathSampling.samplePeriodMs = 50 web.previewPath.sampleCount = 1300 web.executionPath.sampleCount = 228 web.executionPath.taskHal.completed = true web.semanticExecutionPath.sampleCount = 1300 web.lineExecutionTrace.length = 64 web.axisValuesByLine.length = 29 web.gcodeExecutionProcess.executionStepCount = 128 web.gcodeExecutionProcess.sourceLineCoverage.length = 65 compare.summary.checkCount = 35 compare.summary.passCount = 35 compare.summary.failCount = 0 compare.summary.blockers = [] compare.pathComparison.samplePeriodMs = 50 compare.lineExecutionComparison.status = pass compare.axisValuesByLineComparison.status = pass compare.gcodeExecutionProcessComparison.status = pass ``` ### 结论 当前 evidence JSON 已按 50ms 统一采样完整记录 LinuxCNC 源程序与 Web 数控系统仿真程序的 G 代码执行过程。预览路径、runtime 执行反馈、源程序语义执行路径、逐行 trace、每行轴值和完整动态执行步骤均进入 native/Web JSON,并由 compare 硬校验通过。 ## 2026-07-02 15:45 EDT - native 采集器自启动复核轮次 ### 本轮目标 接续上一轮,复核 `working` 目录声称已完成的全部验收项,并修正 native evidence 单条验收命令不能独立重现的问题。 ### 已做事项 - 运行 `python3 -m py_compile tools/collect-native-xyzbc-trt-evidence.py`、`npm --prefix app run smoke:node`、`npm --prefix app run evidence:web`、`npm --prefix app run evidence:compare`、`npm --prefix app run build`、`npm --prefix app run smoke:browser`,确认 Web 与 compare 当前可重现通过。 - 首次直接执行 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 tools/collect-native-xyzbc-trt-evidence.py --run --timeout 80` 时失败,错误为 `linuxcnc.error: emcStatusBuffer invalid err=3`,原因是采集器只连接已存在 LinuxCNC 实例,没有在无状态缓冲区时自启动目标 INI。 - 修改 `tools/collect-native-xyzbc-trt-evidence.py`: - `--run` 默认在无可用 LinuxCNC 状态缓冲区时启动 `/home/mes123456/cnc_wams/linuxcnc/scripts/linuxcnc` 和目标 `xyzbc-trt.ini`。 - 新增 `--startup-timeout` 和 `--no-autostart`,保留只连接现有实例的兼容路径。 - 自启动日志写入 `/tmp/xyzbc-trt-native-evidence-linuxcnc.log`。 - 采集结束后只清理本采集器启动的 LinuxCNC 进程。 - 若连接或自启动失败,写入明确的 blocked JSON,而不是让 Python traceback 成为唯一结果。 - 重新生成: - `working/evidence/native-xyzbc-trt-evidence.json` - `working/evidence/web-xyzbc-trt-evidence.json` - `working/evidence/compare-xyzbc-trt-evidence.json` ### 验证情况 - `python3 -m py_compile tools/collect-native-xyzbc-trt-evidence.py` 通过。 - `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 tools/collect-native-xyzbc-trt-evidence.py --run --timeout 80` 通过,`native.linuxcncRuntime.startup.startedByCollector=true`。 - `npm --prefix app run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `npm --prefix app run evidence:web` 通过。 - `npm --prefix app run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。 - `npm --prefix app run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm --prefix app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`。 ### JSON 摘要 ```text native.status = ok native.linuxcncRuntime.startup.startedByCollector = true native.previewPath.sampleCount = 3226 native.executionPath.sampleCount = 7 native.executionPath.taskHal.completed = true web.status = ready-for-wasm-runtime web.previewPath.sampleCount = 3074 web.executionPath.sampleCount = 569 compare.summary.checkCount = 29 compare.summary.passCount = 29 compare.summary.failCount = 0 compare.summary.blockers = [] ``` ### 结论 `working` 目录要求的 T-001 到 T-040 已完成,且 native/Web/compare 证据可通过文档中的单条命令链重新生成。此前需要手动预先启动 LinuxCNC 的隐含前置已移除。 ## 2026-07-02 10:32 EDT - native/Web 全量证据闭环轮次 ### 本轮目标 接续 `working` 目录剩余项,完成 native preview/execution path 重采集、basic_sim 等效、Ngcgui 子程序执行、TRAJ/AXIS/JOINT 和 Web UI 状态流复核,使 T-001 到 T-040 全部完成。 ### 已做事项 - 修改 `tools/collect-native-xyzbc-trt-evidence.py`: - 新增 native `previewPath`,按 `xyzbc_switchkins.ngc -> xyzbc_switchkins_sub.ngc -> helix_bc.ngc` 展开生成 20ms 预览路径样本。 - 保留 `linuxcnc.stat()` 真实执行事件重采样,写入 20ms `executionPath`,并记录 `taskHal.completed/eventCount`。 - 新增 `taskStateFlow`、`buttonInterlocks`、`basicSimEquivalent`,覆盖状态流、按钮联锁、joint/home/spindle/manual toolchange 反馈。 - 修改 `tools/collect-web-xyzbc-trt-evidence.mjs`: - 新增 `taskHalEquivalence` 与 `basicSimEquivalent`。 - 新增 `ngcguiExecution`,用 WASM machine-file wrapper 执行 `xyzbc_switchkins_sub.ngc`、`centering.ngc`、`helix_bc.ngc`。 - 新增 `nativeStateFlowReview`,记录 Web UI 对 native 状态流、按钮、HAL pin、路径的复核结果。 - 修改 `tools/compare-xyzbc-trt-evidence.mjs`: - compare 检查从 25 项扩展到 29 项,新增 Ngcgui 执行、native/Web basic_sim、UI 状态流复核。 - 在 `DISPLAY=:1` 下启动 `/home/mes123456/cnc_wams/linuxcnc` 的 `xyzbc-trt.ini`,通过 RIP 环境重采 native evidence,采集后已清理 LinuxCNC 进程。 - 重新生成: - `working/evidence/native-xyzbc-trt-evidence.json` - `working/evidence/web-xyzbc-trt-evidence.json` - `working/evidence/compare-xyzbc-trt-evidence.json` - 更新 `04-任务矩阵.md`,将 T-017、T-019、T-020、T-028、T-030、T-032、T-035、T-037、T-038 标记为完成。 ### 验证情况 - `python3 -m py_compile tools/collect-native-xyzbc-trt-evidence.py` 通过。 - `npm --prefix app run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `npm --prefix app run evidence:web` 通过。 - `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 tools/collect-native-xyzbc-trt-evidence.py --run --timeout 80` 通过。 - `npm --prefix app run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`,摘要为 `checkCount=29/passCount=29/failCount=0/blockers=[]`。 - `npm --prefix app run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm --prefix app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`。 ### JSON 摘要 ```text native.previewPath.samplePeriodMs = 20 native.previewPath.sampleCount = 3226 native.executionPath.samplePeriodMs = 20 native.executionPath.sampleCount = 7 native.executionPath.taskHal.completed = true native.basicSimEquivalent.ready = true native.taskStateFlow.ready = true web.previewPath.sampleCount = 3074 web.executionPath.sampleCount = 569 web.basicSimEquivalent.ready = true web.ngcguiExecution.ready = true web.nativeStateFlowReview.ready = true compare.summary.checkCount = 29 compare.summary.passCount = 29 compare.summary.failCount = 0 compare.summary.blockers = [] ``` ### 结论 `working` 任务矩阵 T-001 到 T-040 已全部完成,native/Web evidence 与 compare 闭环通过。 ## 2026-07-02 Web OPFS 强制与 AXIS 首屏等效实现轮次 ### 本轮目标 接续用户要求“Web 的文件使用 OPFS 系统”,把浏览器端 machine files、session snapshot、tool table 保存链路从可 fallback 改为目标 app 默认强制 OPFS,并完成 T-026 AXIS 首屏等效验收。 ### 已做事项 - 修改 `app/src/runtime/linuxcnc-machine-file-staging.js`: - `saveMachineFileStagingPlan()` 的存储解析支持 `requireOpfs`。 - 当目标 app 要求 OPFS 但浏览器缺少 `navigator.storage.getDirectory()` 或非安全上下文时直接报错,不再静默落到 memory fallback。 - 修改 `app/src/runtime/five-axis-session.js` 和 `app/src/runtime/tool-db-simulation.js`: - session snapshot 与 tool table 保存同样支持 `requireOpfs`。 - 修改 `app/src/state/store.js` 和 `app/src/main.js`: - 浏览器 UI 默认对 machine file staging、session save/restore、tool DB save 启用 `requireOpfs=true`。 - Node/测试显式传入 storage 时仍保留内存存储能力,用于非浏览器 smoke。 - 修改 `tests/browser/xyzbc_trt_browser_smoke.html`: - 断言启动 staging `storageMode=opfs`。 - 从 OPFS 读回 `xyzbc_switchkins.ngc`,确认包含 `M428/M429`。 - 保存并从 OPFS 读回 session snapshot,确认包含 `machineProfile=xyzbc-trt`。 - 保存并从 OPFS 读回 tool table,确认包含 `T2/Z10`。 - 断言 AXIS 首屏区域 dataset 和能力矩阵。 - 修改 `app/src/ui/gmoccapy-shell.js` 与 `app/src/styles/gmoccapy.css`: - 增加 AXIS 首屏等效状态带,覆盖 program、coordinates、status、MDI、switchkins、override、tool、preview、execution、axis-buttons。 - 各首屏区域输出 `data-axis-ui-section/profile/coordinates`,供浏览器验收。 - 修改 `tools/collect-web-xyzbc-trt-evidence.mjs` 与 `tools/compare-xyzbc-trt-evidence.mjs`: - 新增 `axisMainUi` evidence 和 compare 检查。 - Web evidence 中 Node 采集仍使用 memory storage;真实浏览器 OPFS 以 `smoke:browser` 为准。 - 更新 `04-任务矩阵.md`: - T-006/T-014/T-016 增加真实 OPFS 验收描述。 - T-026 标记为完成。 ### 验证情况 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node` 通过。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`,其中已验证 OPFS 写入和读回。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web` 通过。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare` 已生成真实失败报告:当前 20/25 通过;新增 AXIS 首屏检查通过,剩余 5 项仍来自 native preview/execution path 样本缺失。 ### 下一步 1. 继续 T-019/T-037:在 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment` 下重跑 native evidence,使 native path 进入 20ms 可比状态。 2. 继续 T-028/T-030:补 basic_sim 等效 task/HAL 细节和 Ngcgui/remap 子程序执行验收。 3. 继续 T-038:基于真实 native 状态流复核 Web 按钮、HAL pin、路径和状态联锁。 ## 2026-07-02 Tool table 到 tool-offset 闭环实现轮次 ### 本轮目标 接续 `working` 任务矩阵,完成 T-034:把 `xyzbc-trt.tbl` 的 T/P/Z/D 当前刀具偏置闭环接到 kinematics tool-offset、Web 模型刀长和 path JSON。 ### 已做事项 - 修改 `app/src/runtime/tool-db-simulation.js`: - 新增 `createToolRuntimeState()`,统一输出当前刀具、active G43 偏置、`motion.tooloffset.z` 等效值、path tool 和 Vismach tool-offset。 - 运行时状态记录 `xyzbc-trt-kins.tool-offset`、`xyzbc-trt-gui.tool-offset` 下游 pin 边界。 - 修改 `app/src/runtime/vismach-model-state.js`: - `toolRuntimeState.vismach.toolOffset` 优先于旧的静态 `toolPreview.length`,使模型刀具长度来自 active tool offset。 - 修改 `tools/collect-web-xyzbc-trt-evidence.mjs`: - 从 staged `xyzbc-trt.tbl` 解析工具表。 - 扫描选定程序 T/M6/G43;默认程序无工具命令时,使用工具表中第一个有 Z 偏置的 T2 生成默认激活证据。 - 新增 `toolRuntime` 和 `toolOffsetClosure`,并把 `previewPath.samples[].tool`、`executionPath.samples[].tool` 改为当前 active tool。 - 扩展 `tests/node/verify_xyzbc_trt_web_app.mjs`: - 断言 `T2 P2 Z10 D8` 进入 tool DB。 - 断言 kinematics tool offset、path tool 和 Vismach pin 均为 T2/Z10/D8 闭环结果。 - 重新生成: - `working/evidence/web-xyzbc-trt-evidence.json` - `working/evidence/compare-xyzbc-trt-evidence.json` - 更新 `04-任务矩阵.md`,将 T-034 标记为完成。 ### 验证情况 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node` 通过。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web` 通过。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare` 已生成真实失败报告:当前 19/24 通过;T-034 compare 检查已通过,剩余 5 项失败均来自 native evidence 尚缺 `previewPath`/`executionPath` 样本和采样周期字段。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`。 - `web-xyzbc-trt-evidence.json` 当前摘要: - `toolRuntime.activeToolNumber=2` - `toolRuntime.activePocket=2` - `toolRuntime.kinematics.toolOffsetZ=10` - `toolRuntime.pathTool.length=10` - `toolRuntime.pathTool.diameter=8` - `toolRuntime.vismach.toolOffset=10` - `toolOffsetClosure.closed=true` - `coverage.toolTableToToolOffsetClosed=true` ### 下一步 1. 继续 T-019/T-037:在 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment` 下重跑 native evidence,使 native path 进入 20ms 可比状态。 2. 继续 T-026/T-038:基于新 browser smoke 扩展 AXIS 主界面与 native 状态流复核。 3. 继续 T-028/T-030:补 basic_sim 等效 task/HAL 细节和 Ngcgui/remap 子程序执行验收。 ## 2026-07-02 Vismach 3D pin 驱动模型实现轮次 ### 本轮目标 接续 `working` 任务矩阵,完成 T-029:让 Web 3D 机床参考模型由 `xyzbc-trt-gui.py` 对应的 Vismach HAL pin 驱动,并把 pin 值、HAL net 和模型变换写入 Web evidence。 ### 已做事项 - 新增 `app/src/runtime/vismach-model-state.js`: - 统一生成 `table-x/saddle-y/spindle-z/tilt-b/rotate-c/tool-offset/x-offset/z-offset` pin 状态。 - 将 pin 映射到 Web 模型变换:table X、saddle Y、spindle Z、tilt B、rotate C、tool offset。 - 记录 9 条 native HAL net 对标关系和 `web_threejs_vismach_equivalent_driven_by_xyzbc_trt_hal_pins` 语义边界。 - 修改 `app/src/visualization/five-axis-scene.js`: - 将静态参考模型拆成 `vismach-table-x`、`vismach-saddle-y`、`vismach-spindle-z`、`vismach-tilt-b`、`vismach-rotate-c`、`vismach-tool-offset` 层级。 - 渲染时按 `buildVismachModelState()` 输出更新 Three.js group 的位移和旋转。 - 在 canvas dataset 增加 `threeVismachPins`、`threeVismachTransforms`、`threeVismachPinDrivenModel`,供后续浏览器 smoke 直接断言。 - 修改 `tools/collect-web-xyzbc-trt-evidence.mjs`: - `vismachEquivalent` 从静态 pin 清单升级为 `pins`、`pinValues`、`transforms`、`halNets` 和 `semanticBoundary`。 - 扩展 `tests/node/verify_xyzbc_trt_web_app.mjs`: - 断言 profile 中 Vismach feedback/offset net。 - 断言 pin 到模型变换的映射和 tool-offset/x-offset/z-offset 组合。 - 新增目标浏览器 smoke: - `tests/browser/xyzbc_trt_browser_smoke.html` - `tests/browser/verify_xyzbc_trt_browser.sh` - `app/package.json` 增加 `smoke:browser`。 - 浏览器断言默认 profile 为 `xyzbc-trt`,kinematics/interpreter/task-HAL 均在 worker 中 ready,canvas 非空,`threeVismachPinDrivenModel` 和 Vismach pin/transform dataset 可读。 - 重新生成: - `working/evidence/web-xyzbc-trt-evidence.json` - `working/evidence/compare-xyzbc-trt-evidence.json` - 更新 `04-任务矩阵.md`,将 T-014、T-029 标记为完成,并补充 T-035 Web evidence 字段。 ### 验证情况 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node` 通过。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web` 通过。 - `web-xyzbc-trt-evidence.json` 当前摘要: - `status=ready-for-wasm-runtime` - `blockers=[]` - `vismachEquivalent.pinValues.table-x=43` - `vismachEquivalent.pinValues.saddle-y=-32.15` - `vismachEquivalent.pinValues.spindle-z=-11.306` - `vismachEquivalent.pinValues.tool-offset=84.019` - `vismachEquivalent.pinValues.x-offset=-20` - `vismachEquivalent.pinValues.z-offset=-15` - `vismachEquivalent.halNets.length=9` - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare` 已生成真实失败报告:仍为 5 项失败,均来自 native evidence 尚缺 `previewPath`/`executionPath` 样本和采样周期字段。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`。 ### 下一步 1. 继续 T-019/T-037:在 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment` 下重跑 native evidence,使 native path 进入 20ms 可比状态。 2. 继续 T-034:把 tool table 当前 T/P/Z/D 的 active tool offset 闭环接到 kinematics/tool model/path JSON。 3. 继续 T-026/T-038:基于新 browser smoke 扩展 AXIS 主界面与 native 状态流复核。 ## 2026-07-02 Web task/HAL executionPath 采集实现轮次 ### 本轮目标 接续 `working` 任务矩阵,补齐 Web 侧 `executionPath.samples`,让 Web evidence 的预览路径和执行路径都使用 20ms 采样周期,并重新生成 compare 证据。 ### 已做事项 - 修改 `tools/collect-web-xyzbc-trt-evidence.mjs`: - 复用 `linuxcnc_interp` 生成 machine-file canonical motion 和 TP timing。 - 将 TP planner 原始样本重采样为 20ms `previewPath.samples`。 - 将同一 motion plan 装入 `linuxcnc_task_hal` WASM。 - 按 20ms task cycle 读取 task/HAL status,生成 `executionPath.samples`。 - 对 `xyzbc-trt` 显式按 `joint.0/1/2/3/4` 映射 `X/Y/Z/B/C`,避免 B/C 轴被 XYZAC 兼容字段误映射。 - 扩展 `tests/node/verify_xyzbc_trt_web_app.mjs`,增加 interpreter + task/HAL 执行反馈 smoke 断言。 - 重新生成: - `working/evidence/web-xyzbc-trt-evidence.json` - `working/evidence/compare-xyzbc-trt-evidence.json` - 更新 `04-任务矩阵.md`,将 T-022 标记为完成,并更新 T-017/T-021 的当前样本和通过数。 ### 验证情况 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web` 通过。 - `web-xyzbc-trt-evidence.json` 当前摘要: - `wasm.ready=true` - `blockers=[]` - `previewPath.samplePeriodMs=20` - `previewPath.sampleCount=3074` - `executionPath.samplePeriodMs=20` - `executionPath.sampleCount=569` - `executionPath.source=web-linuxcnc-task-hal-execution` - `executionPath.taskHal.completed=true` - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare` 已生成真实失败报告:当前 18/23 通过,剩余 5 项均为 native evidence 缺少 `previewPath`/`executionPath` 样本和 20ms 周期字段。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node` 通过。 - `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build` 通过,输出 `gmoccapy_static_build=ok`。 ### 下一步 1. 在 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment` 下重跑 native evidence,使 `native-xyzbc-trt-evidence.json` 写入 `pathSampling`、`previewPath` 和 20ms `executionPath`。 2. 重跑 Web evidence 和 compare,使剩余 native path 相关失败进入可比误差统计。 3. 继续目标浏览器 smoke,验证 worker runtime ready 和 canvas 非空。 ## 2026-07-02 evidence 字段与路径对比实现轮次 ### 本轮目标 按 `working` 目录继续编写 `xyzbc-trt` Web 数控仿真程序,优先补齐可以在当前环境闭环验证的 evidence JSON、路径对比和 staging 覆盖。 ### 已做事项 - 将 `xyzbc-trt` profile 的 `samplePrograms` 修正为 `xyzbc_switchkins.ngc` 和 `boat-xyzbc.ngc`。 - 扩展 Web evidence:新增 `pathSampling`、`previewPath`、`executionPath`、`startupSequence`、`iniDisplay`、`halNets`、`kinematicsPins`、`axisJointLimits`、`switchkinsTransitions`、`uiEquivalence`、`vismachEquivalent`、`ngcguiSubroutines`、`demoPrograms`。 - 扩展 compare evidence:新增 `pathComparison`,覆盖 `previewVsPreview`、`executionVsExecution`、`previewVsExecutionNative`、`previewVsExecutionWeb`,并输出 TCP、joint、toolAxis、样本差异和缺样本统计。 - 修改 native evidence 脚本默认基线为 `/home/mes123456/cnc_wams/linuxcnc`,并在 `--run` 时可把 `stat()` 执行事件重采样为 20ms `executionPath`。 - 扩展 Node smoke,检查 `samplePrograms`、Ngcgui 子程序和 `boat-xyzbc.ngc` staging。 - 重新生成 Web evidence 和 compare evidence。当前 compare 为真实 fail:WASM artifact 缺失,native/Web path 样本仍不可比。 ### 修改文件 ```text web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/profiles/xyzbc-trt.js web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_xyzbc_trt_web_app.mjs web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-web-xyzbc-trt-evidence.mjs web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py web-rtcp-5axis-xyzbc-trt-sim-plan/tools/compare-xyzbc-trt-evidence.mjs web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json web-rtcp-5axis-xyzbc-trt-sim-plan/working/04-任务矩阵.md ``` ### 验证情况 - 已通过:`npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node`。 - 已通过:`python3 -m py_compile web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py`。 - 已通过生成:`npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web`。 - 已生成真实失败 compare:`npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare`,当前 23 项检查中 16 项通过,7 项失败均指向 WASM artifact 和 path 样本缺口。 - 已确认 `npm run build` 仍因 `wasm-port/build/wasm/kinematics` 缺失失败;该结果符合当前 WASM artifact 前置状态。 ### 下一步 1. 构建 `wasm-port/build/wasm` 的 kinematics/core/tp/task-hal artifact。 2. 在 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment` 下重跑 native evidence,使 `sourceRoot` 和 path 字段进入 `native-xyzbc-trt-evidence.json`。 3. 重跑 Web evidence 和 compare,确认 pathComparison 从 blocker 转为可比误差统计。 ## 2026-07-02 07:31 EDT - DOCX 设计任务书整合到 working ### 本轮目标 将 `doc/xyzbc-trt-web-cnc-simulation-design-task-and-technical-plan.docx` 的内容整合到 `working` 目录下,方便后续直接用 Markdown 工作文档继续开发和验收。 ### 已做事项 - 读取 DOCX 包结构,确认正文包含 507 段文本,图片包含 `xyzbc-trt-axis-window.png`、`xyzbc-trt-desktop.png`、`xyzbc-trt-web-architecture.png`、`xyzbc-trt-json-compare-flow.png`、`xyzbc-trt-logic-map.png`。 - 从 DOCX 的 `word/document.xml` 提取段落和表格,转换为 `working/09-设计任务书与技术方案整合.md`。 - 在整合稿中保留 1-11 章:项目目标、原型运行证据、完全对标范围、Web 界面设计任务书、技术方案、开发任务分解、验收标准、风险控制、对标文件清单、程序逻辑全量分析、开机/急停/回零/执行状态联锁。 - 将 DOCX 图片引用改为 `../doc/assets/...`,使 working 文档可直接查看原有图像证据。 - 更新 `working/README.md`,把 09 文档加入索引。 - 更新 `04-任务矩阵.md`,新增 `T-040 DOCX 任务书整合到 working`。 ### 修改文件 ```text web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/README.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/03-推进台账.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/04-任务矩阵.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/05-验收证据.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/06-决策记录.md ``` ### 验证情况 - `working/09-设计任务书与技术方案整合.md` 已生成,共 364 行。 - `rg` 检查到核心章节:`项目目标`、`原型系统运行证据`、`完全对标范围`、`Web 界面设计任务书`、`技术方案`、`开发任务分解`、`验收标准`、`风险和控制措施`、`程序逻辑全量分析`、`开机、急停、回零与执行状态的联锁逻辑`。 - `rg` 检查到 5 张图片引用,均指向 `../doc/assets/`。 ### 下一步 1. 后续开发需求优先引用 `working/09-设计任务书与技术方案整合.md`,不再需要反复打开 DOCX 才能检索任务书内容。 2. 若 DOCX 后续继续更新,需要同步重新生成或手工补充 09 文档,并在本台账记录差异。 ## 2026-07-02 03:10 EDT ### 本轮目标 对标 `xyzbc-trt-runtime-files.md`,确认 `wasm-port` 是否满足,并创建 Web 方式的 `xyzbc-trt` 数控系统仿真界面与工作文档。 ### 已做事项 - 读取 `web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-runtime-files.md`。 - 读取 `wasm-port/AGENTS.md`、`wasm-port/SKILL.md`、`wasm-port/README.md`。 - 检查参考 app:`web-rtcp-5axis-sim-plan/app`。 - 检查 `wasm-port` 对 `xyzbc-trt` 的覆盖:SDK、vendored config、kinematics probe、remap execute harness、文档覆盖。 - 复制参考 app 和 tests 到目标目录。 - 修改目标 app 默认 profile 为 `xyzbc-trt`。 - 修改 OPFS/session/tool-db 命名空间为 `web-rtcp-5axis-xyzbc-trt-sim-plan`。 - 为 `xyzbc-trt` profile 增加 `machineFileStaging.defaultProgramFilename = xyzbc_switchkins.ngc`。 - 新增 `tests/node/verify_xyzbc_trt_web_app.mjs`。 - 创建 `README.md` 和 `working/` 六类工作文档。 - 发现 `xyzbc.var` 未进入 `wasm-port/vendor`/manifest;本轮记录为参数文件基线导入缺口。 ### 修改文件 ```text web-rtcp-5axis-xyzbc-trt-sim-plan/README.md web-rtcp-5axis-xyzbc-trt-sim-plan/app/index.html web-rtcp-5axis-xyzbc-trt-sim-plan/app/package.json web-rtcp-5axis-xyzbc-trt-sim-plan/app/package-lock.json web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/main.js web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/profiles/index.js web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/profiles/xyzbc-trt.js web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/five-axis-session.js web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-machine-file-staging.js web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-kinematics-runtime.js web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-kinematics-worker-client.js web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/tool-db-simulation.js web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/ui/gmoccapy-shell.js web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_xyzbc_trt_web_app.mjs web-rtcp-5axis-xyzbc-trt-sim-plan/working/README.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/01-项目功能内容.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/02-项目程序开发详细步骤.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/03-推进台账.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/04-任务矩阵.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/05-验收证据.md web-rtcp-5axis-xyzbc-trt-sim-plan/working/06-决策记录.md ``` ### 验证情况 - 已通过:`npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node`,输出 `xyzbc_trt_web_app_smoke=ok`。 - 已通过:`git diff --check -- web-rtcp-5axis-xyzbc-trt-sim-plan`。 - 已发现:当前工作区缺少 `wasm-port/build/wasm`,完整 WASM/browser 验收需要先构建 artifact。 ### 下一步 1. 运行目标 Node smoke。 2. 如需完整 Web 执行,先构建 `wasm-port/build/wasm`。 3. 根据 browser smoke 结果补齐目标项目专用浏览器断言。 ## 2026-07-02 native/Web 对比验证轮次 ### 本轮目标 执行真实 `xyzbc-trt` 和 Web 仿真采集,分别写入 JSON,并通过比较 JSON 找出需要完善的差异。 ### 已做事项 - 确认 native `xyzbc-trt` 进程正在运行:`linuxcncsvr`、`milltask`、`halui`、`xyzbc-trt-gui`、`axis`。 - 历史轮次曾使用 `/home/mes123456/linuxcnc-master/scripts/rip-environment python3` 成功导入 LinuxCNC Python API 并读取 `stat()`;当前 native 新基线已切换到 `/home/mes123456/cnc_wams/linuxcnc`。 - 新增 native 采集脚本:`tools/collect-native-xyzbc-trt-evidence.py`。 - 新增 Web 采集脚本:`tools/collect-web-xyzbc-trt-evidence.mjs`。 - 新增 JSON 对比脚本:`tools/compare-xyzbc-trt-evidence.mjs`。 - 将 `xyzbc.var` 从真实运行树导入 `wasm-port/vendor/linuxcnc/.../xyzbc.var`,并加入 `wasm-port/tools/source-manifest.txt`。 - 更新目标 smoke,使参数文件 staging 成为必须通过项。 - 在 `package.json` 增加 `evidence:web` 和 `evidence:compare`。 ### 验证情况 - 已通过 native 真实执行采集:`native-xyzbc-trt-evidence.json`,`commandResult.status=completed`,事件数 `1462`。 - 已通过 Web 采集:`web-xyzbc-trt-evidence.json`,profile/INI/OPFS/PyVCP/remap/tool/parameter/default program 均覆盖。 - 已生成比较报告:`compare-xyzbc-trt-evidence.json`,12 项检查中 11 项通过。 - 当前唯一失败项:缺少 `wasm-port/build/wasm` 下的 kinematics/core/tp/task-hal `.js/.wasm` artifact。 - 当前环境此前缺少 `emcc`;后续已安装 `emcc 6.0.2`,下一步应直接构建 WASM artifact。 ### 下一步 1. 运行 `source /home/mes123456/emsdk/emsdk_env.sh`。 2. 运行 `wasm-port/tools/build_kinematics_wasm.sh`、`build_wasm_core.sh`、`build_tp_wasm.sh`、`build_task_hal_wasm.sh`。 3. 重跑 `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web` 和 `evidence:compare`,目标是比较报告 artifact 项通过。 4. 再补目标浏览器 smoke,确认 worker runtime 和 canvas 非空。 ## 2026-07-02 刀具预览/执行路径 JSON 对比需求补充 ### 本轮目标 把“刀具预览路径”和“刀具执行路径”的采集过程纳入 native/Web evidence JSON,并要求 compare JSON 使用一致曲线采样周期进行比对。 ### 已做事项 - 在 `01-项目功能内容.md` 增加 `pathSampling`、`previewPath`、`executionPath`、`pathComparison` 的 JSON 字段要求。 - 明确 native 和 Web 对比采样周期统一为 `samplePeriodMs = 20`。 - 明确每个路径样本必须包含程序行号、运动类型、switchkins/kinematics 状态、刀具信息、XYZBC joint、TCP、toolAxis、feed、spindle。 - 在 `02-项目程序开发详细步骤.md` 增加 native/Web 采集脚本和 compare 脚本的后续实现步骤。 - 在任务矩阵中增加预览路径采集、执行路径采集、统一采样周期、路径误差统计等任务。 ### 当前状态 - 本轮只补充工作文档和验收要求。 - 现有 `working/evidence/*.json` 仍是上一轮真实采集结果,尚未伪造或手工改写。 - 后续需要修改采集脚本,让真实 native/Web 运行重新生成包含刀具路径的 JSON。 ### 下一步 1. 在 `collect-native-xyzbc-trt-evidence.py` 中增加 LinuxCNC 预览路径与执行反馈路径采集。 2. 在 `collect-web-xyzbc-trt-evidence.mjs` 中增加 Web 预览 planner 与 WASM task/HAL 执行路径采集。 3. 在 `compare-xyzbc-trt-evidence.mjs` 中增加 20ms 重采样和路径误差统计。 4. 重新生成 native/Web/compare 三份 JSON,确认 `pathComparison.samplePeriodMs = 20` 且两侧样本可逐点对齐。 ## 2026-07-02 全量对标 working 文档完善 ### 本轮目标 根据 `doc/xyzbc-trt-runtime-files.md`,让 `working` 文档明确要求 Web 数控系统仿真界面完全对标 LinuxCNC `xyzbc-trt` 真实运行配置。 ### 已做事项 - 重新读取 `doc/xyzbc-trt-runtime-files.md`,确认文档共 702 行,覆盖进程、启动入口、INI、AXIS、PyVCP、POSTGUI HAL、basic_sim、Vismach、switchkins、G-code、tool table、kinematics、加载顺序和重要文件清单。 - 新增 `working/07-全量对标追踪矩阵.md`,把每个 LinuxCNC 功能点映射到 Web 对标目标、evidence 字段和当前缺口。 - 更新 `01-项目功能内容.md`,明确完全对标范围,并补充 AXIS 等效、POSTGUI HAL 等效、basic_sim、Vismach pin、Ngcgui、演示程序全集、速度/限制、kinematics HAL pins 等功能项。 - 更新 `02-项目程序开发详细步骤.md`,增加全量对标 JSON 字段和后续实现步骤。 - 更新 `04-任务矩阵.md`,新增 T-025 到 T-035。 - 更新 `05-验收证据.md`,新增全量对标 JSON 验收要求。 - 同步 `emcc` 状态:当前已安装 `emcc 6.0.2`,剩余前置是构建 WASM artifact。 ### 当前状态 - 文档层面已把 `xyzbc-trt-runtime-files.md` 的完整运行语义转成 Web 对标清单。 - 代码层面仍需继续补齐全量 evidence JSON、UI 等效行为、Vismach pin 验收和 WASM artifact 验收。 ### 下一步 1. 构建 `wasm-port/build/wasm` artifact。 2. 修改 native/Web evidence 采集脚本,补齐 `startupSequence`、`halNets`、`kinematicsPins`、`axisJointLimits`、`uiEquivalence`、`vismachEquivalent` 等字段。 3. 修改 compare 脚本,把 `07-全量对标追踪矩阵.md` 中的检查项转为自动化 check。 4. 根据新增任务矩阵补齐 Web UI 和 3D 模型行为。 ## 2026-07-02 切换 native 对标基线到 `/home/mes123456/cnc_wams/linuxcnc` ### 本轮目标 根据用户要求,以编译成功并能够执行 `xyzbc-trt` 的 `/home/mes123456/cnc_wams/linuxcnc` 为真实 LinuxCNC 对标基线,设计 Web 数控仿真界面和逻辑。 ### 已做事项 - 检查 `/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini`,确认配置文件存在。 - 检查 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment`、`bin/axis`、`bin/xyzbc-trt-gui`、`rtlib/xyzbc-trt-kins.so`,当前自动检查未发现这些 RIP/构建产物。 - 更新 `01-项目功能内容.md`,声明后续 native evidence 采集和 Web 对标基线统一使用 `/home/mes123456/cnc_wams/linuxcnc`。 - 更新 `02-项目程序开发详细步骤.md`,将 native 采集命令切换为 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment`。 - 更新 `04-任务矩阵.md`,新增 T-036 到 T-038,覆盖 native 基线切换、新基线 JSON 重采集、Web 界面按新 native 运行结果复核。 - 更新 `05-验收证据.md`,新增 native 基线切换验收,记录当前文件检查结果。 - 更新 `07-全量对标追踪矩阵.md` 和 `06-决策记录.md`,明确 `/home/mes123456/linuxcnc-master` 只作为历史运行参考。 ### 当前状态 - 文档层面已切换对标基线。 - 代码和 evidence 层面还未重新采集;现有 `working/evidence/*.json` 仍来自历史 `/home/mes123456/linuxcnc-master` 运行树。 ### 下一步 1. 确认 `/home/mes123456/cnc_wams/linuxcnc` 的 RIP 构建产物实际输出位置。 2. 用该路径执行 `xyzbc-trt.ini`,确认 `axis`、`xyzbc-trt-gui`、`xyzbc-trt-kins.so` 可运行。 3. 修改/运行 native evidence 采集脚本,让 `sourceRoot=/home/mes123456/cnc_wams/linuxcnc`。 4. 依据新 native JSON 复核 Web UI、switchkins、Vismach 等效模型、刀具路径和 compare 规则。 ## 2026-07-02 编译 `/home/mes123456/cnc_wams/linuxcnc` ### 本轮目标 按 run-in-place 方式编译 `/home/mes123456/cnc_wams/linuxcnc`,使其能够作为 `xyzbc-trt` native 真实执行基线。 ### 已做事项 - 读取 `docs/INSTALL.adoc`,确认 RIP 构建流程为 `cd src`、`./autogen.sh`、`./configure --with-realtime=uspace`、`make`、`sudo make setuid`。 - 执行 `./autogen.sh`,成功生成 configure/config.h.in。 - 执行 `./configure --with-realtime=uspace --disable-build-documentation`,配置成功,并生成 `scripts/linuxcnc`、`scripts/rip-environment`、`scripts/halrun` 等 RIP 脚本。 - 首次执行 `make -j"$(nproc)"` 失败,原因是 shell 环境变量 `DEBUG=release` 被 LinuxCNC Makefile 当作编译参数,导致 `gcc/c++` 报 `release: linker input file not found`。 - 使用 `env -u DEBUG make -j"$(nproc)"` 重新编译,成功完成。 - 执行 `sudo -n make setuid`,成功设置 `bin/rtapi_app` 和 `bin/linuxcnc_module_helper` 的 root/setuid 权限。 ### 验证情况 - 已生成 `scripts/rip-environment`、`scripts/linuxcnc`。 - 已生成 `bin/axis`、`bin/xyzbc-trt-gui`、`bin/milltask`、`bin/linuxcncsvr`、`bin/halui`。 - 已生成 `rtlib/xyzbc-trt-kins.so`、`rtlib/tpmod.so`。 - `source scripts/rip-environment` 后,`command -v linuxcnc`、`axis`、`halcmd` 均指向 `/home/mes123456/cnc_wams/linuxcnc`。 - `python3 -c "import linuxcnc"` 成功,模块路径为 `/home/mes123456/cnc_wams/linuxcnc/lib/python/linuxcnc.so`。 - `git status --short` 无输出,说明没有 Git 跟踪文件改动;编译产物均在忽略/生成路径内。 ### 下一步 1. 使用 `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment` 重新采集 native `xyzbc-trt` evidence。 2. 将 `native-xyzbc-trt-evidence.json.sourceRoot` 更新为 `/home/mes123456/cnc_wams/linuxcnc`。 3. 用新 native JSON 重跑 Web evidence 和 compare。 ## 2026-07-02 创建并执行 `xyzbc-trt` 快捷方式 ### 本轮目标 在 `/home/mes123456/cnc_wams/linuxcnc` 中创建执行 `xyzbc-trt` 的桌面快捷方式,并实际启动该配置。 ### 已做事项 - 检查显示环境,当前 `DISPLAY=:1`、`XDG_SESSION_TYPE=x11`。 - 参考历史 `/home/mes123456/linuxcnc-master/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop`,创建新快捷方式: ```text /home/mes123456/cnc_wams/linuxcnc/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop ``` - 快捷方式 `Exec` 指向: ```text /home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment linuxcnc /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini ``` - 启动前发现历史 `/home/mes123456/linuxcnc-master` 的 `xyzbc-trt` 仍在运行。 - 尝试 `/home/mes123456/linuxcnc-master/scripts/linuxcnc -k` 后出现 pickconfig 窗口,未关闭旧实例;随后终止旧 LinuxCNC 相关进程。 - 使用 `setsid` 从新路径后台启动 `xyzbc-trt`。 ### 验证情况 - 新进程均来自 `/home/mes123456/cnc_wams/linuxcnc`:`scripts/linuxcnc`、`linuxcncsvr`、`rtapi_app`、`milltask`、`halui`、`hal_manualtoolchange`、`xyzbc-trt-gui`、`axis`。 - `halcmd show pin motion.switchkins-type` 可读,值为 `0`。 - LinuxCNC Python API 可读取状态:`file=./demos/xyzbc_switchkins.ngc`、`axis_mask=55`、`position=[0,0,0,0,0]`。 - `desktop-file-validate` 无输出。 ### 下一步 1. 用当前运行的新 native 实例重采集 `native-xyzbc-trt-evidence.json`。 2. 将现有历史 `/home/mes123456/linuxcnc-master` evidence 替换为 `/home/mes123456/cnc_wams/linuxcnc` evidence。 3. 基于新 evidence 重跑 Web compare。 ## 2026-07-02 生成 WASM artifact ### 本轮目标 为 `web-rtcp-5axis-xyzbc-trt-sim-plan` 生成缺失的 `wasm-port/build/wasm` artifact,使 Web evidence 不再因缺少 `.js/.wasm` 构建产物而 blocked。 ### 已做事项 - 显式加载 `/home/mes123456/emsdk/emsdk_env.sh`,确认 `emcc 6.0.2` 可用。 - 执行以下构建脚本: - `wasm-port/tools/build_wasm_core.sh` - `wasm-port/tools/build_kinematics_wasm.sh` - `wasm-port/tools/build_tp_wasm.sh` - `wasm-port/tools/build_task_hal_wasm.sh` - 已生成目标项目所需 artifact: - `wasm-port/build/wasm/core/linuxcnc_interp.js` - `wasm-port/build/wasm/core/linuxcnc_interp.wasm` - `wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.js` - `wasm-port/build/wasm/kinematics/linuxcnc_xyzbc_trt_kinematics.wasm` - `wasm-port/build/wasm/tp/linuxcnc_tp.js` - `wasm-port/build/wasm/tp/linuxcnc_tp.wasm` - `wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js` - `wasm-port/build/wasm/task-hal/linuxcnc_task_hal.wasm` - `wasm-port/build/wasm` 下当前共有 40 个 `.js/.wasm` artifact。 ### 验证情况 - `node tests/node/verify_xyzbc_trt_web_app.mjs` 通过。 - `SKIP_KINEMATICS_BUILD=1 wasm-port/tests/wasm/node/verify_kinematics_wasm.sh` 通过,包含 `xyzbc-trt` kinematics smoke。 - `SKIP_TP_BUILD=1 wasm-port/tests/wasm/node/verify_tp_wasm.sh` 通过。 - `SKIP_TASK_HAL_BUILD=1 wasm-port/tests/wasm/node/verify_task_hal_wasm.sh` 通过。 - 历史状态:`SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh` 当时未通过,原因是 `interp_g10_l11_wasm` 的 G10 L11 期望值过期;该项已在后续“完整 interpreter/remap 验收”轮次修复。 - 重新运行 `node tools/collect-web-xyzbc-trt-evidence.mjs`,`web-xyzbc-trt-evidence.json` 显示 `wasmArtifactsReady=true`、`missing=[]`,并生成 Web preview path 6174 个 20ms 样本。 - 重新运行 `node tools/compare-xyzbc-trt-evidence.mjs`,当前 17/23 通过;剩余失败项集中在 native preview/execution path 样本缺失,以及 Web execution path collector 尚未实现。 ### 下一步 1. 已完成:`verify_interp_wasm.sh` 中 `interp_g10_l11_wasm` 的 G10 L11 断言已对齐 vendored LinuxCNC expected。 2. 用 `/home/mes123456/cnc_wams/linuxcnc` 当前 native 实例重采集 `native-xyzbc-trt-evidence.json` 的 preview/execution path。 3. 实现 Web task/HAL execution path 采集,补齐 `web-xyzbc-trt-evidence.json.executionPath.samples`。 ## 2026-07-02 完整 interpreter/remap 验收 ### 本轮目标 完成 `wasm-port/tests/wasm/node/verify_interp_wasm.sh` 的 interpreter/remap WASM 验收,使 `linuxcnc_interp.js/.wasm` 不仅生成,而且通过完整 Node 回归。 ### 已做事项 - 单独复现 `interp_g10_l11_wasm`,打印实际 canonical 输出。 - 对照 `wasm-port/vendor/linuxcnc/tests/interp/g10/g10-l11/expected`,确认 WASM 实际输出与 vendored LinuxCNC 当前 expected 一致: - `SET_G92_OFFSET(-43.0622, -47.4282, -72.0000)` - 修正 `wasm-port/tests/wasm/node/verify_interp_wasm.mjs` 中过期的 G10 L11 断言: - 旧值:`x=-41.1962 y=-46.1962 z=-72` - 新值:`x=-43.0622 y=-47.4282 z=-72` ### 验证情况 - `SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh` 通过,输出 `interp_wasm_node_smoke=ok`。 - `wasm-port/tests/wasm/node/verify_interp_wasm.sh` 通过,输出 `interp_wasm_node_smoke=ok`。 - 运行中仍有既有提示: - `link (updating variable file): No such file or directory` - `G88.1` 与 `M410` remap modalgroup warning - 上述提示不影响退出码,完整 interpreter/remap 验收已通过。 ### 下一步 1. 继续 native preview/execution path 重采集。 2. 实现 Web task/HAL execution path collector。 3. 重跑 Web/native compare,使剩余 6 个 path 相关失败项进入可比误差统计。 ## 2026-07-02 AXIS 按钮级源程序对标与逐按钮验证 ### 本轮目标 继续用户要求:`web-rtcp-5axis-xyzbc-trt-sim-plan` 的 Web 仿真页面必须继续完全对标 LinuxCNC 源程序 AXIS 功能,界面按钮功能也要全面对标 LinuxCNC 源程序功能,并验证每一个按钮的功能和逻辑。 ### 已做事项 - 定位真实 AXIS 源码:`/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py`。 - 在 `app/src/ui/axis-shell.js` 新增 `AXIS_BUTTON_PARITY`,逐项记录 Web action、LinuxCNC `axis.py`/POSTGUI HAL 来源、源码行段和预期状态效果。 - 修正按钮逻辑: - `estop` 由单向进入 ESTOP 改为按 AXIS `estop_clicked` 语义在 ESTOP/ESTOP_RESET 间切换。 - 菜单 `open` 从全局 AXIS shell 查找隐藏 file input,避免 menubar 局部查找失败。 - 给菜单、工具栏、手动/MDI、PyVCP 控件补 `data-axis-source-ref`、`data-axis-source-lines`、`data-axis-expected-effect`,供浏览器验收。 - `main.js` 公开 `getButtonParity()`,浏览器 smoke 可直接检查按钮级对标矩阵。 - Web evidence 新增 `axisMainUi.axisButtonParity` 和 `coverage.axisButtonParityCovered`;compare 新增按钮级覆盖检查。 - Node smoke 增加按钮状态机断言。 - Browser smoke 增加真实点击序列,覆盖 ESTOP/复位、上电、回零、MDI、M428/M429/M430、Jog、override、主轴、冷却、视图、清轨迹、run-ready。 - 更新 `04-任务矩阵.md`,新增 T-041/T-042。 - 更新 `07-全量对标追踪矩阵.md` 和 `08-xyzbc-trt-界面与图标分析.md`,把按钮级对标纳入后续工作基线。 ### 验证情况 - `npm run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `npm run build` 通过,输出 `gmoccapy_static_build=ok`。 - `npm run smoke:browser` 通过,输出 `xyzbc_trt_browser_smoke=ok`;浏览器实际点击 AXIS/PyVCP 关键按钮并断言状态变化。 - `npm run evidence:web` 通过,生成 `working/evidence/web-xyzbc-trt-evidence.json`。 - `npm run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。 - 当前 `web-xyzbc-trt-evidence.json` 摘要: - `axisMainUi.axisButtonParity.buttonCount=61` - `axisMainUi.axisButtonParity.sourceReferencedCount=61` - `axisMainUi.axisButtonParity.missingActions=[]` - `coverage.axisButtonParityCovered=true` - 当前 `compare-xyzbc-trt-evidence.json` 摘要: - `checkCount=30` - `passCount=30` - `failCount=0` - `blockers=[]` ## 2026-07-03 刀具执行路径、实际轴值与逐行 G 代码执行对标 ### 本轮目标 在已完成刀具预览路径对标的基础上,继续对标 `xyzbc-trt` 默认程序 `xyzbc_switchkins.ngc` 的实际刀具执行路径、执行轴值和每行 G 代码展开过程,并用 JSON 固化 native LinuxCNC 与 Web 仿真的对比证据。 ### 已做事项 - 在 `app/src/runtime/axis-preview-path.js` 新增 `buildAxisExecutionTraceFromProgram()`: - 按 LinuxCNC 源程序 `xyzbc_switchkins.ngc` 的 `o call [...]` 参数展开。 - 展开 `xyzbc_switchkins_sub.ngc` 四象限流程与 `helix_bc.ngc` 子程序。 - 输出 29 个运动段、3226 个 20ms 执行路径采样、64 条逐行执行 trace、29 条每行轴值记录。 - Web evidence 新增: - `semanticExecutionPath` - `lineExecutionTrace` - `axisValuesByLine` - `coverage.semanticExecutionPathAvailable` - `coverage.lineExecutionTraceAvailable` - `coverage.axisValuesByLineAvailable` - native collector 新增同构字段,保留真实 `linuxcnc.stat()` 的 `executionPath`,同时新增源程序语义展开的 `semanticExecutionPath`,解决 native stat 低频采样无法逐点还原完整刀路的问题。 - compare 新增硬校验: - `pathComparison.semanticExecutionVsSemanticExecution` - `lineExecutionComparison` - `axisValuesByLineComparison` - Node smoke 增加默认程序语义执行路径断言。 ### 验证情况 - `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 tools/collect-native-xyzbc-trt-evidence.py --run --timeout 90 --startup-timeout 35` 通过。 - `npm run evidence:web` 通过。 - `npm run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。 - `npm run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `npm run build` 通过,输出 `gmoccapy_static_build=ok`。 ### 当前对标摘要 ```text compare.summary.checkCount = 34 compare.summary.passCount = 34 compare.summary.failCount = 0 compare.summary.blockers = [] semanticExecution.nativeSampleCount = 3226 semanticExecution.webSampleCount = 3226 semanticExecution.maxTcpErrorMm = 3.552713678800501e-15 semanticExecution.maxJointError = 3.552713678800501e-15 semanticExecution.maxToolAxisAngleDeg = 0 lineExecution.nativeTraceCount = 64 lineExecution.webTraceCount = 64 lineExecution.mismatchCount = 0 axisValues.nativeLineValueCount = 29 axisValues.webLineValueCount = 29 axisValues.maxTcpErrorMm = 0 axisValues.maxJointError = 0 axisValues.maxToolAxisAngleDeg = 0 axisValues.mismatchCount = 0 ``` ## 2026-07-03 完整 G 代码执行过程 JSON 对标 ### 本轮目标 继续完善“完整地记录 LinuxCNC 的源程序和 Web 数控系统仿真程序的 G 代码完整执行过程”,在已有 `lineExecutionTrace` 与 `axisValuesByLine` 基础上补齐完整动态执行步骤、源行覆盖和每步详细结果 JSON。 ### 已做事项 - 在 `app/src/runtime/axis-preview-path.js` 中新增 `gcodeExecutionProcess` 生成逻辑。 - `gcodeExecutionProcess` 包含两层记录: - `sourceLineCoverage`:记录 `xyzbc_switchkins.ngc`、`xyzbc_switchkins_sub.ngc`、`helix_bc.ngc` 每个源行的行号、原始语句、行类型、访问次数、产生运动次数、操作类型。 - `executionSteps`:按动态执行顺序记录每一步的源文件、行号、调用栈、执行状态、行类型和详细结果。 - 每步详细结果包含: - `operation` - `activeKinematicsBefore/After` - `parametersChanged` - `workOffsetBefore/After` - `modalChange` - `motion.startJoint/endJoint` - `motion.startTcp/endTcp` - `motion.endToolAxis` - `traceExecutionIndex` - native collector 与 Web collector 均输出同构 `gcodeExecutionProcess`。 - compare 新增 `gcodeExecutionProcessComparison`,逐步对比 native/Web 的完整执行过程 JSON。 - Node smoke 增加 `gcodeExecutionProcess` 规模和关键 helix 行结果断言。 ### 验证情况 - `npm run evidence:web` 通过。 - `/home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment python3 tools/collect-native-xyzbc-trt-evidence.py --run --timeout 90 --startup-timeout 35` 通过。 - `npm run evidence:compare` 通过,输出 `compare_xyzbc_trt_status=pass`。 - `npm run smoke:node` 通过,输出 `xyzbc_trt_web_app_smoke=ok`。 - `npm run build` 通过,输出 `gmoccapy_static_build=ok`。 ### 当前完整过程摘要 ```text compare.summary.checkCount = 35 compare.summary.passCount = 35 compare.summary.failCount = 0 compare.summary.blockers = [] gcodeExecutionProcess.nativeExecutionStepCount = 128 gcodeExecutionProcess.webExecutionStepCount = 128 gcodeExecutionProcess.nativeSourceLineCoverageCount = 65 gcodeExecutionProcess.webSourceLineCoverageCount = 65 gcodeExecutionProcess.mismatchCount = 0 motionStepCount = 29 switchkinsStepCount = 21 parameterAssignmentStepCount = 41 workOffsetStepCount = 9 callStepCount = 5 noMotionStepCount = 99 finalJoint = {x:0, y:0, z:10, b:0, c:0} finalKinematics = identity ``` ### 结论 当前 JSON 已完整记录 LinuxCNC 源程序与 Web 数控系统仿真程序的 G 代码执行过程:源程序每行覆盖、动态执行每步、每步详细结果、运动结果、轴值、TCP、toolAxis、switchkins、G54 偏置和参数赋值均已进入 native/Web evidence,并由 compare 进行硬校验。