Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/05-验收证据.md
2026-07-07 18:45:26 -04:00

1827 lines
61 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.
# 05-验收证据
## 2026-07-07 18:18 EDT - AXIS 主控制按钮状态链路收敛证据
本轮按 `working/18-20260707-AXIS主控制按钮调用链与Web完善指南.md` 完成主控制按钮状态链路收敛,覆盖:
```text
ESTOP / RESET
Power ON / OFF
Home All
Run
Pause / Resume
Step
Task/HAL status -> Web policy/store 回写
Web evidence -> compare
```
关键实现证据:
```text
app/src/state/linuxcnc-task-policy.js
app/src/state/store.js
app/src/runtime/linuxcnc-task-hal-runtime.js
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp
tools/collect-web-xyzbc-trt-evidence.mjs
tests/node/verify_xyzbc_trt_web_app.mjs
tests/browser/xyzbc_trt_browser_smoke.html
wasm-port/tests/wasm/node/verify_task_state_matrix.mjs
```
执行命令:
```text
source /home/mes123456/emsdk/emsdk_env.sh && wasm-port/tools/build_task_hal_wasm.sh
node --check web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js
node --check web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/linuxcnc-task-policy.js
node --check web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-task-hal-runtime.js
node --check web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-web-xyzbc-trt-evidence.mjs
node wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs
node wasm-port/tests/wasm/node/verify_task_state_matrix.mjs
node wasm-port/tests/wasm/node/verify_task_hal_sdk.mjs
node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_run_feedback_loop.mjs
node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_run_preconditions.mjs
node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs
node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_rtcp_store.mjs
node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_impeller_feed_task_hal_run.mjs
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
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
```
关键输出:
```text
linuxcnc_task_hal_wasm_build=ok
linuxcnc_task_runtime_smoke=ok
task_state_matrix=ok
linuxcnc_task_hal_sdk=ok
run_feedback_status_loop_smoke=ok
run_preconditions_ini_profile_smoke=ok
linuxcnc_task_hal_runtime_smoke=ok
gmoccapy_xyzab_gates_smoke=ok
rtcp_store_smoke=ok
impeller_feed_task_hal_run=ok
gmoccapy_static_build=ok
xyzbc_trt_web_app_smoke=ok
xyzbc_trt_browser_smoke=ok
web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
compare_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
```
最新 evidence 摘要:
```text
web.status=ready-for-wasm-runtime
web.collectedAt=2026-07-07T22:17:57.900Z
web.executionPath.sampleCount=228
web.executionPath.status=ok
web.basicSimEquivalent.ready=true
web.taskHalEquivalence.ready=true
web.axisMainUi.ready=true
web.blockers=[]
compare.status=pass
compare.comparedAt=2026-07-07T22:17:58.519Z
compare.summary.checkCount=60
compare.summary.passCount=60
compare.summary.failCount=0
compare.summary.blockers=[]
compare.summary.nativeStatus=ok
compare.summary.webStatus=ready-for-wasm-runtime
compare.requiredImprovements=[]
```
结论AXIS 主控制按钮状态链路收敛完成。Web 主控制按钮不再依赖单一 `runState` 判断,而是由 LinuxCNC task/motion/home 状态事实驱动;当前 compare 仍为 `60/60 pass`
## 2026-07-05 18:57 EDT - Pause 按钮 LinuxCNC AXIS 对标修复证据
本轮按用户要求,以 `/home/mes123456/cnc_wams/linuxcnc` 源程序中的 AXIS 行为严格对标 Pause。
LinuxCNC 对标来源:
```text
/home/mes123456/cnc_wams/linuxcnc/share/axis/tcl/axis.tcl
/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py
```
关键源码事实:
```text
axis.tcl: .toolbar.program_pause -command task_pauseresume
axis.py: task_pause -> c.auto(linuxcnc.AUTO_PAUSE)
axis.py: task_resume -> c.auto(linuxcnc.AUTO_RESUME)
axis.py: task_pauseresume -> paused 时 AUTO_RESUME否则 interpreter 非 idle 时 AUTO_PAUSE
```
执行命令:
```text
node --check web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js
node --check web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/linuxcnc-task-policy.js
node --check web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/ui/axis-shell.js
node --check web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_xyzbc_trt_web_app.mjs
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
/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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
```
关键输出:
```text
xyzbc_trt_web_app_smoke=ok
xyzbc_trt_browser_smoke=ok
gmoccapy_static_build=ok
web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
native_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json
compare_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
```
最新 compare 摘要:
```text
compare.status=pass
compare.comparedAt=2026-07-05T22:57:05.625Z
compare.summary.checkCount=60
compare.summary.passCount=60
compare.summary.failCount=0
compare.summary.blockers=[]
compare.requiredImprovements=[]
```
结论Pause 按钮已恢复为 LinuxCNC AXIS 工具栏 `task_pauseresume` 语义,并通过 Node、浏览器、构建和 native/Web compare 复验。
## 2026-07-05 18:18 EDT - 按 working 完成全部任务复验证据
本轮按 `working` 文档继续执行,确认任务矩阵中 T-001 到 T-077 的完成状态仍可通过当前证据链复现。
执行命令:
```text
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
/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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
```
关键输出:
```text
web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
native_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json
compare_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
xyzbc_trt_web_app_smoke=ok
gmoccapy_static_build=ok
xyzbc_trt_browser_smoke=ok
```
最新 evidence 摘要:
```text
native.status=ok
native.collectedAt=2026-07-05T18:17:15-0400
native.coverage=35/35
native.executionMode=auto-run
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=[]
```
结论:本轮按 `working` 文档执行的全量复验通过。当前没有新增缺失功能、fail、blocker 或 required improvementT-001 到 T-077 仍为完成状态。
## 2026-07-05 18:08 EDT - 完全对标复验与文档修订证据
本轮按用户要求,对 Web 仿真系统除硬件相关外的全部仿真功能重新执行 LinuxCNC `xyzbc-trt` native/Web/compare/build/smoke 复验。native 权威源为:
```text
/home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
```
执行命令:
```text
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
/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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
```
关键输出:
```text
web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
native_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json
compare_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
xyzbc_trt_web_app_smoke=ok
xyzbc_trt_browser_smoke=ok
gmoccapy_static_build=ok
```
最新 evidence 摘要:
```text
native.status=ok
native.collectedAt=2026-07-05T18:07:01-0400
native.coverage=35/35
native.previewPath.sampleCount=1300
native.executionPath.sampleCount=4
native.semanticExecutionPath.sampleCount=1300
native.lineExecutionTrace=64
native.axisValuesByLine=29
web.status=ready-for-wasm-runtime
web.collectedAt=2026-07-05T22:06:45.346Z
web.coverage=49/49
web.previewPath.sampleCount=1300
web.executionPath.sampleCount=228
web.semanticExecutionPath.sampleCount=1300
web.lineExecutionTrace=64
web.axisValuesByLine=29
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=[]
```
关键路径和执行过程对比:
```text
semanticExecutionVsSemanticExecution.status=pass
nativeSampleCount=1300
webSampleCount=1300
samplePeriodMs=50
maxTcpErrorMm=3.552713678800501e-15
rmsTcpErrorMm=4.515420281608176e-16
maxJointError=3.552713678800501e-15
maxToolAxisAngleDeg=0
machineStateMismatchCount=0
sampleCountDelta=0
lineExecutionComparison.status=pass
axisValuesByLineComparison.status=pass
gcodeExecutionProcessComparison.status=pass
```
结论:本轮完全对标复验通过。除实体硬件 I/O 和物理设备接入外,当前 Web 仿真项目在源码、配置、运行、UI、HAL/task、Vismach 等效、路径、G 代码执行过程、错误路径和证据链范围内未发现新增缺失功能。
## 2026-07-04 18:22 EDT - P-002 强制复验证据
本轮按 `working/12-20260704-真实执行复验与缺失功能工作计划.md` 的 P-002 规则,重新执行当前工作区的 native/Web/compare/smoke 复验。
执行命令:
```text
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
/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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
```
关键输出:
```text
web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
native_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json
compare_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
xyzbc_trt_web_app_smoke=ok
xyzbc_trt_browser_smoke=ok
```
最新 compare 摘要:
```text
status=pass
checkCount=60
passCount=60
failCount=0
blockers=[]
requiredImprovements=[]
nativeStatus=ok
webStatus=ready-for-wasm-runtime
```
结论P-002 强制复验通过。当前没有新增缺失功能、fail、blocker 或 required improvement。
## 2026-07-04 18:12 EDT - 真实执行复验与缺失功能分析证据
本轮按用户要求重新真实执行 native LinuxCNC 与 Web 仿真项目,并重新生成 compare。
执行命令:
```text
/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
npm --prefix /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
npm --prefix /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
npm --prefix /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
npm --prefix /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
```
关键输出:
```text
native_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json
web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
xyzbc_trt_web_app_smoke=ok
compare_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
xyzbc_trt_browser_smoke=ok
```
最新 compare 摘要:
```text
status=pass
checkCount=60
passCount=60
failCount=0
blockers=[]
nativeStatus=ok
webStatus=ready-for-wasm-runtime
```
关键对比数据:
```text
semanticExecutionVsSemanticExecution.status=pass
nativeSampleCount=1300
webSampleCount=1300
maxTcpErrorMm=3.552713678800501e-15
maxJointError=3.552713678800501e-15
maxToolAxisAngleDeg=0
machineStateMismatchCount=0
lineExecutionComparison.status=pass
nativeTraceCount=64
webTraceCount=64
mismatchCount=0
axisValuesByLineComparison.status=pass
nativeLineValueCount=29
webLineValueCount=29
maxTcpErrorMm=0
maxJointError=0
maxToolAxisAngleDeg=0
mismatchCount=0
gcodeExecutionProcessComparison.status=pass
nativeExecutionStepCount=128
webExecutionStepCount=128
nativeSourceLineCoverageCount=65
webSourceLineCoverageCount=65
mismatchCount=0
```
结论:本轮真实执行复验未发现新增缺失功能。缺失功能分析和后续工作计划已写入 `working/12-20260704-真实执行复验与缺失功能工作计划.md`
## 2026-07-04 17:57 EDT - T-051 到 T-075 源码/运行双基线复验证据
本轮重新生成:
```text
working/evidence/native-xyzbc-trt-evidence.json
working/evidence/web-xyzbc-trt-evidence.json
working/evidence/compare-xyzbc-trt-evidence.json
```
执行命令:
```text
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
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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
```
关键输出:
```text
native_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json
web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
compare_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
xyzbc_trt_web_app_smoke=ok
gmoccapy_static_build=ok
xyzbc_trt_browser_smoke=ok
```
最新 compare 摘要:
```text
status=pass
checkCount=60
passCount=60
failCount=0
blockers=[]
nativeStatus=ok
webStatus=ready-for-wasm-runtime
```
新增严格对标检查均通过:
```text
sourceManifestComparison=pass
runtimeLaunchComparison=pass
iniFullComparison=pass
halGraphComparison=pass
kinematicsFormulaComparison=pass
remapSemanticsComparison=pass
pyvcpPostguiComparison=pass
axisUiBehaviorComparison=pass
visualComparison=pass
servoTaskTimingComparison=pass
runtimeExecutionComparison=pass
webStagingHashComparison=pass
wasmSourceBindingComparison=pass
taskHalFullStateComparison=pass
limitInterlocksComparison=pass
toolParameterComparison=pass
programCorpusComparison=pass
nativeWebVisualComparison=pass
errorPathComparison=pass
dualBaselineComparison=pass
evidenceClassificationComparison=pass
rerunEntryComparison=pass
reverseSourceIndexComparison=pass
performanceBudgetComparison=pass
strictAcceptanceComparison=pass
```
结论T-051 到 T-075 已从“待实现”升级为“完成”。当前严格完整对标以最新 native/Web/compare JSON 为准;历史 fail 记录仍保留为推进过程档案。
## 2026-07-03 锥形刀尖与刀杆方向一致性验收
### 新增截图证据
```text
working/screenshots/web-tool-tip-axis-fixed-20260703T080358Z/running-helix-tool-tip-axis-fixed-full.png
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
```
### 关键断言
```text
toolAxisVector = { x: 0.24184476264797528, y: 0.24184476264797522, z: 0.9396926207859084 }
threeToolAxis = { x: 0.242, y: 0.242, z: 0.94 }
threeToolGlyphAxis = { x: 0.242, y: 0.242, z: 0.94 }
programUiExecution.sourceFile = helix_bc.ngc
programUiExecution.line = 17
programUiExecution.operation = feed-helix
```
### 验证命令
```bash
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
```
### 结果
```text
gmoccapy_static_build=ok
xyzbc_trt_web_app_smoke=ok
xyzbc_trt_browser_smoke=ok
```
结论:刀具几何已改为锥形刀尖和刀杆共用同一本地 `+Z` 刀轴,再由 `toolAxisVector` 统一定向。Browser smoke 已增加 `threeToolGlyphAxis` 与实时 `toolAxisVector` 的一致性检查。
## 2026-07-03 真实 G 代码过程截图补充验收
### 新增截图证据
```text
working/screenshots/web-simulation-real-gcode-process-20260703T074714Z/000-loaded-real-source-full.png
working/screenshots/web-simulation-real-gcode-process-20260703T074714Z/001-loaded-real-source-program.png
working/screenshots/web-simulation-real-gcode-process-20260703T074714Z/010-running-helix-feed-full.png
working/screenshots/web-simulation-real-gcode-process-20260703T074714Z/011-running-helix-feed-program.png
working/screenshots/web-simulation-real-gcode-process-20260703T074714Z/012-running-process-monitor.png
working/screenshots/web-simulation-real-gcode-process-20260703T074714Z/manifest.json
```
### 图片分析结论
- `011-running-helix-feed-program.png` 明确显示当前执行源行为 `helix_bc.ngc:17`,语句为 `f#<frate> g2i#<r>z#<zmin> p#<n>`operation 为 `feed-helix`
- 画面中同时显示主程序入口 `xyzbc_switchkins.ngc:2 o<xyzbc_switchkins_sub> call [10] [5] [10][1000][3][0][20][45][20]`,以及展开后的 `helix_bc.ngc:15-19` 执行窗口。
- 当前姿态为 `B20.000 C45.000`TCP/Joint 坐标同步Tool axis 为 `I0.242 J0.242 K0.940`Feed 为 `1000.0 mm/min cutting`
- manifest 记录 `executionStepCount=128``motionStepCount=29``parameterAssignmentStepCount=41``samplePeriodMs=50``sampleIndex=55/1300`
### 验证命令
```bash
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
```
### 结果
```text
gmoccapy_static_build=ok
xyzbc_trt_web_app_smoke=ok
xyzbc_trt_browser_smoke=ok
```
结论:截图不再只是显示主程序三行文本,而是能在程序区直接看到真实 G 代码展开、调用栈、当前执行步骤、机床姿态、刀轴方向、切削进给和最近执行步骤。
## 2026-07-03 截图真实执行过程 UI 验收
### 命令
```bash
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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
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
```
### 结果
```text
xyzbc_trt_web_app_smoke=ok
gmoccapy_static_build=ok
xyzbc_trt_browser_smoke=ok
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
```
### 关键断言
```text
programAxisPreviewPath.samples[0].sourceFile = xyzbc_switchkins_sub.ngc
programAxisPreviewPath.samples[0].statement 包含 g53 g0
programUiExecution.source = programAxisPreviewPath.samples
programUiExecution.samplePeriodMs = 50
programUiExecution.sourceFile = programRuntimeFeedback.sourceFile
programUiExecution.line = programRuntimeFeedback.line
linuxCncProcessMonitor.path.uiExecution.sourceFile = programUiExecution.sourceFile
linuxCncProcessMonitor.path.activeGcode = programUiExecution.statement
state.toolAxisVector = programUiExecution.toolAxis.i/j/k
canvas.data-three-tool-axis = state.toolAxisVector
program pane dataset liveSourceFile/liveSampleIndex = state.programUiExecution
process monitor dataset liveSourceFile/liveSourceLine = state.programUiExecution
```
结论:
- 截图页面中的程序区和监控区现在能直接呈现真实展开 G 代码执行过程。
- 刀具实时位置、已执行路径、刀头方向和刀杆方向均由同一个 50ms 样本派生。
- browser smoke 已覆盖页面 DOM、state 和 canvas dataset 的一致性。
## 2026-07-02 23:50 EDT working 复核验收
### 命令
```bash
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
/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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
```
### 结果
```text
xyzbc_trt_web_app_smoke=ok
py_compile=ok
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
native_xyzbc_trt_evidence=.../working/evidence/native-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
gmoccapy_static_build=ok
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
semanticExecution.machineStateMismatchCount = 0
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.mismatchCount = 0
gcodeExecutionProcess.nativeExecutionStepCount = 128
gcodeExecutionProcess.webExecutionStepCount = 128
gcodeExecutionProcess.nativeSourceLineCoverageCount = 65
gcodeExecutionProcess.webSourceLineCoverageCount = 65
gcodeExecutionProcess.mismatchCount = 0
```
结论:
- 当前最新证据以 50ms 采样周期记录 native/Web 预览路径、runtime 执行反馈路径和源程序语义执行路径。
- native/Web `semanticExecutionPath` 样本数量均为 1300运行状态字段逐样本硬比较 mismatch 为 0。
- 逐行 G 代码执行、每行轴值和完整 G 代码执行过程 JSON 全部同构compare 为 `35/35 pass`
- 本文件中较早的 `fail` 记录为历史推进过程,不代表当前验收状态;当前状态以本节和 `working/evidence/compare-xyzbc-trt-evidence.json` 为准。
## 运行状态字段补强验收
### 命令
```bash
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
/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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
```
### 结果
```text
xyzbc_trt_web_app_smoke=ok
py_compile=ok
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
native_xyzbc_trt_evidence=.../working/evidence/native-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
gmoccapy_static_build=ok
```
### JSON 摘要
```text
native.status = ok
web.status = ready-for-wasm-runtime
compare.status = pass
compare.summary.passCount = 35/35
native.pathSampling.samplePeriodMs = 50
web.pathSampling.samplePeriodMs = 50
native.semanticExecutionPath.sampleCount = 1300
web.semanticExecutionPath.sampleCount = 1300
compare.pathComparison.semanticExecutionVsSemanticExecution.machineStateMismatchCount = 0
compare.gcodeExecutionProcessComparison.mismatchCount = 0
arc.machineState.cutting.active = true
arc.machineState.cutting.cuttingSpeedMmPerMin = 1000
arc.machineState.feed.programmedMmPerMin = 1000
arc.machineState.feed.actualMmPerMin = 1000
arc.machineState.feed.overridePercent = 100
arc.machineState.tool.id = 2
arc.machineState.tool.pocket = 2
arc.machineState.tool.length = 10
arc.machineState.tool.diameter = 8
arc.machineState.coolant.mist = false
arc.machineState.coolant.flood = false
```
结论:
- native/Web 50ms 语义执行样本数量完全一致,均为 1300。
- 每个样本除原有 `sampleIndex``timeMs``line``motionType``activeKinematics``tool``joint``tcp``toolAxis``feed``spindle` 外,新增同构 `machineState`
- `machineState` 覆盖主轴转速、方向、进给、切削速度、当前刀具、换刀状态、冷却状态;逐行轴值与完整执行步骤也记录该状态。
- compare 已把 `machineState` 纳入逐样本、逐行轴值、完整 G 代码执行过程的 native/Web 硬比较,当前 mismatch 为 0。
## 50ms G 代码执行过程同步验收
### 命令
```bash
python3 -m py_compile web-rtcp-5axis-xyzbc-trt-sim-plan/tools/collect-native-xyzbc-trt-evidence.py
/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:web
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
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
```
### 结果
```text
py_compile=ok
native_xyzbc_trt_evidence=.../working/evidence/native-xyzbc-trt-evidence.json
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
xyzbc_trt_web_app_smoke=ok
gmoccapy_static_build=ok
```
### JSON 摘要
```text
native.pathSampling.samplePeriodMs = 50
native.previewPath.samplePeriodMs = 50
native.previewPath.sampleCount = 1300
native.executionPath.samplePeriodMs = 50
native.executionPath.sampleCount = 4
native.executionPath.taskHal.completed = true
native.semanticExecutionPath.samplePeriodMs = 50
native.semanticExecutionPath.sampleCount = 1300
web.pathSampling.samplePeriodMs = 50
web.previewPath.samplePeriodMs = 50
web.previewPath.sampleCount = 1300
web.executionPath.samplePeriodMs = 50
web.executionPath.sampleCount = 228
web.executionPath.taskHal.completed = true
web.semanticExecutionPath.samplePeriodMs = 50
web.semanticExecutionPath.sampleCount = 1300
lineExecution.nativeTraceCount = 64
lineExecution.webTraceCount = 64
axisValues.nativeLineValueCount = 29
axisValues.webLineValueCount = 29
gcodeExecutionProcess.nativeExecutionStepCount = 128
gcodeExecutionProcess.webExecutionStepCount = 128
gcodeExecutionProcess.nativeSourceLineCoverageCount = 65
gcodeExecutionProcess.webSourceLineCoverageCount = 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
```
结论:
- 当前 native/Web 刀具预览路径、runtime 执行反馈路径和源程序语义执行路径均统一为 50ms 采样周期。
- 每个样本继续记录 `sampleIndex``timeMs``line``motionType``activeKinematics``tool``joint``tcp``toolAxis``feed``spindle`
- 完整 G 代码执行过程 JSON 继续覆盖源行、动态执行步骤、参数赋值、switchkins、G10 偏置、运动起止轴值、TCP、toolAxis、进给和最终状态native/Web compare 全部通过。
## native/Web 全量闭环最终验收
### 2026-07-02 15:45 EDT 复核补充
本轮修正 native evidence 采集器,使以下命令在没有预先运行 `xyzbc-trt` LinuxCNC 实例时也可直接重现:
```bash
/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
```
验证结果:
```text
native_xyzbc_trt_evidence=.../working/evidence/native-xyzbc-trt-evidence.json
native.status = ok
native.linuxcncRuntime.startup.startedByCollector = true
native.previewPath.sampleCount = 3226
native.executionPath.sampleCount = 7
native.executionPath.taskHal.completed = true
compare.summary.checkCount = 29
compare.summary.passCount = 29
compare.summary.failCount = 0
compare.summary.blockers = []
```
随后重新执行 `smoke:node``evidence:web``evidence:compare``build``smoke:browser` 均通过。
### 命令
```bash
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 smoke:node
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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
```
### 结果
```text
py_compile=ok
xyzbc_trt_web_app_smoke=ok
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
native_xyzbc_trt_evidence=.../working/evidence/native-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=pass
gmoccapy_static_build=ok
xyzbc_trt_browser_smoke=ok
```
### JSON 摘要
```text
native.previewPath.samplePeriodMs = 50
native.previewPath.sampleCount = 1300
native.executionPath.samplePeriodMs = 50
native.executionPath.sampleCount = 4
native.executionPath.taskHal.completed = true
native.basicSimEquivalent.ready = true
native.taskStateFlow.ready = true
web.previewPath.samplePeriodMs = 50
web.previewPath.sampleCount = 1300
web.executionPath.samplePeriodMs = 50
web.executionPath.sampleCount = 228
web.executionPath.taskHal.completed = true
web.basicSimEquivalent.ready = true
web.ngcguiExecution.ready = true
web.nativeStateFlowReview.ready = true
compare.summary.checkCount = 35
compare.summary.passCount = 35
compare.summary.failCount = 0
compare.summary.blockers = []
compare.pathComparison.previewVsPreview.comparable = true
compare.pathComparison.executionVsExecution.comparable = true
compare.pathComparison.previewVsExecutionNative.comparable = true
compare.pathComparison.previewVsExecutionWeb.comparable = true
```
结论:
- native/Web 刀具预览路径和执行路径均使用 50ms 采样周期compare 已进入可比误差统计。
- native/Web basic_sim 等效、Ngcgui/remap 子程序执行、TRAJ/AXIS/JOINT 限制、HAL pin、按钮联锁和状态流复核均已纳入证据并通过 compare。
- `04-任务矩阵.md` 中 T-001 到 T-040 均为完成。
## Web OPFS 与 AXIS 首屏等效验收
### 命令
```bash
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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
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
```
### 结果
```text
xyzbc_trt_web_app_smoke=ok
gmoccapy_static_build=ok
xyzbc_trt_browser_smoke=ok
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=fail fail_count=5
```
### 浏览器 OPFS 断言
```text
machineFileSeedReady.save.storageMode = opfs
machineFileStaging.storageMode = opfs
machineFileStaging.storageCapability.opfsAvailable = true
OPFS readback xyzbc_switchkins.ngc contains M428/M429
saveSession().storageMode = opfs
OPFS readback session contains "machineProfile": "xyzbc-trt"
saveToolDb().storageMode = opfs
OPFS readback tool table contains T2 and Z10
```
### AXIS 首屏证据
```text
web.axisMainUi.ready = true
web.axisMainUi.profileId = xyzbc-trt
web.axisMainUi.coordinates = XYZBC
web.axisMainUi.missingCapabilities = []
web.coverage.axisMainUiEquivalent = true
compare.summary.passCount = 20
compare.summary.failCount = 5
```
结论:
- 目标 Web app 默认不再把 machine files、session、tool table 静默保存到 memory fallback浏览器路径强制 OPFS。
- `smoke:browser` 已从 OPFS 读回程序、会话和刀具表内容,证明不是仅生成 OPFS path。
- Node evidence 仍使用内存存储模拟文件内容,这是非浏览器采集限制;真实 Web 文件系统验收以 browser smoke 为准。
## Tool table 到 tool-offset 闭环验收
### 命令
```bash
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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
```
### 结果
```text
xyzbc_trt_web_app_smoke=ok
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=fail fail_count=5
gmoccapy_static_build=ok
xyzbc_trt_browser_smoke=ok
```
### JSON 摘要
```text
web.toolRuntime.ready = true
web.toolRuntime.activeOffsetApplied = true
web.toolRuntime.activeToolNumber = 2
web.toolRuntime.activePocket = 2
web.toolRuntime.kinematics.toolOffsetZ = 10
web.toolRuntime.pathTool.length = 10
web.toolRuntime.pathTool.diameter = 8
web.toolRuntime.vismach.toolOffset = 10
web.toolOffsetClosure.closed = true
web.coverage.toolTableToToolOffsetClosed = true
web.previewPath.samples[0].tool = { id: 2, pocket: 2, length: 10, diameter: 8 }
web.executionPath.samples[0].tool = { id: 2, pocket: 2, length: 10, diameter: 8 }
compare.summary.passCount = 19
compare.summary.failCount = 5
compare.checks["web tool table active offset drives kinematics, path, and Vismach"].status = pass
```
结论:
- `xyzbc-trt.tbl``T2 P2 Z10 D8` 已进入 Web tool DB 运行时摘要。
- 当前 active tool offset 已同时写入 kinematics `motion.tooloffset.z` 等效值、路径样本 tool 字段和 Vismach `tool-offset` pin。
- 默认程序本身无 T/M6/G43因此 Web evidence 记录 `defaultActivationUsed=true`,用于证明 tool table 偏置链路;带 T/M6/G43 的程序会使用程序扫描命令。
- compare 仍保持失败是正确结果:剩余 5 项仍来自 native path evidence 未重采集。
## Vismach 3D pin 驱动模型验收
### 命令
```bash
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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser
```
### 结果
```text
xyzbc_trt_web_app_smoke=ok
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=fail fail_count=5
gmoccapy_static_build=ok
xyzbc_trt_browser_smoke=ok
```
### JSON 摘要
```text
web.status = ready-for-wasm-runtime
web.blockers = []
web.vismachEquivalent.pins = table-x,saddle-y,spindle-z,tilt-b,rotate-c,tool-offset,x-offset,z-offset
web.vismachEquivalent.pinValues.table-x = 43
web.vismachEquivalent.pinValues.saddle-y = -32.15
web.vismachEquivalent.pinValues.spindle-z = -11.306
web.vismachEquivalent.pinValues.tool-offset = 84.019
web.vismachEquivalent.pinValues.x-offset = -20
web.vismachEquivalent.pinValues.z-offset = -15
web.vismachEquivalent.halNets.length = 9
web.vismachEquivalent.semanticBoundary = web_threejs_vismach_equivalent_driven_by_xyzbc_trt_hal_pins
```
结论:
- Web 3D 参考模型已由 Vismach 等效 pin 状态驱动。
- canvas dataset 已输出 `threeVismachPins``threeVismachTransforms``threeVismachPinDrivenModel`,后续浏览器 smoke 可直接断言。
- `smoke:browser` 已断言默认 `xyzbc-trt`、三类 worker runtime ready、canvas 非空、Vismach pin/transform dataset。
- compare 仍保持失败是正确结果:剩余 5 项仍来自 native path evidence 未重采集。
## evidence 字段与路径对比实现验收
### 命令
```bash
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
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run build
```
### 结果
```text
xyzbc_trt_web_app_smoke=ok
collect-native-xyzbc-trt-evidence.py py_compile=ok
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=fail fail_count=5
gmoccapy_static_build=ok
```
### JSON 证据
```text
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 evidence 已包含:
```text
pathSampling.samplePeriodMs = 50
previewPath.samplePeriodMs = 50
executionPath.samplePeriodMs = 50
startupSequence
iniDisplay
halNets
kinematicsPins
axisJointLimits
switchkinsTransitions
uiEquivalence
vismachEquivalent
ngcguiSubroutines
demoPrograms
vismachEquivalent.pinValues
vismachEquivalent.transforms
```
当前 compare evidence 已包含:
```text
pathComparison.previewVsPreview
pathComparison.executionVsExecution
pathComparison.previewVsExecutionNative
pathComparison.previewVsExecutionWeb
```
结论:
- 静态/profile/staging/evidence 字段已实现并通过 Node smoke。
- compare 仍保持失败是正确结果Web WASM artifact、preview path 和 execution path 已具备native evidence 尚未用新基线重采集 path 样本。
- `npm run build` 当前已通过,说明目标 app 可在现有 WASM artifact 下完成静态构建。
## Web task/HAL executionPath 采集验收
### 命令
```bash
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
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
```
### 结果
```text
web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=fail fail_count=5
xyzbc_trt_web_app_smoke=ok
gmoccapy_static_build=ok
```
### JSON 摘要
```text
web.wasm.ready = true
web.blockers = []
web.previewPath.samplePeriodMs = 50
web.previewPath.sampleCount = 1300
web.executionPath.samplePeriodMs = 50
web.executionPath.sampleCount = 228
web.executionPath.source = web-linuxcnc-task-hal-execution
web.executionPath.taskHal.completed = true
compare.summary.passCount = 18
compare.summary.failCount = 5
```
结论:
- Web 侧 `previewPath` 已由 `linuxcnc_interp`/TP WASM 轨迹重采样为 20ms。
- Web 侧 `executionPath` 已由 `linuxcnc_task_hal` WASM 执行反馈生成 20ms 样本。
- compare 剩余 5 项失败均来自 native evidence 尚无 `previewPath`/`executionPath` 样本和采样周期字段。
## DOCX 整合验收
### 源文件
```text
web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-web-cnc-simulation-design-task-and-technical-plan.docx
```
### 输出文件
```text
web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
```
### 包结构检查结论
```text
DOCX 正文段落数507
DOCX 图片数5
图片文件:
- word/media/xyzbc-trt-axis-window.png
- word/media/xyzbc-trt-desktop.png
- word/media/xyzbc-trt-json-compare-flow.png
- word/media/xyzbc-trt-logic-map.png
- word/media/xyzbc-trt-web-architecture.png
```
### Markdown 输出检查
```bash
wc -l web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
rg -n "^## |图 1|图 2|图 3|图 4|图 5|状态联锁|Evidence JSON|开发任务分解|验收标准|风险" web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
rg -n "!\\[" web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
```
结果:
```text
364 web-rtcp-5axis-xyzbc-trt-sim-plan/working/09-设计任务书与技术方案整合.md
检索到 1-11 章关键章节。
检索到 5 张图片引用,均指向 ../doc/assets/。
```
结论:
- DOCX 任务书已整合到 `working/09-设计任务书与技术方案整合.md`
- 该 Markdown 保留任务书、技术方案、开发任务分解、验收标准、风险控制、源码级程序逻辑分析和状态联锁章节。
- `working/README.md``04-任务矩阵.md` 已登记该整合项。
## 本轮命令证据
### 读取对标文档
```bash
sed -n '1,240p' web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-runtime-files.md
sed -n '241,520p' web-rtcp-5axis-xyzbc-trt-sim-plan/doc/xyzbc-trt-runtime-files.md
```
结论:
- `xyzbc-trt.ini` 使用 `DISPLAY=axis``PYVCP=./xyzbc-trt.xml``OPEN_FILE=./demos/xyzbc_switchkins.ngc`
- `switchkins_postgui.hal` 连接 PyVCP 按钮到 `halui.mdi-command-00/01/02`
- `M429/M428/M430` 分别选择 identity、XYZBC TCP、userk。
### 检查 WASM 支撑
```bash
rg -n "xyzbc|xyzbc-trt|supportedLinuxCncKinematicsModules|linuxcnc_xyzbc" wasm-port web-rtcp-5axis-sim-plan/tests web-rtcp-5axis-sim-plan/app/src
```
结论:
- SDK 包含 `xyzbc-trt -> linuxcnc_xyzbc_trt_kinematics.wasm`
- native probe 包含 `linuxcnc_xyzbc_trt_kinematics_probe.cpp`
- remap 执行 harness 包含 `xyzbc-trt.ini``xyzbc_switchkins.ngc``boat-xyzbc.ngc`
### 检查当前 artifact
```bash
find wasm-port/build/wasm -maxdepth 3 -type f
```
结果:
```text
find: wasm-port/build/wasm: No such file or directory
```
结论:
- 当前仓库没有已生成的 WASM artifact。
- 完整浏览器运行前必须先构建 WASM。
### 检查参数文件基线
```bash
ls -l wasm-port/vendor/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var /home/mes123456/linuxcnc-master/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var
```
结果:
```text
/home/mes123456/linuxcnc-master/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc.var 存在
wasm-port/vendor/.../xyzbc.var 当前不存在
linuxcnc/.../xyzbc.var 当前不存在
```
结论:
- `xyzbc.var` 是需要补充导入的运行态参数文件基线。
- 历史轮次已从 `/home/mes123456/linuxcnc-master/.../xyzbc.var` 导入到 `wasm-port/vendor/linuxcnc/.../xyzbc.var`,并加入 `wasm-port/tools/source-manifest.txt`;后续若以 `/home/mes123456/cnc_wams/linuxcnc` 为新 native 基线,应重新核对该参数文件是否与当前运行树一致。
## 已运行验收
### native 基线切换验收
后续真实 LinuxCNC 对标基线统一为:
```text
/home/mes123456/cnc_wams/linuxcnc
```
必须先确认这些文件存在:
```bash
test -x /home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment
test -x /home/mes123456/cnc_wams/linuxcnc/bin/axis
test -x /home/mes123456/cnc_wams/linuxcnc/bin/xyzbc-trt-gui
test -f /home/mes123456/cnc_wams/linuxcnc/rtlib/xyzbc-trt-kins.so
test -f /home/mes123456/cnc_wams/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini
```
本轮自动检查结果:
```text
scripts/rip-environment: ok
scripts/linuxcnc: ok
bin/axis: ok
bin/xyzbc-trt-gui: ok
bin/milltask: ok
bin/linuxcncsvr: ok
bin/halui: ok
rtlib/xyzbc-trt-kins.so: ok
rtlib/tpmod.so: ok
lib/python/linuxcnc.so: ok
xyzbc-trt.ini: ok
```
说明:
- native evidence 的 `sourceRoot` 后续必须写为 `/home/mes123456/cnc_wams/linuxcnc`
- `/home/mes123456/linuxcnc-master` 只作为历史运行参考;新一轮 Web 对标和 compare 以 `/home/mes123456/cnc_wams/linuxcnc` 的真实执行结果为准。
### LinuxCNC RIP 编译证据
执行命令:
```bash
cd /home/mes123456/cnc_wams/linuxcnc/src
./autogen.sh
./configure --with-realtime=uspace --disable-build-documentation
env -u DEBUG make -j"$(nproc)"
sudo -n make setuid
```
关键过程:
- 首次直接执行 `make -j"$(nproc)"` 失败,原因是当前 shell 环境存在 `DEBUG=release`LinuxCNC Makefile 将 `$(DEBUG)` 拼入编译参数,导致 `gcc/c++` 把裸参数 `release` 当作输入文件。
- 使用 `env -u DEBUG make -j"$(nproc)"` 重新编译通过。
- `sudo -n make setuid` 成功设置 `bin/rtapi_app``bin/linuxcnc_module_helper` 的 root/setuid 权限。
验证命令:
```bash
source /home/mes123456/cnc_wams/linuxcnc/scripts/rip-environment >/dev/null
command -v linuxcnc
command -v axis
command -v halcmd
python3 - <<'PY'
import linuxcnc
print("python_linuxcnc_import=ok")
print("linuxcnc_module=", linuxcnc.__file__)
PY
```
验证结果:
```text
/home/mes123456/cnc_wams/linuxcnc/scripts/linuxcnc
/home/mes123456/cnc_wams/linuxcnc/bin/axis
/home/mes123456/cnc_wams/linuxcnc/bin/halcmd
python_linuxcnc_import=ok
linuxcnc_module= /home/mes123456/cnc_wams/linuxcnc/lib/python/linuxcnc.so
```
### `xyzbc-trt` 快捷方式与执行证据
快捷方式路径:
```text
/home/mes123456/cnc_wams/linuxcnc/linuxcnc-rtcp-5axis-shortcuts/table-rotary-tilting/xyzbc-trt.desktop
```
快捷方式内容:
```text
Exec=/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
Icon=/home/mes123456/cnc_wams/linuxcnc/linuxcncicon.png
```
执行方式:
```bash
setsid bash -lc 'cd /home/mes123456/cnc_wams/linuxcnc && exec /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' \
> /tmp/xyzbc-trt-cnc_wams-linuxcnc.log 2>&1 < /dev/null &
```
当前进程证据:
```text
/bin/bash /home/mes123456/cnc_wams/linuxcnc/scripts/linuxcnc .../xyzbc-trt.ini
linuxcncsvr -ini /home/mes123456/cnc_wams/linuxcnc/.../xyzbc-trt.ini
/home/mes123456/cnc_wams/linuxcnc/bin/rtapi_app load tpmod
milltask -ini /home/mes123456/cnc_wams/linuxcnc/.../xyzbc-trt.ini
halui -ini /home/mes123456/cnc_wams/linuxcnc/.../xyzbc-trt.ini
/usr/bin/python3.13 /home/mes123456/cnc_wams/linuxcnc/bin/hal_manualtoolchange
/usr/bin/python3.13 /home/mes123456/cnc_wams/linuxcnc/bin/xyzbc-trt-gui
/usr/bin/python3.13 /home/mes123456/cnc_wams/linuxcnc/bin/axis -ini /home/mes123456/cnc_wams/linuxcnc/.../xyzbc-trt.ini
```
HAL/Python 验证:
```text
motion.switchkins-type = 0
loaded file = ./demos/xyzbc_switchkins.ngc
axis_mask = 55
position = [0.0, 0.0, 0.0, 0.0, 0.0]
```
目标 Node smoke
```bash
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node
```
实际输出:
```text
xyzbc_trt_web_app_smoke=ok
```
静态 diff 检查:
```bash
git diff --check -- web-rtcp-5axis-xyzbc-trt-sim-plan
```
实际结果:无输出,退出码为 0。
WASM artifact 检查:
```bash
find wasm-port/build/wasm -maxdepth 3 -type f
```
实际输出:
```text
find: wasm-port/build/wasm: No such file or directory
```
完整 WASM 验收:
```bash
wasm-port/tools/build_kinematics_wasm.sh
wasm-port/tools/build_wasm_core.sh
wasm-port/tools/build_tp_wasm.sh
wasm-port/tools/build_task_hal_wasm.sh
wasm-port/tests/wasm/node/verify_kinematics_wasm.sh
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/wasm/node/verify_task_hal_wasm.sh
```
### native/Web JSON 证据
真实 native 采集命令:
```bash
/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 90
```
输出:
```text
native_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/native-xyzbc-trt-evidence.json
```
结果摘要:
```text
status=ok
executionMode=auto-run
commandResult.status=completed
commandResult.events=1462
```
Web 采集命令:
```bash
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web
```
输出:
```text
web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json
```
结果摘要:
```text
profileDefaultXyzbc=true
iniReady=true
opfsStaged=true
pyvcpXmlStaged=true
remapsStaged=true
toolTableStaged=true
parameterFileStaged=true
defaultProgramStaged=true
wasmArtifactsReady=false
```
对比命令:
```bash
npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare
```
输出:
```text
compare_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json
compare_xyzbc_trt_status=fail fail_count=1
```
当前结论:
- 12 项对比中 11 项通过。
- 唯一失败项是 `required WASM artifacts available`
- 当前环境已安装 `emcc 6.0.2`;剩余前置是执行 `wasm-port` 构建脚本生成 artifact并重跑 evidence。
### 全量对标 JSON 验收要求
后续 native/Web evidence JSON 必须按 `07-全量对标追踪矩阵.md` 增加这些顶层或等效字段:
```text
startupSequence
iniDisplay
halNets
kinematicsPins
axisJointLimits
switchkinsTransitions
toolTable
toolOffsetFlow
uiEquivalence
vismachEquivalent
ngcguiSubroutines
demoPrograms
pathSampling
previewPath
executionPath
```
`compare-xyzbc-trt-evidence.json` 必须新增或扩展这些检查类别:
```text
startup-sequence
ini-display
hal-nets
kinematics-pins
axis-joint-limits
switchkins-transitions
tool-offset-flow
ui-equivalence
vismach-equivalence
ngcgui-subroutines
demo-programs
path-preview
path-execution
path-comparison
```
必须逐项验证:
- `.desktop/rip-environment/linuxcnc` 启动顺序在 Web 中有等效 `startupSequence`
- `[DISPLAY]``DISPLAY``GEOMETRY``OPEN_FILE``PYVCP``JOG_AXES``POSITION_OFFSET``POSITION_FEEDBACK``MAX_*``TOOL_EDITOR``NGCGUI_*` 有 Web 等效字段或 UI。
- `[TRAJ]``[KINS]``[EMCMOT]``[TASK]``[EMCIO]` 的关键配置进入 JSON。
- `switchkins_postgui.hal``pyvcp.*``halui.mdi-command-*` 的连接进入 `halNets`
- `basic_sim.tcl` 的模拟 joint/home/spindle/manualtoolchange 语义由 task/HAL evidence 证明。
- `xyzbc-trt-gui.py` 的 HAL pin 和模型层级由 `vismachEquivalent` 证明。
- `xyzbc-trt-kins` 的 offset、rot-point、conventional-directions、tool-offset pin 由 `kinematicsPins` 证明。
- `xyzbc_switchkins_sub.ngc``centering.ngc``helix_bc.ngc``xyzbc_switchkins.ngc``boat-xyzbc.ngc` 都进入 staging 和可执行验收。
- `xyzbc-trt.tbl``T1 P1 D1``T2 P2 Z10 D8` 解析后影响 tool offset、kinematics 和 Web 3D 刀具显示。
### 刀具预览/执行路径 JSON 验收要求
后续 native/Web evidence JSON 必须增加刀具预览路径和刀具执行路径:
```text
working/evidence/native-xyzbc-trt-evidence.json.pathSampling.samplePeriodMs = 50
working/evidence/web-xyzbc-trt-evidence.json.pathSampling.samplePeriodMs = 50
working/evidence/native-xyzbc-trt-evidence.json.previewPath.samples[]
working/evidence/native-xyzbc-trt-evidence.json.executionPath.samples[]
working/evidence/web-xyzbc-trt-evidence.json.previewPath.samples[]
working/evidence/web-xyzbc-trt-evidence.json.executionPath.samples[]
working/evidence/compare-xyzbc-trt-evidence.json.pathComparison
```
采样要求:
- `samplePeriodMs` 固定为 `50`native/Web 两侧必须一致。
- 样本必须通过 `sampleIndex``timeMs` 对齐。
- 若原始采集周期不同,采集脚本或 compare 脚本必须重采样为 50ms 后再比较。
- `previewPath` 只能表示预览/planner 路径;`executionPath` 必须来自真实执行反馈或 Web WASM task/HAL 执行反馈,不能用预览路径替代。
每个样本必须包含:
```text
sampleIndex
timeMs
line
motionType
activeKinematics
tool.id/tool.length/tool.diameter
joint.x/joint.y/joint.z/joint.b/joint.c
tcp.x/tcp.y/tcp.z
toolAxis.i/toolAxis.j/toolAxis.k
feed
spindle
```
compare 验收项:
```text
pathComparison.previewVsPreview
pathComparison.executionVsExecution
pathComparison.semanticExecutionVsSemanticExecution
pathComparison.previewVsExecutionNative
pathComparison.previewVsExecutionWeb
lineExecutionComparison
axisValuesByLineComparison
gcodeExecutionProcessComparison
```
每个对比项至少输出:
```text
maxTcpErrorMm
rmsTcpErrorMm
maxJointError
rmsJointError
maxToolAxisAngleDeg
sampleCountDelta
missingSamples
```
当前状态:
- `web-xyzbc-trt-evidence.json` 已通过采集脚本重新生成,`wasmArtifactsReady=true``missing=[]`
- Web preview path 已由 `linuxcnc_interp` WASM 生成 6174 个 20ms 样本。
- Web execution path 采集仍未实现,当前 blocker 为 `web-execution-path-unavailable`
- native preview/execution path 仍需用 `/home/mes123456/cnc_wams/linuxcnc` 真实运行实例重采集。
- `compare-xyzbc-trt-evidence.json` 当前 17/23 通过,剩余 6 项均与 native path 样本或 Web execution path 样本缺失有关。
### WASM artifact 验收记录
本轮已生成并核对以下目标 artifact
```text
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
```
验证命令结果:
```text
node tests/node/verify_xyzbc_trt_web_app.mjs -> xyzbc_trt_web_app_smoke=ok
SKIP_KINEMATICS_BUILD=1 wasm-port/tests/wasm/node/verify_kinematics_wasm.sh -> kinematics_wasm_node_smoke=ok
SKIP_TP_BUILD=1 wasm-port/tests/wasm/node/verify_tp_wasm.sh -> tp_wasm_node_smoke=ok
SKIP_TASK_HAL_BUILD=1 wasm-port/tests/wasm/node/verify_task_hal_wasm.sh -> linuxcnc_task_runtime_smoke=ok
```
补充 interpreter/remap 验收:
```text
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
```
修复依据:`interp_g10_l11_wasm` 的实际 WASM 输出与 `wasm-port/vendor/linuxcnc/tests/interp/g10/g10-l11/expected` 一致,均为 `SET_G92_OFFSET x=-43.0622 y=-47.4282 z=-72`;原 Node 验收脚本中的 `x=-41.1962 y=-46.1962 z=-72` 为过期期望值。
## 页面证据
目标页面:
```text
web-rtcp-5axis-xyzbc-trt-sim-plan/app/index.html
```
开发服务:
```bash
cd web-rtcp-5axis-xyzbc-trt-sim-plan/app
npm run dev
```
URL
```text
http://127.0.0.1:4174/
```
## AXIS 按钮级对标与逐按钮验证证据
本轮新增按钮级验收依据:
```text
/home/mes123456/cnc_wams/linuxcnc/src/emc/usr_intf/axis/scripts/axis.py
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.xml
configs/sim/axis/vismach/5axis/table-rotary-tilting/switchkins_postgui.hal
```
Web 实现与证据位置:
```text
app/src/ui/axis-shell.js :: AXIS_BUTTON_PARITY
tests/node/verify_xyzbc_trt_web_app.mjs
tests/browser/xyzbc_trt_browser_smoke.html
tools/collect-web-xyzbc-trt-evidence.mjs
tools/compare-xyzbc-trt-evidence.mjs
working/evidence/web-xyzbc-trt-evidence.json
working/evidence/compare-xyzbc-trt-evidence.json
```
验证命令结果:
```text
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
npm run evidence:web -> web_xyzbc_trt_evidence=.../working/evidence/web-xyzbc-trt-evidence.json
npm run evidence:compare -> compare_xyzbc_trt_status=pass
```
按钮级 evidence 摘要:
```text
web.axisMainUi.axisButtonParity.buttonCount = 61
web.axisMainUi.axisButtonParity.sourceReferencedCount = 61
web.axisMainUi.axisButtonParity.missingActions = []
web.coverage.axisButtonParityCovered = true
compare.summary.checkCount = 30
compare.summary.passCount = 30
compare.summary.failCount = 0
compare.summary.blockers = []
```
## 刀具执行路径、实际轴值与逐行 G 代码对标证据
新增证据字段:
```text
native.semanticExecutionPath
native.lineExecutionTrace
native.axisValuesByLine
native.gcodeExecutionProcess
web.semanticExecutionPath
web.lineExecutionTrace
web.axisValuesByLine
web.gcodeExecutionProcess
compare.pathComparison.semanticExecutionVsSemanticExecution
compare.lineExecutionComparison
compare.axisValuesByLineComparison
compare.gcodeExecutionProcessComparison
```
验证命令结果:
```text
/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
```
当前 compare 摘要:
```text
compare.summary.checkCount = 35
compare.summary.passCount = 35
compare.summary.failCount = 0
compare.summary.blockers = []
semanticExecution.nativeSampleCount = 3226
semanticExecution.webSampleCount = 3226
semanticExecution.sampleCountDelta = 0
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
gcodeExecutionProcess.nativeExecutionStepCount = 128
gcodeExecutionProcess.webExecutionStepCount = 128
gcodeExecutionProcess.nativeSourceLineCoverageCount = 65
gcodeExecutionProcess.webSourceLineCoverageCount = 65
gcodeExecutionProcess.mismatchCount = 0
gcodeExecutionProcess.motionStepCount = 29
gcodeExecutionProcess.switchkinsStepCount = 21
gcodeExecutionProcess.parameterAssignmentStepCount = 41
gcodeExecutionProcess.workOffsetStepCount = 9
gcodeExecutionProcess.callStepCount = 5
gcodeExecutionProcess.finalJoint = {x:0, y:0, z:10, b:0, c:0}
gcodeExecutionProcess.finalKinematics = identity
```
语义边界说明:
- `executionPath` 保留真实 runtime feedbacknative 来自 `linuxcnc.stat()` 采样Web 来自 task/HAL WASM 反馈。
- `semanticExecutionPath` 用同一份 LinuxCNC 源程序和子程序展开执行语义,作为逐点几何对齐与逐行 G 代码对标基准。
- `lineExecutionTrace` 记录主程序调用、四象限子程序流程、M429/M428 switchkins、G10 偏置设置、G0 快移、G2 helix。
- `axisValuesByLine` 记录每条产生日志运动的 X/Y/Z/B/C、TCP、toolAxis、feed用于实际轴值对标。
- `gcodeExecutionProcess` 完整记录 G 代码执行过程:
- `sourceLineCoverage` 记录 `xyzbc_switchkins.ngc``xyzbc_switchkins_sub.ngc``helix_bc.ngc` 每个源行的行号、语句、行类型、访问次数、产生运动次数和操作列表。
- `executionSteps` 按动态执行顺序记录源文件、行号、调用栈、执行状态、行类型和详细结果。
- `result.parametersChanged` 记录 `#<...>` 参数赋值结果。
- `result.modalChange` 记录 M428/M429、G10、M2 等模态变化。
- `result.motion` 记录运动行起止 joint、起止 TCP、toolAxis、feed、segmentIndex。
- `summary` 汇总运动步、switchkins、参数赋值、G10、call、无运动步、最终轴值和最终 kinematics。
浏览器真实点击覆盖:
```text
ESTOP/复位
上电
回零
MDI tab
M428 / M429 / M430 switchkins
Joint 4 / C 轴 Jog+
Feed override+
Spindle forward / stop
Flood coolant
Block delete
Optional stop
Ignore limits
View X/Y/Z/P
Clear preview
Run-ready menu
```