9.3 KiB
06-决策记录
D-013:缺 WASM artifact 时 build 与 path compare 继续显式失败
日期:2026-07-02
决策:本轮补齐 Web/native evidence 字段和 compare 规则,但在缺少 wasm-port/build/wasm artifact 时,npm run build、Web preview path、Web task/HAL execution path 和 compare path 检查继续显式失败或 blocked,不通过占位样本伪造通过。
理由:
xyzbc-trt的 G-code、remap、kinematics、planner、task/HAL 语义必须来自 LinuxCNC-derived WASM 或真实 LinuxCNC evidence。- 当前仓库缺少
wasm-port/build/wasm/kinematics、core、tp、task-hal artifact,浏览器 worker/runtime 不具备真实执行条件。 - compare JSON 的失败项已经精确指向 artifact 与 path 样本缺口,保留失败状态比静默降级更利于后续验收。
D-012:DOCX 任务书整合为 working Markdown
日期:2026-07-02
决策:将 doc/xyzbc-trt-web-cnc-simulation-design-task-and-technical-plan.docx 的正文、表格和图片引用整合为 working/09-设计任务书与技术方案整合.md,并把它加入 working 索引和任务矩阵。
理由:
- DOCX 不便于命令行检索、diff、逐项验收和后续增量维护。
working目录是当前项目的开发和验收入口,任务书内容必须进入该目录才能和 01-08 工作文档形成闭环。- Markdown 版本可以保留 DOCX 的完整任务书、技术方案、程序逻辑分析和状态联锁内容,同时继续引用
doc/assets中的原始图片证据。
D-001:以 wasm-port 为 CNC 语义来源
日期:2026-07-02
决策:Web 项目不在 JavaScript 中重写 G-code、remap、tool table、parameter、kinematics 或 planner 语义,继续通过 wasm-port 的 LinuxCNC-derived SDK/WASM 获取语义。
理由:
wasm-port/AGENTS.md明确要求 LinuxCNC 源码是语义真源。wasm-port已经包含xyzbc-trtkinematics、remap、interp、task/HAL 的边界设计。
D-002:复制参考 app 后改为 xyzbc-trt 默认机型
日期:2026-07-02
决策:复用 web-rtcp-5axis-sim-plan/app 的结构,创建目标目录独立 app,并只做 xyzbc-trt 默认化和项目命名空间隔离。
理由:
- 参考 app 已包含 OPFS、WASM SDK、五轴可视化、profile、task/HAL、tool DB、session 等大部分产品外壳。
- 局部改造比重写界面风险低,且保留 LinuxCNC source-derived 边界。
D-003:目标项目 OPFS 根路径独立
日期:2026-07-02
决策:目标项目使用 web-rtcp-5axis-xyzbc-trt-sim-plan/machines、sessions、tool-db,不复用旧项目 web-rtcp-5axis-sim-plan 路径。
理由:
- 防止两个项目在 OPFS 中互相覆盖机器文件、会话、tool DB。
- 便于后续按项目清理和验收。
D-004:默认程序使用 xyzbc_switchkins.ngc
日期:2026-07-02
决策:为 xyzbc-trt profile 增加 machineFileStaging.defaultProgramFilename = "xyzbc_switchkins.ngc"。
理由:
- LinuxCNC INI
[DISPLAY]OPEN_FILE指向./demos/xyzbc_switchkins.ngc。 - 参考 app 的自动选择逻辑按
${profileId}_switchkins.ngc推导时会得到不存在的xyzbc-trt_switchkins.ngc,必须显式覆盖。
D-005:完整浏览器验收等待 WASM artifact
日期:2026-07-02
决策:本轮先完成代码、工作文档和不依赖 artifact 的 Node smoke;完整 browser/WASM 验收记录为后续前置任务。
理由:
- 当前
wasm-port/build/wasm不存在。 - 页面 runtime 代码已接入 worker/WASM,但缺少
.js/.wasm产物时无法完成真实浏览器执行。
D-006:受控导入 xyzbc.var staging
日期:2026-07-02
决策:从当前真实运行树 /home/mes123456/linuxcnc-master/.../xyzbc.var 导入 xyzbc.var 到 wasm-port/vendor/linuxcnc/.../xyzbc.var,并加入 wasm-port/tools/source-manifest.txt。
理由:
xyzbc-trt.ini明确声明PARAMETER_FILE = xyzbc.var。- 若不导入,OPFS machine-file staging 无法覆盖完整 runtime files。
- 直接在 Web wrapper 中引用运行树绝对路径不可复现;纳入 vendor/manifest 后,Node/Web staging 可重复。
D-007:native/Web JSON 对比作为验收主线
日期:2026-07-02
决策:新增 native、Web、compare 三个 JSON 证据脚本,作为后续完善项目的主验收链路。
理由:
- 用户要求真实
xyzbc-trt与 Web 仿真分别写入 JSON,再通过比对 JSON 完善项目。 - JSON 证据比单次截图或口头结论更容易复跑、归档和定位差异。
- 当前比较报告已把差异收敛到唯一环境前置:缺 WASM artifact。
D-008:WASM artifact 缺失不伪造通过
日期:2026-07-02
决策:当前 wasm-port/build/wasm 为空,Web evidence 和 compare evidence 保持 blocked/fail,不伪造 WASM 执行完成。emcc 6.0.2 已安装后,下一步是构建 artifact,而不是改写证据为通过。
理由:
wasm-port规则要求 LinuxCNC 源码语义和 WASM 边界真实可验证。- 没有
.js/.wasmartifact 时,浏览器 worker runtime 无法完成真实执行。 - 保留失败项可以明确下一步是激活已安装的 Emscripten 并构建 artifact,而不是继续堆叠 Web UI 假状态。
D-009:刀具路径按统一 20ms 周期采样后比较
日期:2026-07-02
决策:native/Web 的刀具预览路径和刀具执行路径进入 evidence JSON 前,统一按 samplePeriodMs = 20 重采样;compare 只对同一 sampleIndex/timeMs 的样本做逐点比较。
理由:
- LinuxCNC 真实系统和 Web 仿真系统的内部刷新、planner、HAL/task 采样频率可能不同,直接比较原始样本会产生时间错位。
- 固定 20ms 可以覆盖人眼可见刀路和 UI 动画判断,同时让 JSON 体积可控。
- 统一
sampleIndex/timeMs后,TCP、XYZBC joint、toolAxis、feed、spindle 的误差统计可以稳定复跑。 - 如果 Web 缺少 WASM task/HAL 执行反馈,不允许用预览路径冒充执行路径;compare 必须显式 fail/blocker。
D-010:以全量对标追踪矩阵作为开发和验收主索引
日期:2026-07-02
决策:新增 working/07-全量对标追踪矩阵.md,作为 Web xyzbc-trt 仿真界面后续开发、JSON 采集和 compare 验收的主索引。
理由:
doc/xyzbc-trt-runtime-files.md覆盖的范围超过单个 INI/staging 检查,还包括 AXIS、PyVCP、POSTGUI HAL、basic_sim、Vismach、kinematics HAL pins、Ngcgui、演示程序和加载顺序。- 若没有追踪矩阵,后续容易只完成页面可见部分,而漏掉 HAL/task/kinematics/tool-offset 等运行语义。
- 追踪矩阵把每个 LinuxCNC 功能点映射到 Web 对标目标和 evidence 字段,便于自动化 compare 脚本逐步落地。
D-011:native 真实执行基线切换到 /home/mes123456/cnc_wams/linuxcnc
日期:2026-07-02
决策:后续 Web 界面和逻辑设计以 /home/mes123456/cnc_wams/linuxcnc 编译后执行 xyzbc-trt 的真实行为为 native 基线;/home/mes123456/linuxcnc-master 只保留为历史运行参考。
理由:
- 用户明确要求以已编译成功并能执行
xyzbc-trt的/home/mes123456/cnc_wams/linuxcnc为对标依据。 /home/mes123456/cnc_wams/linuxcnc是干净 Git 源码仓库,便于把 native 行为、Web WASM 构建和后续代码追踪关联到同一源码树。- 该路径已完成 run-in-place 编译,
scripts/rip-environment、bin/axis、bin/xyzbc-trt-gui、rtlib/xyzbc-trt-kins.so已生成;因此后续第一步是用该路径重新生成 native evidence。
D-012:WASM artifact 已生成,后续 blocker 改为路径采集与 interpreter 回归
日期:2026-07-02
决策:wasm-port/build/wasm artifact 已通过 emcc 6.0.2 生成,Web evidence 不再把缺 artifact 作为 blocker;后续开发重点转向 native/Web path 采集闭环、Web task/HAL execution path collector,以及 verify_interp_wasm.sh 的 G10 L11 回归断言差异。
理由:
- core、kinematics、TP、task/HAL 所需
.js/.wasm均已存在,web-xyzbc-trt-evidence.json.wasm.missing=[]。 - kinematics、TP、task/HAL 的 Node WASM smoke 已通过,说明主要 runtime artifact 可加载执行。
- Web preview path 已由
linuxcnc_interpWASM 生成样本,证明 Web evidence 已越过原先缺 artifact 的前置阻塞。 - compare 剩余失败项均指向 native path 样本和 Web execution path 样本缺失;这是采集能力缺口,不再是构建产物缺口。
- 历史状态:当时
verify_interp_wasm.sh仍有interp_g10_l11_wasm断言失败,完整 interpreter/remap WASM 验收不能标记为完成。
D-013:G10 L11 验收期望对齐 vendored LinuxCNC expected
日期:2026-07-02
决策:将 verify_interp_wasm.mjs 中 interp_g10_l11_wasm 的 SET_G92_OFFSET 期望值调整为 x=-43.0622 y=-47.4282 z=-72,与 wasm-port/vendor/linuxcnc/tests/interp/g10/g10-l11/expected 保持一致。
理由:
- 单独复现
g10-l11后,WASM 实际 canonical 输出为SET_G92_OFFSET x=-43.0622 y=-47.4282 z=-72。 - vendored LinuxCNC 当前 expected 文件同样记录
SET_G92_OFFSET(-43.0622, -47.4282, -72.0000)。 - 因此失败原因是 Node 验收脚本中的期望值过期,不是 WASM interpreter/remap 行为偏离 vendored LinuxCNC。
- 修正后,
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh和完整wasm-port/tests/wasm/node/verify_interp_wasm.sh均通过,输出interp_wasm_node_smoke=ok。