Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/03-推进台账.md
2026-07-03 08:49:13 -04:00

1180 lines
66 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 03-推进台账
## 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 代码执行过程运行状态字段补强轮次
### 本轮目标
针对用户要求“刀具真实速度、完整刀具切削过程、实时轴位置、主轴转速、切削速度、进给量、换刀、冷却等全部写入 JSONLinuxCNC 源程序与 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 中 readycanvas 非空,`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 为真实 failWASM 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<xyzbc_switchkins_sub> 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 进行硬校验。