133 KiB
03-推进台账
2026-07-08 10:18 EDT
本轮目标
按用户要求从源头 /home/mes123456/cnc_wams/wasm-port 取消旧字段输入兼容,不再让 task status JSON 输出旧顶层字段。
本轮做了什么
- 修改
linuxcnc_task_hal_wasm.cpp的status_json(),移除taskTopLevelStatus、rcsStatus、顶层task、servoCycle和顶层motionStatus输出。 - 将旧
task、motionStatus.motion中仍需要的字段收拢到emcStatus.task和emcStatus.motion。 - 更新 WASM、SDK、status contract 和 state matrix 测试,所有 task status 读取路径均只消费
emcStatus,并对旧顶层字段做负向断言。 - 同步更新
01、02、04、11、12文档口径,新增 T-056:源头取消旧 status 字段兼容输出。 - 重建
task-halwasm,并运行四个直接相关 Node 验证。
影响文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_status_json_contract.mjswasm-port/tests/wasm/node/verify_task_hal_sdk.mjswasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tests/wasm/node/verify_task_state_matrix.mjswasm-port/working/01-项目功能内容.mdwasm-port/working/02-项目程序开发详细步骤.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/11-WASM核心状态机边界与后续完善路线.mdwasm-port/working/12-status-json-LinuxCNC对标方案.md
当前结论
T-056 已完成。lctask_read_status_json() 的 task/motion/io/top 状态入口收口为 emcStatus,旧顶层字段不再输出;直接相关 Node 验证均通过。
2026-07-08 09:30 EDT
本轮目标
按用户明确指定的两个文件完成并复核:
/home/mes123456/cnc_wams/wasm-port/working/11-WASM核心状态机边界与后续完善路线.md/home/mes123456/cnc_wams/wasm-port/working/12-status-json-LinuxCNC对标方案.md
本轮做了什么
- 读取两个目标文档,确认
12-status-json-LinuxCNC对标方案.md中 SJ-1 到 SJ-5 已进入04-任务矩阵.md的 T-051 到 T-055,且11-WASM核心状态机边界与后续完善路线.md已记录这些批次闭合。 - 复核
04-任务矩阵.md,确认 T-001 到 T-055 均为完成,当前推进指针为“下一条优先任务:无”。 - 检查
tools/verify_task_status_json_contract.sh和tools/verify_task_full_closure.sh,确认 status JSON contract gate 已纳入 full closure。 - 扫描 working、docs、tools、runtime、tests 中的
StandaloneEmcStatus、emcStatus、SJ/T 编号和 contract gate 锚点,确认 runtime、测试、文档均有对应覆盖。 - 执行
./tools/verify_task_full_closure.sh,验证 task-HAL WASM build、WASM smoke、SDK smoke、state matrix、motion sync、StandaloneEmcStatus、no-JSON 主路径、status JSON contract、working closure、source reuse/drift docs 和 readiness contract。 - 执行
git diff --check,确认当前差异无 whitespace error。
影响文件
wasm-port/working/03-推进台账.mdwasm-port/working/05-验收证据.md
当前结论
目标文件 11 和 12 中定义的当前全部工作已完成并通过复核:SJ-1 到 SJ-5 对应 T-051 到 T-055,status JSON contract gate 已纳入 full closure,全量闭合脚本最终输出 task_full_closure_status=ok,git diff --check 无输出。
2026-07-08 09:26 EDT
本轮目标
按用户要求复核并完成 /home/mes123456/cnc_wams/wasm-port/working 全部工作,确认当前任务矩阵、闭合 gate 和执行证据均无未闭合项。
本轮做了什么
- 读取
wasm-port/working/README.md、04-任务矩阵.md、03-推进台账.md和05-验收证据.md,确认当前文档声明 T-001 到 T-055 均为完成,下一条优先任务为“无”。 - 检查仓库根目录和
wasm-port/AGENTS.md,确认本轮同时受根目录中文日志规则和wasm-portLinuxCNC source reuse / 额外日志规则约束。 - 扫描
wasm-port/working、tools、docs、runtime、tests中的开放标记,确认出现的“后续”主要是已文档化的保守边界或新增任务入口,不是当前矩阵未完成任务;矩阵任务行均为“完成”。 - 执行
./tools/verify_task_full_closure.sh,完成 task-HAL WASM 构建、WASM smoke、SDK smoke、state matrix、motion sync、StandaloneEmcStatus、no-JSON 主路径、status JSON contract、working closure、source reuse/drift docs 和 readiness contract 验证。 - 全量闭合脚本通过,最终输出
task_full_closure_status=ok。
影响文件
wasm-port/working/03-推进台账.mdwasm-port/working/05-验收证据.md
当前结论
wasm-port/working 当前全部工作已完成并复核通过。任务矩阵无待办、进行中或阻塞项;T-051 到 T-055 的 status JSON contract 已纳入 full closure;全量闭合 gate 输出 task_full_closure_status=ok。
2026-07-08 09:12 EDT
本轮目标
修正上一轮误判:11-WASM核心状态机边界与后续完善路线.md 和 12-status-json-LinuxCNC对标方案.md 中的 SJ-1 到 SJ-5 是实际后续任务,不能只因 04-任务矩阵.md 显示“无”就判定全部完成。本轮将 SJ-1 到 SJ-5 补入矩阵并闭合。
本轮做了什么
- 重新读取
11-WASM核心状态机边界与后续完善路线.md和12-status-json-LinuxCNC对标方案.md,确认 SJ-1 到 SJ-5 均有明确目标和验收标准。 - 更新
04-任务矩阵.md,新增并闭合 T-051 到 T-055:- T-051 / SJ-1:规范
emcStatus.motion.traj。 - T-052 / SJ-2:规范 task current/read/motion line 和 callLevel。
- T-053 / SJ-3:规范
emcStatus.motion.axis[]和joint[]。 - T-054 / SJ-4:规范 IO/aux/tool/coolant 边界。
- T-055 / SJ-5:引入 status JSON contract gate。
- T-051 / SJ-1:规范
- 修改
linuxcnc_task_hal_wasm.cpp:StandaloneEmcTaskStatus新增 currentLine/readLine/motionLine/callLevel。StandaloneEmcMotionStatus新增 axis command/feedback 和 joint command/feedback 数组。StandaloneEmcIoStatus新增 reason。status_json()新增schemaVersion=1、emcStatus.motion.traj、emcStatus.motion.axis[]、emcStatus.motion.joint[]、emcStatus.io.aux/tool/coolant。
- 更新 WASM、SDK 和 state matrix 测试,断言新
emcStatus字段与旧兼容字段同源。 - 新增
tests/wasm/node/verify_task_status_json_contract.mjs和tools/verify_task_status_json_contract.sh,并将该 gate 纳入tools/verify_task_full_closure.sh。 - 更新
11、12、source reuse、drift、compatibility 文档和对应文档一致性 gate,让 T-051 到 T-055 不再只是“后续路线”。 - 确认 direct
./tools/build_task_hal_wasm.sh在未加载 emsdk 的 shell 中会因emcc: command not found失败;使用source /home/mes123456/emsdk/emsdk_env.sh后构建通过。 - 运行新增 contract gate、WASM smoke、SDK smoke、state matrix,均通过。
- 运行
./tools/verify_task_full_closure.sh,确认新增 status JSON contract gate 已纳入全量闭合链,最终输出task_full_closure_status=ok。
影响文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tests/wasm/node/verify_task_hal_sdk.mjswasm-port/tests/wasm/node/verify_task_state_matrix.mjswasm-port/tests/wasm/node/verify_task_status_json_contract.mjswasm-port/tools/verify_task_status_json_contract.shwasm-port/tools/verify_task_full_closure.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/tools/verify_task_working_closure.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.mdwasm-port/working/11-WASM核心状态机边界与后续完善路线.mdwasm-port/working/12-status-json-LinuxCNC对标方案.md
当前结论
T-051、T-052、T-053、T-054、T-055 已完成。上一轮“全部完成”的判断漏掉了 11 和 12 中的 SJ 批次;本轮已将这些批次纳入矩阵、实现、测试、文档和 full closure gate,且全量闭合通过。active G/M code、active settings、offsets 仍按 12 的字段映射表保留为后续 source-anchored 扩展,不在本轮 SJ-1 到 SJ-5 验收范围内。
2026-07-08 09:00 EDT
本轮目标
按用户要求完成 /home/mes123456/cnc_wams/wasm-port/working 全部工作,复核当前任务矩阵、闭合文档和全量 gate,确认没有待办、进行中或阻塞项残留。
本轮做了什么
- 读取仓库和
wasm-port的 AGENTS 规则,确认本轮需遵守wasm-port的 LinuxCNC source reuse 边界,并在结束后追加中文执行日志。 - 检查
wasm-port/working/README.md、04-任务矩阵.md、03-推进台账.md和05-验收证据.md,确认当前文档声明 T-001 到 T-050 均已完成,下一条优先任务为“无”。 - 使用
rg扫描working、docs、tools、runtime和tests中的开放标记;结果只包含历史台账/决策记录中的旧记录、矩阵状态说明、vendor three.js TODO 和文档化的保守边界,没有当前矩阵开放任务。 - 执行
./tools/verify_task_full_closure.sh,完成 task-HAL WASM 构建、WASM smoke、SDK smoke、state matrix、motion/HAL sync、StandaloneEmcStatus、no-JSON 主路径、working closure、source reuse/drift docs 和 readiness contract 验证。 - 执行
git diff --check -- wasm-port/working wasm-port/tools wasm-port/docs wasm-port/runtime wasm-port/tests,确认当前相关差异没有 whitespace error。
影响文件
wasm-port/working/03-推进台账.mdwasm-port/working/05-验收证据.md
当前结论
wasm-port/working 当前全部工作已闭合:任务矩阵无待办/进行中/阻塞项,下一条优先任务为“无”,全量闭合验证通过并输出 task_full_closure_status=ok。本轮没有修改 runtime 行为,只追加最终复核台账和验收证据。
2026-07-08 08:55 EDT
本轮目标
对标 /home/mes123456/cnc_wams/linuxcnc,完善 WASM 中解决 status JSON 的方案,明确 LinuxCNC EMC_STAT / status buffer 到 WASM StandaloneEmcStatus -> status JSON 的映射路线。
本轮做了什么
- 查阅上游
linuxcnc/src/emc/nml_intf/emc.hh,确认 task mode/state、exec/interp、traj mode 和 NML status type 等枚举来源。 - 查阅上游
linuxcnc/src/emc/nml_intf/emc_nml.hh,确认EMC_STAT聚合EMC_TASK_STAT、EMC_MOTION_STAT、EMC_IO_STAT,其中 motion 再聚合EMC_TRAJ_STAT、joint、axis、spindle、synch IO 等。 - 查阅当前
linuxcnc_task_hal_wasm.cpp中的StandaloneEmcStatus、sync_standalone_emc_status()、status_json()、write_status_snapshot()和lctask_read_status_json()。 - 新增
12-status-json-LinuxCNC对标方案.md:- 固定
status JSON是 status buffer 的 host/browser 序列化格式。 - 明确禁止 motion JSON/status JSON 反向驱动 task/motion 状态机。
- 定义
emcStatus作为新增 LinuxCNC 对标字段的主对象。 - 定义 LinuxCNC 字段到 WASM 事实源和 JSON 位置的映射表。
- 拆分 SJ-1 到 SJ-5 后续实施批次。
- 固定
- 更新
README.md、01-项目功能内容.md、02-项目程序开发详细步骤.md、07-emctaskmain周期对标蓝图.md和11-WASM核心状态机边界与后续完善路线.md,接入该方案。 - 更新
04-任务矩阵.md,新增并闭合 T-050。 - 更新
05-验收证据.md和06-决策记录.md,记录本轮方案和验证。
影响文件
wasm-port/working/README.mdwasm-port/working/01-项目功能内容.mdwasm-port/working/02-项目程序开发详细步骤.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.mdwasm-port/working/07-emctaskmain周期对标蓝图.mdwasm-port/working/11-WASM核心状态机边界与后续完善路线.mdwasm-port/working/12-status-json-LinuxCNC对标方案.md
当前结论
T-050 已完成。后续在 WASM 中解决 status JSON 时,应先扩展 C/C++ StandaloneEmcStatus 或后续 EMC_STAT 等价容器,再从最后一次 status write 导出 emcStatus JSON;旧 task、motionStatus 字段只作为兼容视图。后续实现按 SJ-1 到 SJ-5 拆任务推进。
2026-07-08 08:18 EDT
本轮目标
按用户要求完善 wasm-port/working 文档,固定“WASM 程序作为核心状态机实现运行载体,JSON 只作为边界通信格式”的后续开发口径。
本轮做了什么
- 新增
11-WASM核心状态机边界与后续完善路线.md,明确 WASM/C++、JS/SDK、JSON 三层职责。 - 更新
README.md,把新文档加入索引和使用规则,并记录后续 WASM 完善的默认边界。 - 更新
01-项目功能内容.md,新增 WASM 核心状态机边界表,明确 status JSON 不作为事实源。 - 更新
02-项目程序开发详细步骤.md,新增“阶段 7:后续 WASM 核心状态机完善”。 - 更新
06-决策记录.md,新增 D-043,记录该边界决策。 - 更新
05-验收证据.md,记录本轮文档验收命令。
影响文件
wasm-port/working/README.mdwasm-port/working/01-项目功能内容.mdwasm-port/working/02-项目程序开发详细步骤.mdwasm-port/working/03-推进台账.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.mdwasm-port/working/11-WASM核心状态机边界与后续完善路线.md
当前结论
文档已明确后续 WASM 程序完善方向:核心状态机在 WASM/C++,JS/SDK 只做 host 边界,JSON 只做输入/输出通信格式。当前 T-001 到 T-049 闭合状态不变;后续代码任务需先补入任务矩阵再实施。
2026-07-08 08:08 EDT
本轮目标
完成后续全部工作,推进 T-049:建立 task-HAL 全量闭合验证入口,让后续验收不再依赖人工记忆多条命令组合。
本轮做了什么
- 确认前面中断后没有残留的 task-HAL 验证后台进程。
- 复核任务矩阵,确认 T-001 到 T-048 均完成,下一条优先任务为“无”。
- 新增
tools/verify_task_full_closure.sh:- 自动加载 emsdk。
- 构建 task-HAL WASM。
- 以
SKIP_TASK_HAL_BUILD=1运行verify_task_hal_wasm.sh和verify_task_hal_sdk.sh。 - 运行 state matrix、motion/HAL sync、T-007 StandaloneEmcStatus、T-046 no-JSON 主路径、T-047/T-048 working closure、source reuse/drift docs 和 readiness contract gates。
- 通过后输出
task_full_closure_status=ok。
- 更新
docs/source-reuse-map.md,将tools/verify_task_full_closure.sh加入 Task/motion/HAL simulation runtime 的 validation list。 - 更新
docs/compatibility-validation.md,新增tools/verify_task_full_closure.sh行,记录它覆盖 build、WASM smoke、SDK、state matrix、motion sync、T-007/T-046/T-047/T-048/docs/readiness gates。 - 更新
tools/verify_task_source_reuse_drift_docs.sh,要求 source reuse、compatibility 和任务矩阵都记录 T-049/full closure gate。 - 更新
working/04-任务矩阵.md,新增并闭合 T-049。 - 运行
./tools/verify_task_source_reuse_drift_docs.sh,确认文档一致性 gate 已识别 full closure。 - 运行
./tools/verify_task_full_closure.sh,全量闭合验证通过,输出task_full_closure_status=ok。
影响文件
wasm-port/tools/verify_task_full_closure.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/compatibility-validation.mdwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/working/04-任务矩阵.md
当前结论
T-049 已完成。task-HAL 对标工作已有一个统一全量闭合入口,可一次性验证 build、核心 WASM/SDK/state matrix/motion sync、T-007/T-046/T-047/T-048/docs/readiness gates。本轮未改变 runtime 行为。
2026-07-08 05:51 EDT
本轮目标
继续完成对标工作,推进 T-048:将 verify_task_working_closure.sh 纳入全局文档一致性验证,避免 T-047 的 working closure gate 只存在于 working 文档而不受总文档 gate 保护。
本轮做了什么
- 检查
docs/source-reuse-map.md、docs/compatibility-validation.md和tools/verify_task_source_reuse_drift_docs.sh,确认 T-047 新增的verify_task_working_closure.sh尚未纳入 source reuse / compatibility 的总验证链。 - 更新
docs/source-reuse-map.md,在 Task/motion/HAL simulation runtime 的 validation 列加入tools/verify_task_working_closure.sh。 - 更新
docs/compatibility-validation.md:- 将
verify_task_source_reuse_drift_docs.sh的说明扩展为包含 working closure gate。 - 新增
tools/verify_task_working_closure.sh行,说明它验证 T-047/T-048 working closure anchors。
- 将
- 更新
tools/verify_task_source_reuse_drift_docs.sh:- 要求 source reuse map 包含
tools/verify_task_working_closure.sh。 - 要求 compatibility 文档包含
tools/verify_task_working_closure.sh和 working closure gate 文案。 - 要求任务矩阵包含 T-048 完成。
- 要求 source reuse map 包含
- 更新
working/04-任务矩阵.md,新增并闭合 T-048。 - 运行
./tools/verify_task_source_reuse_drift_docs.sh,确认总文档一致性 gate 已覆盖 working closure。 - 运行
./tools/verify_task_working_closure.sh和./tools/verify_task_standalone_emc_status.sh,确认 T-047/T-007 gate 不回退。
影响文件
wasm-port/docs/source-reuse-map.mdwasm-port/docs/compatibility-validation.mdwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/working/04-任务矩阵.md
当前结论
T-048 已完成。verify_task_working_closure.sh 已进入 source reuse / compatibility 文档和 verify_task_source_reuse_drift_docs.sh 总 gate,working closure 状态现在由全局文档一致性验证保护。本轮未改变 runtime 行为。
2026-07-08 05:46 EDT
本轮目标
继续完成对标工作。由于 T-007 已完成且任务矩阵显示“下一条优先任务:无”,本轮推进 T-047:收口 working 索引与闭合 gate,修正过期现状描述,固定当前矩阵已闭合状态。
本轮做了什么
- 扫描
wasm-port/working、docs、tools中的待办、进行中、阻塞、未完成等标记,确认任务矩阵没有未闭合任务,但 working README 和功能内容文档仍保留早期 Phase 3/4 minimal adapter 口径。 - 更新
working/README.md:- 将当前基线改为:
lctask_run_cycles()已具备 command read、plan、execute、motion update、subordinate sync、task update、status write 周期骨架。 - 记录 task status 已由
LcmotStatusSnapshot和StandaloneEmcStatus导出。 - 记录 host JSON motion plan 只保留为 timed-plan 兼容/调试入口。
- 新增“当前闭合状态”,说明矩阵所有任务完成,后续扩展需先补矩阵。
- 将当前基线改为:
- 更新
working/01-项目功能内容.md:- 将“现状差距”改为“当前闭合状态”与“当前保守边界”。
- 记录
StandaloneEmcStatus、no-JSON RUN path、周期 snapshot、state matrix、readiness contract 等当前事实。
- 更新
working/09-emc_nml复用评估.md:- 将“还没有 T-007 的集中容器”修正为 T-007 已建立
StandaloneEmcStatus。 - 保持完整
emc_nml.hh不直接 include 的决策不变。
- 将“还没有 T-007 的集中容器”修正为 T-007 已建立
- 更新
working/04-任务矩阵.md:- 新增并闭合 T-047:收口 working 索引与闭合 gate。
- 保持下一条优先任务为“无”。
- 新增
tools/verify_task_working_closure.sh,验证:- T-007 和 T-047 均完成。
- 矩阵没有
待办、进行中、阻塞任务。 - README、功能内容、NML 评估、台账、验收证据和决策记录均包含当前闭合口径。
- 给新脚本赋权并运行 closure gate。首次并行运行时脚本抢在
chmod前执行,出现一次Permission denied;随后单独重跑通过。
影响文件
wasm-port/working/README.mdwasm-port/working/01-项目功能内容.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/09-emc_nml复用评估.mdwasm-port/tools/verify_task_working_closure.sh
当前结论
T-047 已完成。working 索引、功能内容和 NML 评估文档已与 T-007/T-046 当前实现一致;新增 closure gate 固定“矩阵全完成、下一条为无”的收口状态。本轮未改变 runtime 行为。
2026-07-08 05:40 EDT
本轮目标
继续完成对标工作,推进 T-007:建立 EMC_STAT 等价状态容器,让 task/motion/io 必需字段集中管理,JSON status 从该状态导出。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-007,T-008 到 T-046 已完成,因此 T-007 是当前矩阵最后一项待办。
- 复核
linuxcnc_task_hal_wasm.cpp的既有状态结构,确认TaskRuntime中 task、motion snapshot、io、top-level RCS 字段仍分散保存,status_json()直接从这些字段拼接兼容 JSON。 - 在
linuxcnc_task_hal_wasm.cpp新增当前阶段的EMC_STAT等价容器:StandaloneEmcTaskStatusStandaloneEmcMotionStatusStandaloneEmcIoStatusStandaloneEmcStatus
- 新增
sync_standalone_emc_status(),在每次write_status_snapshot()前集中同步:- task state/mode/interp/exec/status、cycle、program、plan、pending command、home/error 字段。
- motion snapshot 的 program line、motion id、status、queue、axis、joint0、error/soft-limit、switchkins 字段。
- io error/estop latch 和 top/task/motion/io RCS 聚合字段。
- 修改
status_json():- 新增顶层
statusSource=StandaloneEmcStatus。 - 新增
emcStatusJSON 对象,导出 top/task/motion/io 的集中状态。 - 兼容字段
taskTopLevelStatus、rcsStatus、task和motionStatus改为从StandaloneEmcStatus容器读取。
- 新增顶层
- 修改
verify_task_hal_wasm.mjs,断言:statusSource和emcStatus.source为StandaloneEmcStatus。emcStatus.top/task/motion/io与既有taskTopLevelStatus、rcsStatus、task、motionStatus一致。- 新增输出
standalone_emc_status_container=ok。
- 修改
verify_task_hal_sdk.mjs,让 SDK smoke 也验证emcStatus与兼容字段一致,并新增输出task_hal_sdk_standalone_emc_status=ok。 - 修改
verify_task_state_matrix.mjs,新增assertStandaloneEmcStatus()helper,验证 state matrix 中emcStatus与兼容字段一致,并新增输出standalone_emc_status_matrix=ok。 - 新增
tools/verify_task_standalone_emc_status.sh,固定 T-007 代码结构、测试输出、文档和矩阵状态。 - 更新
tools/verify_task_no_json_motion_plan_main_path.sh,让 T-046 gate 在 T-007 完成后检查 T-007 已完成。 - 更新 source reuse、drift、compatibility 文档和
verify_task_source_reuse_drift_docs.sh,记录 T-007StandaloneEmcStatus边界。 - 更新任务矩阵:T-007 标为完成;当前矩阵所有任务已闭合,下一条优先任务改为“无”。
影响文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tests/wasm/node/verify_task_hal_sdk.mjswasm-port/tests/wasm/node/verify_task_state_matrix.mjswasm-port/tools/verify_task_standalone_emc_status.shwasm-port/tools/verify_task_no_json_motion_plan_main_path.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/04-任务矩阵.md
当前结论
T-007 已完成。task/motion/io/top 必需状态已集中到 StandaloneEmcStatus,JSON status 的 task、motionStatus、rcsStatus、taskTopLevelStatus 和新增 emcStatus 均由该容器导出。当前任务矩阵已全部闭合;readiness 仍保持未提升。
2026-07-08 05:28 EDT
本轮目标
继续完成对标工作,推进 T-046:移除主路径 JSON motion plan 依赖,让 RUN 文件主路径由 staged program、emcTaskPlanRead() / emcTaskPlanCommand() / emcTaskPlanExecute()、emccanon.cc command envelope 和 taskintf.cc motion issue 驱动。
本轮做了什么
- 复核任务矩阵,确认 T-046 的验收边界是主 RUN 路径不再依赖
lctask_load_program_motion_plan_json(),但loadProgramMotionPlan()可以保留为调试/兼容入口。 - 修改
tests/wasm/node/verify_task_hal_wasm.mjs:- 删除主 smoke 中对
lctask_load_program_motion_plan_json()的预加载。 - 删除不再需要的
callJson()helper。 - 将主 RUN 断言改为
motionPlanLoaded=false、planId=0,并要求planReadCount、planExecuteCount、planCommandCount等 staged-program 计数递增。 - 根据无 JSON 主路径完成速度,放宽 pause/resume/step 中
READING/IDLE的完成态断言。 - 新增输出
task_hal_no_json_main_path_status=ok。
- 删除主 smoke 中对
- 修改
tests/wasm/node/verify_task_hal_sdk.mjs:- 删除默认 status snapshot 前的
sdk.loadProgramMotionPlan()调用。 - 默认 SDK smoke 改为断言
motionPlanLoaded=false、planId=0和planReadCount>0。 - 保留后续 timed motion plan 场景作为兼容/调试覆盖,并将输出改为
task_hal_timed_motion_plan_compat=ok。
- 删除默认 status snapshot 前的
- 修改
tests/wasm/node/verify_task_state_matrix.mjs:stageAndOpenProgram()默认loadPlan=false。- homed/open RUN gate 改为接受 staged-program 无 JSON 路径。
- 新增显式
loadPlan: true兼容场景,证明 JSON timed-plan 入口仍可用。 - 新增输出
run_gate_staged_program_executes_without_json_plan=ok和run_gate_json_motion_plan_compat=ok。
- 新增
tools/verify_task_no_json_motion_plan_main_path.sh,固定:- 主
verify_task_hal_wasm.mjs不包含lctask_load_program_motion_plan_json()。 - SDK/state-matrix 中
loadProgramMotionPlan()仅作为兼容入口存在。 - T-046 已完成且下一条任务指向 T-007。
- 主
- 更新
tools/verify_task_emccanon_motion_output.sh的矩阵期望,让 T-045 gate 接受 T-046 已完成。 - 更新 source reuse、drift、compatibility 文档和
verify_task_source_reuse_drift_docs.sh,记录 T-046 no-JSON main RUN path。 - 更新任务矩阵:T-046 标为完成,下一条优先任务改为 T-007。
影响文件
wasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tests/wasm/node/verify_task_hal_sdk.mjswasm-port/tests/wasm/node/verify_task_state_matrix.mjswasm-port/tools/verify_task_no_json_motion_plan_main_path.shwasm-port/tools/verify_task_emccanon_motion_output.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/04-任务矩阵.md
当前结论
T-046 已完成。主 RUN 文件路径已不再依赖 host JSON motion plan,默认验证通过 staged program 的 plan read/command/execute、emccanon command envelope 和 taskintf motion issue;loadProgramMotionPlan() 仍保留为 timed-plan 兼容/调试入口。下一步进入 T-007:建立 EMC_STAT 等价状态容器。
2026-07-08 05:06 EDT
本轮目标
继续完成对标工作,推进 T-045:实现 emccanon.cc motion output/switchkins 子集,让 M62-M68/M428-M430 通过 canon motion output 到 emcMotionSetAout(),移除字符串 special-case。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-045,下一条为 T-046 移除主路径 JSON motion plan 依赖。
- 复核上游
linuxcnc/src/emc/task/emccanon.cc,确认:SET_MOTION_OUTPUT_BIT()、CLEAR_MOTION_OUTPUT_BIT()、SET_AUX_OUTPUT_BIT()、CLEAR_AUX_OUTPUT_BIT()进入EMC_MOTION_SET_DOUT/interp_list。SET_MOTION_OUTPUT_VALUE()、SET_AUX_OUTPUT_VALUE()进入EMC_MOTION_SET_AOUT/interp_list。WAIT()进入EMC_AUX_INPUT_WAIT/interp_list。
- 扩展
emccanon_wasm_subset.hh/.cc:- 新增
LcEmcCanonSubsetOutputCommandType、LcEmcCanonSubsetInputType和LcEmcCanonSubsetOutputCommand。 - 新增 motion/aux digital output、motion/aux analog output 和 wait input 的 subset API。
- 新增
lc_emccanon_subset_motion_output_anchor_list(),固定 output/wait message 和interp_listanchors。
- 新增
- 修改
linuxcnc_task_hal_wasm.cpp:TaskRuntime新增 T-045 evidence 字段:motionOutputCount、motionOutputAppendCount、motionOutputTaskintfAoutCount、waitInputCount、last output/wait 详情和motionOutputAnchors。- 新增
issue_motion_output_from_line(),识别精确M62、M63、M64、M65、M66、M67、M68、M428、M429、M430。 - 删除
enqueue_mdi()中旧的mdi.find("M428/M429/M430")字符串 special-case。 - M428/M429/M430 现在先通过 canon
SET_AUX_OUTPUT_VALUE()记录 evidence,再桥接到既有taskintf.ccemcMotionSetAout()/lcmot_write_aout()路径。
- 修改
tests/wasm/node/verify_task_hal_wasm.mjs:- 更新 emccanon anchor 期望,纳入 output/wait 函数。
- 验证 M428/M429/M430 仍能切换 switchkins。
- 新增 M62/M63/M64/M65/M67/M68/M66 smoke,断言 DOUT/AOUT/WAIT evidence。
- 新增输出
emccanon_motion_output_status=ok。
- 修改
tests/wasm/node/verify_task_hal_sdk.mjs:- 将旧事件
task_mdi_switchkins:M429断言替换为新的 canon output 事件。 - 增加 SDK 可见的 motion output status evidence 断言。
- 将旧事件
- 新增
tools/verify_task_emccanon_motion_output.sh,验证上游锚点、subset API、wrapper status、移除旧 M428 special-case、WASM smoke 和 T-045/T-046 矩阵状态。 - 更新
tools/verify_task_emccanon_spindle_tool.sh,让 T-044 gate 在 T-045 完成后检查 T-045 已完成。 - 更新 source reuse、drift、compatibility 文档和
verify_task_source_reuse_drift_docs.sh,固定 T-045 文档口径。 - 更新任务矩阵:T-045 标为完成,下一条优先任务改为 T-046。
影响文件
wasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tests/wasm/node/verify_task_hal_sdk.mjswasm-port/tools/verify_task_emccanon_motion_output.shwasm-port/tools/verify_task_emccanon_spindle_tool.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/04-任务矩阵.md
当前结论
T-045 已完成。M62-M68/M66 已有 EMC_MOTION_SET_DOUT / EMC_MOTION_SET_AOUT / EMC_AUX_INPUT_WAIT / interp_list evidence;M428-M430 已移除旧字符串 special-case,改走 canon SET_AUX_OUTPUT_VALUE() 到 taskintf AOUT 路径。下一步进入 T-046:移除主路径 JSON motion plan 依赖。
2026-07-08 04:50 EDT
本轮目标
继续完成对标工作,推进 T-044:实现 emccanon.cc spindle/tool command 子集,让 spindle/tool commands append 到 interp_list,runtime boundary 和 readiness 保守记录。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-044,下一条为 T-045 motion output/switchkins。
- 复核上游
linuxcnc/src/emc/task/emccanon.cc的 spindle/tool command 锚点,确认SET_SPINDLE_SPEED()、START_SPINDLE_CLOCKWISE()、START_SPINDLE_COUNTERCLOCKWISE()、STOP_SPINDLE_TURNING()、SELECT_TOOL()、CHANGE_TOOL()、CHANGE_TOOL_NUMBER()、RELOAD_TOOLDATA()分别生成EMC_SPINDLE_*或EMC_TOOL_*command 并 append 到interp_list。 - 扩展
emccanon_wasm_subset.hh/.cc:- 新增
LcEmcCanonSubsetSpindleCommandType、LcEmcCanonSubsetToolCommandType。 - 新增
LcEmcCanonSubsetSpindleCommand和LcEmcCanonSubsetToolCommand。 - 新增 spindle/tool command envelope API。
- 新增
lc_emccanon_subset_spindle_tool_anchor_list(),固定 spindle/tool command、message 和interp_listanchors。
- 新增
- 修改
linuxcnc_task_hal_wasm.cpp:TaskRuntime新增 T-044 evidence 字段:spindleCommandCount、spindleAppendCount、lastSpindleCommand、lastSpindle、lastSpindleSpeed、lastSpindleWait、toolCommandCount、toolAppendCount、lastToolCommand、lastTool、spindleToolAnchors。- 新增精确
Mcode 解析,避免M428/M429/M430被误判为M4。 - 在 staged program line 和 MDI 进入 dwell/path-control 与 straight motion 前识别
S...、M3、M4、M5、T...、M6、M61 Q...。 - 该分支只记录 canonical command envelope 和
interp_listevidence,不提升真实 spindle control、tool DB、IO 或 NML readiness。
- 修改
tests/wasm/node/verify_task_hal_wasm.mjs:- 更新 emccanon anchor 期望,纳入 spindle/tool command 锚点。
- 新增 MDI smoke:
S1200 M3、M5、T7 M6、M61 Q8。 - 断言
spindleAppendCount、toolAppendCount、last command/tool/speed 和spindleToolAnchors。 - 新增输出
emccanon_spindle_tool_status=ok。
- 新增
tools/verify_task_emccanon_spindle_tool.sh,验证上游锚点、subset API、wrapper evidence、WASM smoke 和 T-044/T-045 矩阵状态。 - 更新
tools/verify_task_emccanon_dwell_path_control.sh,让 T-043 gate 在 T-044 完成后检查 T-044 已完成。 - 更新 source reuse、drift、compatibility 文档和
verify_task_source_reuse_drift_docs.sh,固定 T-044 文档口径。 - 更新任务矩阵:T-044 标为完成,下一条优先任务改为 T-045。
影响文件
wasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_emccanon_spindle_tool.shwasm-port/tools/verify_task_emccanon_dwell_path_control.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/04-任务矩阵.md
当前结论
T-044 已完成。spindle/tool command 子集已有 EMC_SPINDLE_* / EMC_TOOL_* / interp_list status evidence,readiness 仍保持未提升。下一步进入 T-045:motion output/switchkins 子集。
2026-07-08 04:34 EDT
本轮目标
继续完成对标工作,推进 T-043:实现 emccanon.cc dwell/path-control 子集,让 DWELL() 和 SET_MOTION_CONTROL_MODE() 进入 task delay/path mode 语义。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-043,下一条为 T-044 spindle/tool command。
- 读取上游
linuxcnc/src/emc/task/emccanon.cc,确认:DWELL()构造EMC_TRAJ_DELAY,设置 delay 秒数,并 append 到interp_list。SET_MOTION_CONTROL_MODE()构造EMC_TRAJ_SET_TERM_COND,将CANON_CONTINUOUS映射为 blend,将CANON_EXACT_PATH映射为 exact,将CANON_EXACT_STOP映射为 stop,并 append 到interp_list。
- 扩展
emccanon_wasm_subset.hh/.cc:- 新增 path mode 和 term condition 枚举。
- 新增
LcEmcCanonSubsetDelay和LcEmcCanonSubsetTermCond。 - 新增
lc_emccanon_subset_dwell()。 - 新增
lc_emccanon_subset_set_motion_control_mode()。 - 新增
lc_emccanon_subset_dwell_path_control_anchor_list(),固定DWELL,EMC_TRAJ_DELAY,SET_MOTION_CONTROL_MODE,EMC_TRAJ_SET_TERM_COND,interp_list。
- 修改
linuxcnc_task_hal_wasm.cpp:TaskRuntime新增 T-043 evidence 字段:dwellCount、delayAppendCount、lastDwellSeconds、pathControlCount、termCondAppendCount、lastPathMode、lastTermCondition、lastPathTolerance、dwellPathControlAnchors。- 新增 G-code helper:大小写无关匹配和字母参数读取。
- 新增
issue_dwell_or_path_control_from_line(),识别G4、G61、G61.1、G64。 - 在 staged program line 和 MDI 进入 straight motion 前拦截上述 non-motion canon command。
- status JSON 的
emccanonSourceReuse输出 T-043 evidence 字段。
- 修改
tests/wasm/node/verify_task_hal_wasm.mjs:- 更新 emccanon anchor 期望,纳入
DWELL和SET_MOTION_CONTROL_MODE。 - 通过 MDI
G64 P0.01和G4 P0.02验证 path-control 和 dwell evidence。 - 新增输出
emccanon_dwell_path_control_status=ok。
- 更新 emccanon anchor 期望,纳入
- 新增
tools/verify_task_emccanon_dwell_path_control.sh,验证上游锚点、subset API、wrapper evidence、WASM smoke 和 T-043/T-044 矩阵状态。 - 更新
tools/verify_task_emccanon_straight_motion.sh,让 T-042 gate 在 T-043 完成后检查 T-043 已完成。 - 更新 source reuse、drift、compatibility 文档和
verify_task_source_reuse_drift_docs.sh,固定 T-043 文档口径。 - 更新任务矩阵:T-043 标为完成,下一条优先任务改为 T-044。
- 受当前沙箱影响,首次 task-HAL 构建失败在 Emscripten cache 只读;随后使用提升权限加载 emsdk 后完成
linuxcnc_task_hal_wasm_build=ok。
影响文件
wasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_emccanon_dwell_path_control.shwasm-port/tools/verify_task_emccanon_straight_motion.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/04-任务矩阵.md
当前结论
T-043 已完成。DWELL() 和 SET_MOTION_CONTROL_MODE() 已通过 emccanon_wasm_subset 进入 task-HAL status evidence,并保留 unpromoted readiness 合同。下一步进入 T-044:spindle/tool command 子集。
2026-07-08 03:52 EDT
本轮目标
继续完成对标工作,推进 T-042:实现 emccanon.cc straight traverse/feed 子集,让 STRAIGHT_TRAVERSE()、STRAIGHT_FEED() 生成 LinuxCNC EMC_TRAJ_LINEAR_MOVE 到 interp_list。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-042,下一条为 T-043 dwell/path-control。
- 读取上游
linuxcnc/src/emc/task/emccanon.cc,确认:generate_fast_move()构造EMC_TRAJ_LINEAR_MOVE并 append 到interp_list。generate_move()构造 feedEMC_TRAJ_LINEAR_MOVE并 append 到interp_list。STRAIGHT_TRAVERSE()设置 line number 并通过tag_and_send()进入 linear move / interp_list 路径。STRAIGHT_FEED()进入 segment/feed linear move 路径。
- 扩展
emccanon_wasm_subset.hh/.cc:- 新增
lc_emccanon_subset_straight_motion_anchor_list()。 - anchor 明确包含
generate_fast_move,generate_move,STRAIGHT_TRAVERSE,STRAIGHT_FEED,EMC_TRAJ_LINEAR_MOVE,interp_list。
- 新增
- 修改
linuxcnc_task_hal_wasm.cpp:TaskRuntime新增 T-042 evidence 字段:straightTraverseCount、straightFeedCount、linearMoveAppendCount、lastLinearMoveLine、lastLinearMoveType、lastInterpListCommand、straightMotionAnchors。- 新增
mark_emccanon_straight_linear_move()。 - 在
taskintf_command_from_canon()中记录 canon straight move 到EMC_TRAJ_LINEAR_MOVE/interp_list的证据。 - status JSON 的
emccanonSourceReuse输出上述字段。
- 修改
tests/wasm/node/verify_task_hal_wasm.mjs:- 主 smoke 断言 straight traverse/feed 计数、linear move append、last line、
lastInterpListCommand=EMC_TRAJ_LINEAR_MOVE和 T-042 anchors。 - no-json staged program RUN 断言
STRAIGHT_FEED到EMC_TRAJ_LINEAR_MOVE证据。 - 新增输出
emccanon_straight_motion_status=ok。
- 主 smoke 断言 straight traverse/feed 计数、linear move append、last line、
- 新增
tools/verify_task_emccanon_straight_motion.sh,验证上游锚点、subset API、wrapper evidence、WASM smoke 和 T-042/T-043 矩阵状态。 - 更新
tools/verify_task_emccanon_init_finish_unit.sh,让 T-041 gate 在 T-042 完成后检查 T-042 已完成,而不是旧的下一条指针。 - 更新 source reuse、drift、compatibility 文档和
verify_task_source_reuse_drift_docs.sh,固定 T-042 文档口径。 - 更新任务矩阵:T-042 标为完成,下一条优先任务改为 T-043。
影响文件
wasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_emccanon_straight_motion.shwasm-port/tools/verify_task_emccanon_init_finish_unit.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/04-任务矩阵.md
当前结论
T-042 已完成。emccanon.cc straight traverse/feed 已有明确 EMC_TRAJ_LINEAR_MOVE / interp_list evidence,并继续通过 taskintf.cc structured linear move 边界进入 motion runtime。下一步进入 T-043:DWELL() 和 SET_MOTION_CONTROL_MODE() 对标。
2026-07-08 03:36 EDT
本轮目标
继续完成对标工作,推进 T-041:实现 emccanon.cc canon init/finish/unit 子集,让 INIT_CANON()、ON_RESET()、FINISH()、单位/endpoint getter 接入 EMC_STAT 等价状态边界。
本轮做了什么
- 读取任务矩阵,确认 T-041 是当前推进目标,T-042 为下一条 straight traverse/feed 子集。
- 扩展
emccanon_wasm_subset.hh/.cc:- 新增
LcEmcCanonSubsetState和长度单位枚举。 - 新增
lc_emccanon_subset_init()、lc_emccanon_subset_on_reset()、lc_emccanon_subset_finish()。 - 新增
lc_emccanon_subset_use_length_units()和 external length/angle/unit getter。 - 新增
lc_emccanon_subset_update_endpoint()、lc_emccanon_subset_get_external_position()。 - anchor list 纳入
INIT_CANON/ON_RESET/FINISH/USE_LENGTH_UNITS/GET_EXTERNAL_*。
- 新增
- 修改
linuxcnc_task_hal_wasm.cpp:TaskRuntime新增emccanon_state以及 init/finish/reset/unit/position/endpoint evidence 计数。- session init 使用 motion config linear/angular units 初始化 canon subset。
- motion snapshot 和 canon move issue 路径更新 external endpoint。
- plan reset 调用
lc_emccanon_subset_on_reset()。 - status JSON 的
emccanonSourceReuse输出 units、endpoint 和initFinishUnitAnchors。
- 修改
tests/wasm/node/verify_task_hal_wasm.mjs:- 断言 T-041 anchors、init/finish/unit/position/endpoint/reset evidence。
- 新增 smoke 输出
emccanon_init_finish_unit_status=ok。
- 新增
tools/verify_task_emccanon_init_finish_unit.sh,验证上游锚点、subset API、wrapper 使用、status JSON、WASM smoke 和 T-041/T-042 矩阵状态。 - 更新 source reuse、drift、compatibility 文档和
verify_task_source_reuse_drift_docs.sh,固定 T-041 文档口径。 - 修正两个跟推进指针老化有关的 gate:
verify_task_emctask_plan_read_execute.sh改为检查 T-041 已完成。verify_task_taskintf_jog_home_switchkins.sh改为检查 T-037 已完成。
- 更新任务矩阵:T-041 标为完成,下一条优先任务改为 T-042。
影响文件
wasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_emccanon_init_finish_unit.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/tools/verify_task_emctask_plan_read_execute.shwasm-port/tools/verify_task_taskintf_jog_home_switchkins.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/04-任务矩阵.md
当前结论
T-041 已完成。emccanon.cc 的 canon init/reset/finish/unit/external position getter 已进入 source-anchored subset,task-HAL status 可观测 T-041 evidence;readiness 仍保持未提升。下一步进入 T-042:实现 STRAIGHT_TRAVERSE()、STRAIGHT_FEED() 到 EMC_TRAJ_LINEAR_MOVE/interp_list 的对标。
2026-07-08 03:14 EDT
本轮目标
继续完成对标工作,推进 T-040:实现 emctask.cc plan read/execute 子集,让 PlanRead/Execute/Line/Level/Command 驱动 staged program 到 interp_list/taskintf 路径,并移除 RUN 对 host JSON motion plan 的硬依赖。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-040。
- 读取上游
linuxcnc/src/emc/task/emctask.cc和emctaskmain.cc:emcTaskPlanRead()调用interp.read()。emcTaskPlanExecute()调用interp.execute(),MDI 时可先 synch,之后FINISH()。emcTaskPlanLine()、emcTaskPlanLevel()、emcTaskPlanCommand()暴露 read line、call level 和 command 文本。readahead_reading()通过PlanRead -> PlanLine/Command -> PlanExecute -> interp_list推进 interpreter。
- 扩展
emctask_wasm_subset.hh/.cc:- 新增
LcEmcTaskSubsetPlanIoResult。 - 新增
lc_emctask_subset_plan_read()。 - 新增
lc_emctask_subset_plan_execute()。 - 新增
lc_emctask_subset_plan_line()。 - 新增
lc_emctask_subset_plan_level()。 - 新增
lc_emctask_subset_plan_command()。 - 新增
lc_emctask_subset_plan_read_execute_anchor_list()。 lc_emctask_subset_anchor_list()纳入emcTaskPlanRead/Execute/Line/Level/Command。
- 新增
- 修改
linuxcnc_task_hal_wasm.cpp:TaskRuntime新增 T-040 evidence 字段:read/execute/line/level/command 计数、interpListAppendCount、last line/level/command、read/execute anchors。- 新增
mark_emctask_plan_read_execute()。 - 新增
emctask_plan_execute_command()。 - 新增
emctask_plan_read_execute_program_line()。 - 拆出
issue_linear_move_from_line(),让 PlanRead 返回的 line number 驱动 canon/taskintf motion issue。 task_accepts_plan_run()不再要求motion_plan_loaded,改为要求 staged program lines 存在。wasm_emcTaskExecute()的 program work 判断改为支持 staged program lines。- no-json path 通过
PlanRead/Line/Level/Command/Execute读取 staged program line,并 append 到当前pending_execute_motion_commands/taskintf issue 等价路径。 - MDI
EMC_TASK_PLAN_EXECUTE也进入PlanExecuteevidence 路径。 - RUN 起点不再立即 set wait,避免阻塞
PlanRead();staged program 行读完后记录并清理 wait。
- 修改
tests/wasm/node/verify_task_hal_wasm.mjs:- 更新 emctask anchors。
- 新增 no-json staged program smoke,不调用
lctask_load_program_motion_plan_json()。 - 断言
planReadCount、planExecuteCount、planLineCount、planLevelCount、planCommandCount、interpListAppendCount、planReadExecuteAnchors。 - 新增输出
emctask_plan_read_execute_status=ok。
- 修改
tests/wasm/node/verify_task_state_matrix.mjs:- 将旧的 loadPlan:false 拒绝用例改为 staged program 可执行用例。
- 输出改为
run_gate_staged_program_executes_without_json_plan=ok。
- 新增
tools/verify_task_emctask_plan_read_execute.sh,验证上游锚点、subset API、wrapper no-json RUN、WASM smoke、state matrix 和 T-040/T-041 矩阵状态。 - 更新
tools/verify_task_emctask_plan_open_wait.sh,适配 T-040 已完成后的矩阵状态。 - 更新
tools/verify_task_source_reuse_drift_docs.sh,把 T-040 文档和 gate 纳入 source reuse/drift/compatibility 检查。 - 更新
docs/source-reuse-map.md、docs/drift-report.md、docs/compatibility-validation.md,记录 T-040 plan read/execute/line/level/command 映射。 - 更新任务矩阵:T-040 标为完成,下一推进指针改为 T-041。
- 新增决策 D-032,记录 staged program 主路径接管、RUN wait 调整和 JSON motion plan 兼容入口保留。
改了哪些文件
wasm-port/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tests/wasm/node/verify_task_state_matrix.mjswasm-port/tools/verify_task_emctask_plan_read_execute.shwasm-port/tools/verify_task_emctask_plan_open_wait.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过。./tools/verify_task_emctask_plan_read_execute.sh:通过,验证 T-040 plan read/execute/line/level/command 和 no-json staged program RUN。./tools/verify_task_source_reuse_drift_docs.sh:通过。./tools/verify_task_emctask_plan_open_wait.sh:通过,确认 T-039 gate 适配 T-040 已完成后的矩阵状态。node ./tests/wasm/node/verify_task_state_matrix.mjs:通过,确认 staged program 不依赖 JSON motion plan。./tools/verify_task_emctask_update_snapshot.sh:通过。./tools/verify_task_emctask_state_mode.sh:通过。./tools/verify_task_emctask_subset.sh:通过。./tests/wasm/node/verify_task_hal_sdk.sh:通过。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh:通过。./tools/verify_task_hal_readiness_contract.sh:通过,确认 readiness 不提升。git diff --check -- ...:通过。
下一步
推进 T-041:实现 emccanon.cc canon init/finish/unit 子集,让 INIT_CANON()、ON_RESET()、FINISH()、单位/endpoint getter 接入 EMC_STAT 等价状态边界。
2026-07-08 02:30 EDT
本轮目标
继续完成对标工作,推进 T-039:实现 emctask.cc plan wait/synch/open/close 子集,让 PlanSetWait/IsWait/ClearWait/Synch/Open/Close/Reset 接入 vendored emctask_wasm_subset 和 staged FS 边界。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-039。
- 读取上游
linuxcnc/src/emc/task/emctask.cc:emcTaskPlanSetWait()/emcTaskPlanIsWait()/emcTaskPlanClearWait()操作waitFlag。emcTaskPlanSynch()调用interp.synch(),错误时触发 abort。emcTaskPlanOpen()清零 motion/current/read line,调用interp.open(file),成功后设置taskplanopen=1。emcTaskPlanClose()调用interp.close()并清taskplanopen。emcTaskPlanReset()调用interp.reset()。
- 扩展
emctask_wasm_subset.hh/.cc:- 新增
LcEmcTaskSubsetPlanState。 - 新增
LcEmcTaskSubsetPlanResult。 - 新增
lc_emctask_subset_plan_set_wait()、lc_emctask_subset_plan_is_wait()、lc_emctask_subset_plan_clear_wait()。 - 新增
lc_emctask_subset_plan_synch()、lc_emctask_subset_plan_open()、lc_emctask_subset_plan_close()、lc_emctask_subset_plan_reset()。 - 新增
lc_emctask_subset_plan_anchor_list()。
- 新增
- 修改
linuxcnc_task_hal_wasm.cpp:TaskRuntime新增 plan wait/open 状态和 T-039 evidence 计数字段。- 新增
emctask_plan_state_from_runtime()、apply_emctask_plan_result()、emctask_plan_set_wait()、emctask_plan_clear_wait()、emctask_plan_synch()、emctask_plan_close()、emctask_plan_reset()。 apply_emctask_command_result()对should_plan_synch调用emctask_plan_synch()。lctask_open_program()改为通过lc_emctask_subset_plan_open()处理 open 决策,并继续由 wrapper 管理 staged FS 文本。EMC_TASK_PLAN_RUN接受前要求task_plan_open=true,开始 RUN 时通过PlanSetWait设置 wait flag。- 程序完成和 motion wait done 路径通过
PlanClearWait清 wait flag。 - 新增
EMC_TASK_PLAN_CLOSE和EMC_TASK_PLAN_RESET的 task-cycle command 分支。 - status JSON 的
task新增taskPlanOpen、taskPlanWait,emctaskSourceReuse新增 plan evidence 字段。
- 修改
tests/wasm/node/verify_task_hal_wasm.mjs,断言 T-039 plan anchors、plan open、plan wait set、plan synch 等 evidence。 - 新增
tools/verify_task_emctask_plan_open_wait.sh,验证上游锚点、subset plan state/result、wrapper staged FS/open/wait/synch/close/reset 使用、WASM smoke 断言和 T-039/T-040 矩阵状态。 - 更新
tools/verify_task_emctask_update_snapshot.sh,适配 T-039 已完成后的矩阵状态。 - 更新
tools/verify_task_source_reuse_drift_docs.sh,把 T-039 文档和 gate 纳入 source reuse/drift/compatibility 检查。 - 更新
docs/source-reuse-map.md、docs/drift-report.md、docs/compatibility-validation.md,记录 T-039 plan wait/open/synch/reset 映射。 - 更新任务矩阵:T-039 标为完成,下一推进指针改为 T-040。
- 新增决策 D-031,记录 plan wait/open/synch/reset 采用窄 plan-result 子集,readiness 不提升。
改了哪些文件
wasm-port/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_emctask_plan_open_wait.shwasm-port/tools/verify_task_emctask_update_snapshot.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过。./tools/verify_task_emctask_plan_open_wait.sh:通过,验证 T-039 plan wait/open/synch/reset 输入边界。./tools/verify_task_source_reuse_drift_docs.sh:通过,确认 source reuse / drift / compatibility 文档已记录 T-039。./tools/verify_task_emctask_update_snapshot.sh:通过,确认 T-038 gate 适配 T-039 已完成后的矩阵状态。./tools/verify_task_emctask_state_mode.sh:通过。./tools/verify_task_emctask_subset.sh:通过。node ./tests/wasm/node/verify_task_state_matrix.mjs:通过,确认 command 仍由 task cycle 消费。./tests/wasm/node/verify_task_hal_sdk.sh:通过。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh:通过。./tools/verify_task_hal_readiness_contract.sh:通过,确认 readiness 不提升。git diff --check -- ...:通过。
下一步
推进 T-040:实现 emctask.cc plan read/execute 子集,让 PlanRead/Execute/Line/Level/Command 驱动 interp_list,继续减少 JSON motion plan 主路径依赖。
2026-07-08 01:57 EDT
本轮目标
继续完成对标工作,推进 T-038:实现 emctask.cc determine/update 子集,让 determineMode()、determineState()、emcTaskUpdate() 从 motion/io snapshot 推导 task status,减少 task wrapper 自有状态字符串推导。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-038。
- 复核上游
linuxcnc/src/emc/task/emctask.cc中determineMode()、determineState()、emcTaskUpdate()的输入边界:- task mode 由 traj mode/teleop/free 状态推导。
- task state 由 traj enabled 和 IO estop 推导。
- status update 汇总 motion id、task mode、task state 等字段。
- 修改
linuxcnc_task_hal_wasm.cpp:emctask_subset_traj_mode()优先读取LcmotStatusSnapshot.coord_mode和teleop_mode。- 新增
emctask_subset_traj_enabled(),优先读取LcmotStatusSnapshot.motion_enabled。 - 新增
emctask_subset_io_estop(),聚合 ESTOP latch 与 IO error。 wasm_emcTaskUpdate()改为用 motion/io snapshot 构造LcEmcTaskSubsetUpdateInput。emctaskSourceReuse新增snapshotUpdateCount和updateInputSource,记录正常路径为motionSnapshot,ioSnapshot。
- 修改
tests/wasm/node/verify_task_hal_wasm.mjs,断言 task-HAL smoke 中 snapshot-fed update 已执行。 - 新增
tools/verify_task_emctask_update_snapshot.sh,验证上游锚点、wrapper snapshot 输入、status evidence、WASM smoke 断言和 T-038/T-039 矩阵状态。 - 更新
tools/verify_task_source_reuse_drift_docs.sh,把 T-038 文档和 gate 纳入 source reuse/drift/compatibility 检查。 - 更新
docs/source-reuse-map.md、docs/drift-report.md、docs/compatibility-validation.md,记录 T-038 determine/update snapshot mapping。 - 更新
tools/verify_task_emctask_state_mode.sh,将矩阵检查从“下一步 T-038”调整为“T-038 已完成”,避免 T-037 gate 在矩阵推进后误报。 - 更新任务矩阵:T-038 标为完成,下一推进指针改为 T-039。
- 新增决策 D-030,记录 update 输入改由 motion/io snapshot 提供,readiness 不提升。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_emctask_update_snapshot.shwasm-port/tools/verify_task_emctask_state_mode.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过。./tools/verify_task_emctask_update_snapshot.sh:通过,验证 T-038 determine/update snapshot 输入边界。./tools/verify_task_source_reuse_drift_docs.sh:通过,确认 source reuse / drift / compatibility 文档已记录 T-038。./tools/verify_task_emctask_state_mode.sh:通过,确认 T-037 gate 适配 T-038 已完成后的矩阵状态。./tools/verify_task_emctask_subset.sh:通过,确认 emctask subset source reuse 不回退。node ./tests/wasm/node/verify_task_state_matrix.mjs:通过,确认 command 仍由 task cycle 消费。./tests/wasm/node/verify_task_hal_sdk.sh:通过,确认 SDK wrapper 不回退。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh:通过,确认 low-level motion/HAL sync 不回退。./tools/verify_task_hal_readiness_contract.sh:通过,确认 readiness 不提升。git diff --check -- ...:通过。
下一步
推进 T-039:实现 emctask.cc plan wait/synch/open/close 子集,让 PlanSetWait/IsWait/ClearWait/Synch/Open/Close/Reset 接入 vendored interpreter 和 staged FS。
2026-07-08 01:49 EDT
本轮目标
继续完成对标工作,推进 T-037:实现 emctask.cc abort/state/mode 子集,让 emcTaskAbort()、emcTaskSetMode()、emcTaskSetState() 替换当前 wrapper 自有逻辑,并保持语义由 task cycle 触发。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-037。
- 读取上游
linuxcnc/src/emc/task/emctask.cc:emcTaskAbort()清理 interpreter/task execution 状态并 plan synch。emcTaskSetMode()切换 MANUAL/MDI/AUTO,并按模式同步 traj mode。emcTaskSetState()切换 OFF/ON/ESTOP_RESET/ESTOP,并触发 traj enable/disable、motion abort、unhome、cleanup、plan synch。
- 扩展
emctask_wasm_subset.hh/.cc:- 新增
LC_EMC_TASK_SUBSET_STATE_OFF。 - 新增
LcEmcTaskSubsetCommandResult。 - 新增
lc_emctask_subset_abort()。 - 新增
lc_emctask_subset_set_mode()。 - 新增
lc_emctask_subset_set_state()。 - 新增
lc_emctask_subset_state_mode_anchor_list()。 lc_emctask_subset_anchor_list()扩展为emcTaskAbort,emcTaskSetMode,emcTaskSetState,determineMode,determineState,emcTaskUpdate。
- 新增
- 修改
linuxcnc_task_hal_wasm.cpp:- 新增 mode/state 字符串与 emctask subset enum 的转换。
- 新增
apply_emctask_command_result(),统一执行 clear interpreter、traj enable/disable、unhome、motion abort、homing reset 等 wrapper 动作。 TaskCommandType::SetState改为调用lc_emctask_subset_set_state()。TaskCommandType::SetMode改为调用lc_emctask_subset_set_mode()。TaskCommandType::Abort改为调用lc_emctask_subset_abort()。- status JSON 的
emctaskSourceReuse新增stateModeIssueCount、abortIssueCount、stateModeAnchors。
- 更新
tests/wasm/node/verify_task_hal_wasm.mjs,断言新的 emctask anchors 和 state/mode/abort 状态字段。 - 更新
tools/verify_task_emctask_subset.sh,把 abort/set-mode/set-state 纳入 source reuse 检查。 - 新增
tools/verify_task_emctask_state_mode.sh,验证 T-037 的上游锚点、subset command-result、wrapper 使用、state matrix gate 和矩阵状态。 - 更新
tools/verify_task_source_reuse_drift_docs.sh。 - 更新
docs/source-reuse-map.md、docs/drift-report.md、docs/compatibility-validation.md,记录 T-037 abort/state/mode command-result 映射和验证 gate。 - 更新任务矩阵:T-037 标为完成,下一推进指针改为 T-038。
- 新增决策 D-029,记录 T-037 采用窄 command-result 子集,以及 set-mode 不直接下发 motion abort 的 runtime-edge 降级理由。
改了哪些文件
wasm-port/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_emctask_subset.shwasm-port/tools/verify_task_emctask_state_mode.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过。./tools/verify_task_emctask_state_mode.sh:通过,验证 T-037 abort/state/mode 实现和矩阵状态。./tools/verify_task_emctask_subset.sh:通过,确认 emctask subset source reuse 不回退。./tools/verify_task_source_reuse_drift_docs.sh:通过,确认 source reuse / drift / compatibility 文档已记录 T-037。node ./tests/wasm/node/verify_task_state_matrix.mjs:通过,确认 command 仍由 task cycle 消费。./tests/wasm/node/verify_task_hal_sdk.sh:通过,确认 SDK wrapper 不回退。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh:通过,确认 low-level motion/HAL sync 不回退。./tools/verify_task_hal_readiness_contract.sh:通过,确认 readiness 不提升。git diff --check -- ...:通过。
下一步
推进 T-038:实现 emctask.cc determine/update 子集,让 determineMode()、determineState()、emcTaskUpdate() 从 motion/io snapshot 推导 task status,并进一步收敛当前 wrapper 推导逻辑。
2026-07-08 01:39 EDT
本轮目标
继续完成对标工作,推进 T-036:实现 taskintf.cc jog/home/switchkins 子集,让 emcJogIncr()、emcJointHome/Unhome()、emcMotionSetAout() 接入结构化 taskintf/lcmot bridge,并保持 Home/Jog/M428-M430 验收通过。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-036。
- 读取上游
linuxcnc/src/emc/task/taskintf.cc:emcJogIncr()填充EMCMOT_JOG_INCR、axis/joint、vel、offset。emcJointHome()填充EMCMOT_JOINT_HOME和 joint。emcJointUnhome()填充EMCMOT_JOINT_UNHOME和 joint。emcMotionSetAout()填充EMCMOT_SET_AOUT、index、now、start/end。
- 扩展
linuxcnc_motion_runtime.h/.c:- 新增
lcmot_write_jog_incr()。 - 新增
lcmot_write_joint_home()。 - 新增
lcmot_write_joint_unhome()。 - 新增
lcmot_write_aout()。 - 新增
LCMOT_CMD_JOINT_HOME、LCMOT_CMD_JOINT_UNHOME,并扩展LcmotCommand的 joint/aout 字段。 - 保留 JSON 兼容解析,但 taskintf 主路径改走结构化 ABI。
- 新增
- 扩展
taskintf_wasm_subset.hh/.cc:- 新增
LC_TASKINTF_SUBSET_COMMAND_JOINT_UNHOME。 - 新增
lc_taskintf_subset_joint_unhome()。 - 新增
lc_taskintf_subset_jog_incr_ex(),保留 axis/joint jog mode 和 motion id。 - 新增
lc_taskintf_subset_jog_home_switchkins_anchor_list()。 - anchor list 纳入
emcJointUnhome()。
- 新增
- 修改
linuxcnc_task_hal_wasm.cpp:issue_taskintf_motion_command()对 jog/home/unhome/aout 分别调用结构化lcmot_write_*。taskintfSourceReuse新增jogHomeSwitchkinsIssueCount、jogHomeSwitchkinsStructuredIssueCount、jogHomeSwitchkinsAnchors。
- 修改
tools/build_task_hal_wasm.sh,导出_lcmot_write_jog_incr、_lcmot_write_joint_home、_lcmot_write_joint_unhome、_lcmot_write_aout。 - 更新
tests/wasm/node/verify_task_hal_wasm.mjs:- taskintf anchors 增加
emcJointUnhome。 - 断言
jogHomeSwitchkins*状态字段。 - MDI smoke 覆盖 M428、M429、M430。
- 直接 ABI smoke 覆盖
lcmot_write_aout()、lcmot_write_jog_incr()、lcmot_write_joint_home()、lcmot_write_joint_unhome()。 - 新增输出
taskintf_jog_home_switchkins_status=ok。
- taskintf anchors 增加
- 新增
tools/verify_task_taskintf_jog_home_switchkins.sh,验证 T-036 的上游锚点、subset envelope、结构化 lcmot ABI、WASM export、smoke 输出和矩阵状态。 - 更新
tools/verify_task_taskintf_subset.sh、tools/verify_task_taskintf_linear_move.sh、tools/verify_task_source_reuse_drift_docs.sh。 - 更新
docs/source-reuse-map.md、docs/drift-report.md、docs/compatibility-validation.md,记录 T-036 jog/home/switchkins 映射和验证 gate。 - 更新任务矩阵:T-036 标为完成,下一推进指针改为 T-037。
- 新增决策 D-028,记录 jog/home/switchkins 采用结构化
lcmot_write_*下发,readiness 不提升。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.hwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.cwasm-port/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tools/build_task_hal_wasm.shwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_taskintf_jog_home_switchkins.shwasm-port/tools/verify_task_taskintf_subset.shwasm-port/tools/verify_task_taskintf_linear_move.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过,输出taskintf_jog_home_switchkins_status=ok。./tools/verify_task_taskintf_jog_home_switchkins.sh:通过,验证 T-036 jog/home/switchkins 实现和矩阵状态。./tools/verify_task_taskintf_subset.sh:通过,确认 taskintf subset source reuse 不回退。./tools/verify_task_source_reuse_drift_docs.sh:通过,确认 source reuse / drift / compatibility 文档已记录 T-036。./tools/verify_task_taskintf_linear_move.sh:通过,确认 T-035 gate 按当前矩阵口径不回退。./tools/verify_task_taskintf_traj_control.sh:通过,确认 T-034 gate 不回退。./tools/verify_task_taskintf_motion_bridge.sh:通过,确认 T-033 bridge gate 不回退。./tools/verify_task_hal_readiness_contract.sh:通过,确认 readiness 不提升。./tests/wasm/node/verify_task_hal_sdk.sh:通过,确认 SDK wrapper 不回退。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh:通过,确认 low-level motion/HAL sync 不回退。git diff --check -- ...:通过。
下一步
推进 T-037:实现 emctask.cc abort/state/mode 子集,让 emcTaskAbort()、emcTaskSetMode()、emcTaskSetState() 替换当前自有逻辑,并保持语义由 task cycle 触发。
2026-07-08 01:27 EDT
本轮目标
继续完成对标工作,推进 T-035:实现 taskintf.cc linear move issue 子集,让 emcTrajLinearMove() 替换 task JSON linear move 拼接,并保持 G0/G1 smoke 通过。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-035。
- 读取上游
linuxcnc/src/emc/task/taskintf.cc的emcTrajLinearMove(),确认上游行为是填充EMCMOT_SET_LINE、目标 pose、motion id、motion type、vel、ini maxvel、acc、ini maxjerk,并通过usrmotWriteEmcmotCommand()写给 motion。 - 扩展
linuxcnc_motion_runtime.h/.c:- 新增结构化 ABI
lcmot_write_linear_move()。 LcmotCommand增加motion_id、motion_type、ini_maxvel、acceleration、ini_maxjerk。- linear/circular/jog issue 时优先使用 command motion id,其次消费
SET_MOTION_ID的 next id,否则递增。 - 保留
lcmot_write_command_json()兼容路径,并补充解析motionType、iniMaxVel、acceleration、iniMaxJerk。
- 新增结构化 ABI
- 扩展
taskintf_wasm_subset.hh/.cc:- 新增
lc_taskintf_subset_linear_move_ex()。 - linear command envelope 保留 line、motion type、motion id、velocity、ini maxvel、acceleration、ini maxjerk 和 pose。
- 新增
lc_taskintf_subset_linear_move_anchor_list(),固定emcTrajLinearMove,EMCMOT_SET_LINE,usrmotWriteEmcmotCommand。
- 新增
- 修改
linuxcnc_task_hal_wasm.cpp:pending_execute_motion_commands从纯 JSON 字符串改为PendingMotionCommand。- linear move 主路径和 pending execute flush 都调用
lcmot_write_linear_move()。 - 非 linear 的 jog/home/switchkins/traj control 暂保留现有 JSON 兼容路径,留给 T-036。
- status JSON 新增
linearMoveIssueCount、linearMoveStructuredIssueCount、linearMoveAnchors。
- 更新
tools/build_task_hal_wasm.sh,导出_lcmot_write_linear_move。 - 更新
tests/wasm/node/verify_task_hal_wasm.mjs:- 第一段 motion plan 改为
STRAIGHT_TRAVERSE,后续仍覆盖STRAIGHT_FEED。 - 断言
linearMoveIssueCount、linearMoveStructuredIssueCount、linearMoveAnchors。 - 增加直接
_lcmot_write_linear_move()smoke。 - 新增输出
taskintf_linear_move_status=ok。
- 第一段 motion plan 改为
- 新增
tools/verify_task_taskintf_linear_move.sh,验证 T-035 的上游锚点、subset envelope、结构化lcmotABI、WASM export、smoke 输出和矩阵状态。 - 更新
tools/verify_task_taskintf_subset.sh、tools/verify_task_taskintf_traj_control.sh、tools/verify_task_source_reuse_drift_docs.sh。 - 更新
docs/source-reuse-map.md、docs/drift-report.md、docs/compatibility-validation.md,记录 T-035 linear move 映射和验证 gate。 - 更新任务矩阵:T-035 标为完成,下一推进指针改为 T-036。
- 新增决策 D-027,记录 linear move 采用结构化
lcmot_write_linear_move()下发,readiness 不提升。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.hwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.cwasm-port/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tools/build_task_hal_wasm.shwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_taskintf_linear_move.shwasm-port/tools/verify_task_taskintf_subset.shwasm-port/tools/verify_task_taskintf_traj_control.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过,输出taskintf_linear_move_status=ok。./tools/verify_task_taskintf_linear_move.sh:通过,验证 T-035 linear move 实现和矩阵状态。./tools/verify_task_taskintf_subset.sh:通过,确认 taskintf subset source reuse 不回退。./tools/verify_task_source_reuse_drift_docs.sh:通过,确认 source reuse / drift / compatibility 文档已记录 T-035。./tools/verify_task_taskintf_traj_control.sh:通过,确认 T-034 gate 按当前矩阵口径不回退。./tools/verify_task_hal_readiness_contract.sh:通过,确认 readiness 不提升。./tools/verify_task_taskintf_motion_bridge.sh:通过,确认 T-033 bridge gate 不回退。./tests/wasm/node/verify_task_hal_sdk.sh:通过,确认 SDK wrapper 不回退。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh:通过,确认 low-level motion/HAL sync 不回退。git diff --check -- ...:通过。
下一步
推进 T-036:实现 taskintf.cc jog/home/switchkins 子集,让 emcJogIncr()、emcJointHome/Unhome()、emcMotionSetAout() 从现有 JSON 兼容路径继续收拢到结构化 taskintf/lcmot bridge。
2026-07-08 01:13 EDT
本轮目标
继续完成对标工作,推进 T-034:实现 taskintf.cc traj control 子集,让 emcTrajEnable/Disable/Abort/Pause/Step/Resume/SetMotionId 接入 lcmot,并保持 pause/step/resume smoke 不回退。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-034。
- 读取上游
linuxcnc/src/emc/task/taskintf.cc中emcTrajSetMotionId()、emcTrajEnable()、emcTrajDisable()、emcTrajAbort()、emcTrajPause()、emcTrajStep()、emcTrajResume()。 - 读取上游
linuxcnc/src/emc/motion/motion.h和command.c,确认EMCMOT_ENABLE/EMCMOT_DISABLE/EMCMOT_ABORT/EMCMOT_PAUSE/EMCMOT_STEP/EMCMOT_RESUME的 motion command 边界。 - 扩展
LcmotStatusSnapshot,在结构尾部追加motion_enabled和next_motion_id,不改变既有字段偏移。 - 扩展
linuxcnc_motion_runtime.c:- 新增
LCMOT_CMD_ENABLE、LCMOT_CMD_DISABLE、LCMOT_CMD_SET_MOTION_ID。 - 新增 runtime 状态
motion_enabled、next_motion_id、has_next_motion_id。 EMC_TRAJ_ENABLE/EMCMOT_ENABLE设置 enabled。EMC_TRAJ_DISABLE/EMCMOT_DISABLE清 enabled 并清 current velocity。EMC_TRAJ_SET_MOTION_ID/EMCMOT_SET_MOTION_ID设置下一条 motion id。- linear/jog motion issue 时优先使用已设置 motion id,否则保持原有递增行为。
- 新增
- 扩展
taskintf_wasm_subset.hh/.cc:- 新增
LC_TASKINTF_SUBSET_COMMAND_TRAJ_ENABLE。 - 新增
LC_TASKINTF_SUBSET_COMMAND_TRAJ_DISABLE。 - 新增
LC_TASKINTF_SUBSET_COMMAND_TRAJ_SET_MOTION_ID。 - 新增
lc_taskintf_subset_traj_enable()、lc_taskintf_subset_traj_disable()、lc_taskintf_subset_traj_set_motion_id()。 - 新增
lc_taskintf_subset_traj_control_anchor_list()。
- 新增
- 修改
linuxcnc_task_hal_wasm.cpp:taskintf_motion_json()支持 enable/disable/set-motion-id command JSON。- 新增
taskintf_traj_control_issue_count和taskintf_traj_control_anchors。 - state ON 时通过 taskintf traj enable 接入
lcmot。 - state OFF/ESTOP 时通过 taskintf traj disable 和 abort 接入
lcmot。 - program line、timed motion sample、MDI linear move issue 前先通过
lc_taskintf_subset_traj_set_motion_id()设置 motion id。 - status JSON 导出
trajControlIssueCount、trajControlAnchors、motionenabled和nextMotionId。
- 更新
tests/wasm/node/verify_task_hal_wasm.mjs:- 更新 taskintf source reuse anchors。
- 断言
trajControlIssueCount和trajControlAnchors。 - 断言 motion
enabled和nextMotionId。 - 新增输出
taskintf_traj_control_status=ok。
- 更新
tools/verify_task_taskintf_subset.sh,把 SetMotionId/Enable/Disable 纳入 source reuse 验证。 - 新增
tools/verify_task_taskintf_traj_control.sh,验证 T-034 的上游锚点、subset command envelope、lcmot状态、wrapper JSON、smoke 输出和矩阵状态。 - 更新
docs/source-reuse-map.md、docs/drift-report.md、docs/compatibility-validation.md,记录 T-034 traj control 映射和验证 gate。 - 更新任务矩阵:T-034 标为完成,下一推进指针改为 T-035。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.hwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.cwasm-port/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_taskintf_subset.shwasm-port/tools/verify_task_taskintf_traj_control.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过,输出taskintf_traj_control_status=ok。./tools/verify_task_taskintf_traj_control.sh:验证 T-034 traj control 实现和矩阵状态。./tools/verify_task_taskintf_subset.sh:验证 taskintf subset source reuse 不回退。./tools/verify_task_source_reuse_drift_docs.sh:验证 source reuse / drift / compatibility 文档已记录 T-034。./tools/verify_task_hal_readiness_contract.sh:通过,确认 readiness 不提升。./tools/verify_task_taskintf_motion_bridge.sh:通过,确认 T-033 bridge gate 在 T-034 后仍稳定。./tests/wasm/node/verify_task_hal_sdk.sh:通过,确认 SDK wrapper 不回退。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh:通过,确认 low-level motion/HAL sync 不回退。git diff --check -- ...:通过。
下一步
推进 T-035:实现 taskintf.cc linear move issue 子集,让 emcTrajLinearMove() 替换 task JSON linear move 拼接。
2026-07-08 01:00 EDT
本轮目标
继续完成对标工作,推进 T-033:实现 taskintf.cc motion init/update/abort 子集,让 emcMotionInit()、emcMotionUpdate()、emcMotionAbort() 通过 WASM usrmot/lcmot bridge 工作。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-033。
- 读取上游
linuxcnc/src/emc/task/taskintf.cc:emcMotionInit()调用 traj/joint/axis/spindle init,并由 usrmot 初始化 motion edge。emcMotionAbort()对 joint jog abort 和 traj abort 发 command。emcMotionUpdate()依次读取 usrmot status、config、internal、error,再更新 traj/joint/axis/spindle status。
- 读取上游
linuxcnc/src/emc/motion/usrmotintf.cc,确认 status/config/internal 是 split-read shared-memory copy,error read 是 motion error queue 消费。 - 扩展
runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.h/.c:- 新增
LcmotConfigSnapshot。 - 新增
lcmot_read_config_snapshot()。 - 新增
lcmot_read_error_message()。 - 在 abort、motion error、soft-limit 注入时写入窄 error message queue。
- 从 staged INI 的
COORDINATES计算 axes/joints,供 config snapshot 使用。
- 新增
- 扩展
vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hh/.cc:- 新增
lc_taskintf_subset_motion_init()。 - 新增
lc_taskintf_subset_motion_update(),通过lcmot_read_status_snapshot()、lcmot_read_config_snapshot()、lcmot_read_error_message()获取 motion 状态。 - 新增
lc_taskintf_subset_motion_abort()。 - 新增 motion bridge anchor list:
emcMotionInit,emcMotionUpdate,emcMotionAbort,usrmotReadEmcmotStatus,usrmotReadEmcmotConfig,usrmotReadEmcmotError。
- 新增
- 修改
runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp:lctask_init_session()改为通过lc_taskintf_subset_motion_init()初始化 motion。wasm_emcMotionUpdate()改为通过lc_taskintf_subset_motion_update()读取 status/config/error。- task abort 路径改为通过
lc_taskintf_subset_motion_abort()生成 abort command。 - status JSON 新增
taskintfMotionBridge,暴露 source path、anchors、init/update/abort count、config snapshot 和 last error text。
- 更新
tools/build_task_hal_wasm.sh,导出_lcmot_read_config_snapshot和_lcmot_read_error_message。 - 更新
tests/wasm/node/verify_task_hal_wasm.mjs:- 断言
taskintfMotionBridge的 source path、anchors、init/update count、config snapshot。 - 断言 task abort、motion error、soft-limit 的 last error text。
- 新增输出
taskintf_motion_bridge_status=ok。
- 断言
- 更新
tools/verify_task_taskintf_subset.sh,把emcMotionInit()、emcMotionUpdate()、emcMotionAbort()纳入上游/source subset 检查。 - 新增
tools/verify_task_taskintf_motion_bridge.sh,验证 T-033 的上游锚点、subset bridge、lcmotconfig/error ABI、WASM export、status JSON、smoke 输出和任务矩阵状态。 - 更新
docs/source-reuse-map.md、docs/drift-report.md、docs/compatibility-validation.md,记录 T-033 窄 motion bridge 和验证 gate,同时保持 readiness false。 - 更新
10-taskintf-usrmot-shim设计.md,把 config/error read 从 T-032 缺口更新为 T-033 窄 ABI 已实现。 - 更新任务矩阵:T-033 标为完成,下一推进指针改为 T-034。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.hwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.cwasm-port/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tools/build_task_hal_wasm.shwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_taskintf_subset.shwasm-port/tools/verify_task_taskintf_motion_bridge.shwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.mdwasm-port/working/10-taskintf-usrmot-shim设计.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过,输出taskintf_motion_bridge_status=ok。./tools/verify_task_taskintf_motion_bridge.sh:验证 T-033 motion bridge 实现和矩阵状态。./tools/verify_task_taskintf_subset.sh:验证 taskintf subset 上游锚点不回退。./tools/verify_task_source_reuse_drift_docs.sh:验证 source reuse / drift / compatibility 文档已记录 T-033。./tools/verify_task_hal_readiness_contract.sh:通过,确认 readiness 仍不提升。./tools/verify_task_usrmot_shim_design.sh:通过,确认 T-032 usrmot shim 设计仍一致。./tests/wasm/node/verify_task_hal_sdk.sh:通过,确认 SDK wrapper 不受新增 export/bridge 影响。git diff --check -- ...:通过。
下一步
推进 T-034:实现 taskintf.cc traj control 子集,让 emcTrajEnable/Disable/Abort/Pause/Step/Resume/SetMotionId 接入 lcmot。
2026-07-08 00:52 EDT
本轮目标
继续完成对标工作,推进 T-032:设计 taskintf.cc usrmot shim,明确 usrmot* 到 lcmot_* 的 command write、status read、config read、error read 映射。
本轮做了什么
- 读取任务矩阵,确认当前推进指针为 T-032。
- 读取上游
linuxcnc/src/emc/motion/usrmotintf.h、usrmotintf.cc、linuxcnc/src/emc/task/taskintf.cc:usrmotWriteEmcmotCommand()写 command slot 并等待commandNumEcho/commandStatus。usrmotReadEmcmotStatus()、usrmotReadEmcmotConfig()、usrmotReadEmcmotInternal()都是 shared-memory copy + split-read 稳定性检查。usrmotReadEmcmotError()从 motion error ring 取最早错误字符串。emcMotionUpdate()按 status、config、internal、error 顺序读取 motion 侧数据。
- 读取当前 WASM
lcmot_*C ABI,确认已有:lcmot_init_from_ini()lcmot_write_command_json()lcmot_read_status_snapshot()lcmot_read_status_json()lcmot_read_hal_snapshot_json()lcmot_reset()
- 确认当前没有
lcmot_read_config_snapshot()和lcmot_read_error_message(),因此 config read/error read 不能被声明为已实现。 - 新增
10-taskintf-usrmot-shim设计.md:- 明确不直接复用完整
usrmotintf.cc。 - 明确
usrmotIniLoad()、usrmotInit()、usrmotExit()到lcmot_init_from_ini()/lcmot_reset()的初始化映射。 - 明确 command write 到
lcmot_write_command_json()的映射和返回值降级策略。 - 明确 status read 到
lcmot_read_status_snapshot(),且不得推进 servo、不得消费队列、不得反解析 JSON。 - 明确 config read 需要新增
lcmot_read_config_snapshot()。 - 明确 error read 需要新增
lcmot_read_error_message()。
- 明确不直接复用完整
- 新增
tools/verify_task_usrmot_shim_design.sh:- 校验上游 usrmot/taskintf 锚点存在。
- 校验现有
lcmot_*ABI 能覆盖 init、reset、command write、status snapshot。 - 校验设计文档包含 command/status/config/error 四类映射和禁止路线。
- 校验任务矩阵 T-032 已完成且下一推进指针为 T-033。
- 更新
README.md,把09-emc_nml复用评估.md和10-taskintf-usrmot-shim设计.md加入工作文档索引。 - 更新任务矩阵:T-032 标为完成,下一推进指针改为 T-033。
改了哪些文件
wasm-port/working/10-taskintf-usrmot-shim设计.mdwasm-port/tools/verify_task_usrmot_shim_design.shwasm-port/working/README.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tools/verify_task_usrmot_shim_design.sh:验证 T-032 usrmot shim 设计、上游锚点、lcmot_*ABI 和矩阵状态。./tools/verify_task_taskintf_subset.sh:验证既有taskintf_wasm_subset仍锚定上游taskintf.cc。./tools/verify_task_source_reuse_drift_docs.sh:验证 T-030 文档一致性不回退。./tools/verify_task_hal_readiness_contract.sh:通过,确认 T-032 设计没有提升 readiness 口径。./tests/wasm/node/verify_task_hal_wasm.sh:通过,确认 task-HAL smoke 不回退。git diff --check -- ...:通过。
下一步
推进 T-033:实现 taskintf.cc motion init/update/abort 子集,让 emcMotionInit()、emcMotionUpdate()、emcMotionAbort() 经 WASM usrmot/lcmot bridge 工作。
2026-07-08 00:43 EDT
本轮目标
继续完成对标工作,推进 T-030:更新 source reuse map 与 drift/compatibility 文档,反映 task 主循环迁移阶段和 readiness 真实状态。
本轮做了什么
- 更新
docs/source-reuse-map.md:- 将 phase0 行中“Web simulation promotion”改为“Web simulation validation”,避免误读为 readiness 提升。
- 扩展 Task/motion/HAL simulation runtime 行,记录 T-027 motion ERROR/soft-limit、T-028 top/task/motion/io RCS DONE/EXEC/ERROR 聚合、T-029
emc_nml.hh不直接 include 的决策。 - 保持 readiness contract:
task_hal_runtime_promoted=0、nativeTaskReady=false、nativeHalSyncReady=false、fullLinuxCncProgramExecutionReady=false。 - 增加
tools/verify_task_emc_nml_reuse_plan.sh和tools/verify_task_source_reuse_drift_docs.sh为 validation gate。
- 更新
docs/drift-report.md:- 新增 Task/motion/HAL WASM runtime runtime-edge boundary。
- 新增
emc_nml.hhstatus container boundary,明确完整上游头文件只评估、不 vendored、不直接 include。 - Known Gaps 中补充 task-cycle motion snapshot、motion abort/error/soft-limit、RCS 聚合和 readiness 不提升口径。
- 更新
docs/compatibility-validation.md:- 在 WASM harness 列表中新增
verify_task_hal_wasm.sh、verify_task_hal_sdk.sh。 - 新增 readiness、
emc_nml复用评估和 source/drift 文档一致性 gate。
- 在 WASM harness 列表中新增
- 新增
tools/verify_task_source_reuse_drift_docs.sh:- 验证 source reuse、drift、compatibility 三份文档都包含 readiness false、RCS 聚合、
emc_nml.hh决策和验证脚本。 - 拒绝 source reuse 中重新出现
nativeTaskReady=true或nativeHalSyncReady=true。 - 验证任务矩阵 T-030 已完成。
- 验证 source reuse、drift、compatibility 三份文档都包含 readiness false、RCS 聚合、
- 更新任务矩阵:T-030 标为完成,下一推进指针改为 T-032。
改了哪些文件
wasm-port/docs/source-reuse-map.mdwasm-port/docs/drift-report.mdwasm-port/docs/compatibility-validation.mdwasm-port/tools/verify_task_source_reuse_drift_docs.shwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tools/verify_task_source_reuse_drift_docs.sh:验证 source reuse、drift、compatibility 文档一致性。./tests/wasm/node/verify_task_hal_wasm.sh:通过,确认 task-HAL smoke 不回退。./tools/verify_task_hal_readiness_contract.sh:通过,确认 readiness 口径不回退。./tools/verify_task_emc_nml_reuse_plan.sh:通过,确认 T-029 复用评估仍一致。git diff --check -- ...:通过。./tests/docs/node/verify_project_release_handoff_docs.sh:未完成,失败原因是工作树缺失/home/mes123456/cnc_wams/PROJECT_COMPLETION_TRACKER.md,不是本轮文档断言失败。
下一步
推进 T-032:设计 taskintf.cc usrmot shim,明确 usrmot* 到 lcmot_* 的 command write、status read、config read、error read 映射。
2026-07-08 00:36 EDT
本轮目标
继续完成对标工作,推进 T-029:评估 vendored emc_nml.hh 直接复用可行性,形成直接 include、窄 shim或分阶段 typedef 的选择记录。
本轮做了什么
- 读取当前
runtime/core/shims/nml_intf/emc.hh,确认现有 shim 只覆盖EmcJointType、EMC_STAT.motion.traj.linearUnits和extern EMC_STAT *emcStatus。 - 检查
wasm-port/vendor/linuxcnc/src/emc/nml_intf/,确认当前未 vendoredemc_nml.hh。 - 读取上游
linuxcnc/src/emc/nml_intf/emc_nml.hh,确认完整头文件会拉入:linuxcnc.hemcpos.hemc.hhlibnml/rcs/rcs.hhlibnml/nml/cmd_msg.hhlibnml/nml/stat_msg.hhrs274ngc/modal_state.hhcanon.hhrs274ngc/rs274ngc.hh
- 确认
emc_nml.hh中的EMC_TRAJ_STAT、EMC_MOTION_STAT、EMC_TASK_STAT、EMC_IO_STAT、EMC_STAT都继承 NML/RCS message 基类,并包含update(CMS *)hooks。 - 形成 T-029 结论:当前不直接 include 完整
emc_nml.hh;先采用分阶段 typedef / 窄StandaloneEmcStatus路线。 - 新增
09-emc_nml复用评估.md,记录:- 直接 include 依赖清单。
- 阻塞项。
- 当前需要的状态子集。
- 采用分阶段 typedef / 窄 status 容器的原因。
- 后续 T-007/T-030/T-032/T-033/T-038 入口。
- 新增
tools/verify_task_emc_nml_reuse_plan.sh,固定 T-029 结论和验收:- 上游
emc_nml.hh存在。 - 当前 vendor tree 未声称完整
emc_nml.hh已 vendored。 - 文档包含直接 include 依赖、选择、阻塞和后续入口。
- 任务矩阵将 T-029 标为完成。
- 上游
- 更新任务矩阵:T-029 标为完成,下一推进指针改为 T-030。
改了哪些文件
wasm-port/working/09-emc_nml复用评估.mdwasm-port/tools/verify_task_emc_nml_reuse_plan.shwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tools/verify_task_emc_nml_reuse_plan.sh:验证 T-029 复用评估记录和矩阵状态。
下一步
推进 T-030:更新 source reuse map 与 drift 文档,反映 task 主循环迁移阶段和 readiness 真实状态。
2026-07-08 00:33 EDT
本轮目标
继续完成对标工作,推进 T-028:对齐 top-level RCS_STATUS 聚合,让 task/motion/io 三方 DONE/EXEC/ERROR 聚合逻辑与 emctaskmain.cc 更接近。
本轮做了什么
- 读取上游
linuxcnc/src/emc/task/emctaskmain.cc:WAITING_FOR_MOTION/WAITING_FOR_IO/WAITING_FOR_MOTION_AND_IO分支中,motion/ioRCS_STATUS::ERROR会驱动 task exec error,motion/ioDONE会驱动等待完成。- 顶层 status write 前的聚合逻辑:task exec error、motion error、io error 任一存在则 top/task
ERROR;task exec done、motion done、io done、command/list 为空且 interp idle 则 top/taskDONE;否则 top/taskEXEC。
- 将 T-027 的临时
taskTopLevelStatushelper 升级为显式聚合字段:task_rcs_statusmotion_rcs_statusio_rcs_statustop_level_rcs_status
- 实现
update_top_level_status():- motion snapshot status
2->ERROR,0->DONE,其它 ->EXEC。 - IO error shim ->
ERROR,否则DONE。 - task exec
ERROR、motionERROR、ioERROR任一存在 -> top/taskERROR。 - task exec
DONE、interpIDLE、pending command 为空、pending execute motion 为空、motionDONE、ioDONE-> top/taskDONE。 - 其它状态 -> top/task
EXEC。
- motion snapshot status
- 修改
write_status_snapshot(),每次写 status buffer 前都调用update_top_level_status(),保证 send/status/read path 不绕过聚合。 - 更新 status JSON:
- 顶层
taskTopLevelStatus来自top_level_rcs_status。 - 新增
rcsStatus.top/task/motion/io。 - task 对象新增
task.status。
- 顶层
- 更新
verify_task_hal_wasm.mjs:- RUN 后 interp 仍未 idle 时断言 top/task 为
EXEC,motion 为DONE,io 为DONE。 - motion queue 完成后断言 top/task/motion/io 全部为
DONE。 - motion abort、motion ERROR、soft-limit、IO error 均断言聚合为
ERROR,并区分 motion/io 子状态。 - 新增输出
task_top_level_rcs_status_aggregation=ok。
- RUN 后 interp 仍未 idle 时断言 top/task 为
- 更新任务矩阵:T-028 标为完成,下一推进指针改为 T-029。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过,新增task_top_level_rcs_status_aggregation=ok。
下一步
推进 T-029:评估 vendored emc_nml.hh 直接复用可行性,形成直接 include、窄 shim 或分阶段 typedef 的选择记录。
2026-07-08 00:22 EDT
本轮目标
继续完成对标工作,推进 T-027:新增 motion error/soft-limit 注入测试,让 subordinate sync 对 motion ERROR 和 soft-limit 的 task 状态影响有专门覆盖。
本轮做了什么
- 复核
linuxcnc_motion_runtime.c/.h,确认当前 motion snapshot 只有aborted和聚合status,没有独立 motion error 或 soft-limit 字段。 - 在
LcmotRuntime中新增、在LcmotStatusSnapshot尾部追加:motion_erroron_soft_limit
- 在 motion command parser 中新增两个测试注入命令:
EMCMOT_INJECT_ERROREMCMOT_INJECT_SOFT_LIMIT
- 在 motion runtime 中将上述两个注入命令作为即时 control 命令处理,并在 error/soft-limit 后停止继续消费 motion queue。
- 更新
lcmot_read_status_snapshot(),当 aborted、motion error 或 soft-limit 任一存在时输出status=2。 - 更新 motion JSON 和 task status JSON,暴露
status、motionError、onSoftLimit。 - 更新
sync_subordinate_states():on_soft_limit驱动 taskexecState=ERROR、errorText=MOTION_SOFT_LIMIT。motion_error或 motionstatus=2驱动 taskexecState=ERROR、errorText=MOTION_ERROR。- 保留 task 自己发起 abort 的 cleanup 分支,避免用户主动 abort 被误报。
- 新增最小
taskTopLevelStatus导出:T-027 先覆盖 ERROR/DONE/EXEC 的保守状态表面,完整 RCS 聚合仍留给 T-028。 - 更新
verify_task_hal_wasm.mjs:- 新增 motion ERROR 注入断言。
- 新增 soft-limit 注入断言。
- 断言 motion abort、motion ERROR、soft-limit、IO error 均驱动
taskTopLevelStatus=ERROR。 - 新增输出
motion_error_drives_task_error=ok和motion_soft_limit_drives_task_error=ok。
- 初次回归
verify_motion_hal_sync.sh时发现LcmotStatusSnapshot是 C ABI 固定 offset 结构;新增字段插入中间会破坏现有 Node struct 读取。随后将新增字段移动到结构尾部,保留已有字段 offset 不变。 - 更新任务矩阵:T-027 标为完成,下一推进指针改为 T-028。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.hwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.cwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过,新增motion_error_drives_task_error=ok、motion_soft_limit_drives_task_error=ok。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh:通过,确认 snapshot struct 固定 offset 不回退。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_sdk.sh:通过。node tests/wasm/node/verify_task_state_matrix.mjs:通过。./tests/native/verify_task_hal_phase0.sh:通过。./tools/verify_task_hal_readiness_contract.sh:通过。git diff --check -- ...:通过。
下一步
推进 T-028:对齐 top-level RCS_STATUS 聚合,让 task/motion/io 三方 DONE/EXEC/ERROR 聚合逻辑与 emctaskmain.cc 更接近。
2026-07-08 00:13 EDT
本轮目标
继续完成对标工作,推进 T-015:修正 readiness 文档和实现口径,确保 nativeTaskReady、nativeHalSyncReady、fullLinuxCncProgramExecutionReady 与当前能力边界一致。
本轮做了什么
- 复核
docs/source-reuse-map.md,确认其中仍有旧口径:声称 Task/motion/HAL simulation runtime 已 promoted,并把 native task/HAL readiness 误写为 true。 - 更新
docs/source-reuse-map.md:- 将 Task/motion/HAL simulation runtime classification 改为 runtime-edge adapter,明确不是 full native task/HAL promotion。
- 记录当前 readiness contract:
task_hal_runtime_promoted=0、nativeTaskReady=false、nativeHalSyncReady=false、fullLinuxCncProgramExecutionReady=false。 - 将 Known Gaps 中“task/motion/HAL sync 已完整覆盖 deterministic Web simulation”的旧表述改为 partial Web simulation adapter。
- 更新
tests/wasm/node/verify_task_hal_wasm.mjs,增加fullLinuxCncProgramExecutionReady=false断言,并输出task_hal_readiness_status_contract=ok。 - 新增
tools/verify_task_hal_readiness_contract.sh:- 调用
verify_task_hal_source_manifest.sh验证 manifest readiness 仍为未 promoted。 - 检查
source-reuse-map.md包含 false readiness contract。 - 检查文档中不再包含 native task/HAL readiness true 或 full boundary promoted claim。
- 检查 runtime 和 WASM test 均固定
fullLinuxCncProgramExecutionReady=false。
- 调用
- 更新任务矩阵:T-015 标为完成,下一推进指针改为 T-027。
改了哪些文件
wasm-port/docs/source-reuse-map.mdwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tools/verify_task_hal_readiness_contract.shwasm-port/working/02-项目程序开发详细步骤.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tools/verify_task_hal_readiness_contract.sh:通过,输出task_hal_readiness_contract_status=ok。./tests/wasm/node/verify_task_hal_wasm.sh:通过,新增输出task_hal_readiness_status_contract=ok。./tests/native/verify_task_hal_phase0.sh:通过,输出task_hal_phase0_native_probe_gate=ok。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_sdk.sh:通过。SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh:通过。git diff --check -- ...:通过。rg检查source-reuse-map.md和working文档中不再存在 native task/HAL readiness true 或 full boundary promoted 旧表述。
下一步
推进 T-027:新增 motion error/soft-limit 注入测试,让 subordinate sync 对 motion ERROR 和 soft-limit 的 task/top-level 状态影响有专门覆盖。
2026-07-07 23:59 EDT
本轮目标
继续完成对标工作,推进 T-014:引入 vendored/upstream emccanon.cc 的可编译 canonical linear motion 子集,让 linear motion command 生成继续减少 standalone 自有语义。
本轮做了什么
- 读取上游
/home/mes123456/cnc_wams/linuxcnc/src/emc/task/emccanon.cc中的 canonical motion 函数:generate_fast_move()generate_move()STRAIGHT_TRAVERSE()STRAIGHT_FEED()
- 确认完整
emccanon.cc依赖CanonConfig_t、offset/unit conversion、interp_list、state tags、NURBS、spindle/tool/coolant 等大量 canonical callback 边界,不适合在 T-014 直接完整编译。 - 新增
vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hh和emccanon_wasm_subset.cc:- 定义
LcEmcCanonSubsetPose和LcEmcCanonSubsetLinearMove。 - 实现
lc_emccanon_subset_straight_traverse()和lc_emccanon_subset_straight_feed()。 - 保留 source path 和 anchor list:
src/emc/task/emccanon.cc、generate_fast_move,generate_move,STRAIGHT_TRAVERSE,STRAIGHT_FEED。
- 定义
- 更新
tools/build_task_hal_wasm.sh,将emccanon_wasm_subset.cc纳入 task-HAL WASM 构建。 - 更新
linuxcnc_task_hal_wasm.cpp:- 新增 canonical pose/linear move helper。
- 将 program line move、timed motion sample、MDI linear move 改为先经 emccanon subset 生成 canonical linear move envelope,再交给 taskintf subset 生成 task-to-motion command envelope。
- 在 status JSON 中新增
emccanonSourceReuse,暴露 source path、anchors 和 issue count。
- 更新
verify_task_hal_wasm.mjs,断言emccanonSourceReuse字段来自src/emc/task/emccanon.cc,并新增输出emccanon_subset_source_reuse_status=ok。 - 新增
tools/verify_task_emccanon_subset.sh,验证上游 anchors、vendor subset、build script inclusion。 - 更新任务矩阵:T-014 标为完成,下一推进指针改为 T-015。
改了哪些文件
wasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/emccanon_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tools/build_task_hal_wasm.shwasm-port/tools/verify_task_emccanon_subset.shwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tools/verify_task_emccanon_subset.sh:通过,输出task_emccanon_subset_source_reuse=ok。./tests/wasm/node/verify_task_hal_wasm.sh:通过,新增emccanon_subset_source_reuse_status=ok。
下一步
推进 T-015:修正 readiness 文档和实现口径,确保 nativeTaskReady、nativeHalSyncReady、fullLinuxCncProgramExecutionReady 与当前能力边界一致。
2026-07-07 23:51 EDT
本轮目标
继续完成对标工作,推进 T-013:引入 vendored/upstream taskintf.cc 的可编译 motion command issuing 子集,让 task-to-motion command 边界更接近上游。
本轮做了什么
- 读取上游
/home/mes123456/cnc_wams/linuxcnc/src/emc/task/taskintf.cc中的 motion bridge 函数:emcTrajAbort/Pause/Step/Resume()emcTrajLinearMove()emcJogIncr()emcJointHome()emcMotionSetAout()
- 确认完整
taskintf.cc直接依赖usrmot、NML、INI config 和 native motion process edge,不适合在 T-013 直接完整编译。 - 新增
vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hh和taskintf_wasm_subset.cc:- 定义
LcTaskIntfSubsetMotionCommand作为 task-to-motion command envelope。 - 实现 traj control、linear move、jog incr、joint home、set aout 的最小 command envelope 生成函数。
- 保留 source path 和 anchor list:
src/emc/task/taskintf.cc及对应函数族。
- 定义
- 更新
tools/build_task_hal_wasm.sh,将taskintf_wasm_subset.cc纳入 task-HAL WASM 构建。 - 更新
linuxcnc_task_hal_wasm.cpp:- 新增
taskintf_motion_json(),把LcTaskIntfSubsetMotionCommand序列化为现有lcmot_*可接受的 motion JSON。 - 新增
queue_taskintf_motion_command()/forward_taskintf_motion_command()。 - 将 pause/resume/step/abort、MDI switchkins、MDI linear move、JOG、HOME、program linear move 和 timed motion sample 的 issue 边界改为经 taskintf subset 生成 command envelope。
- 在 status JSON 中新增
taskintfSourceReuse,暴露 source path、anchors 和 issue count。
- 新增
- 修正 JOG axis index 到轴字母的映射,避免 A/B/C 被错误映射为 ASCII 连续字符。
- 更新
verify_task_hal_wasm.mjs,断言taskintfSourceReuse字段来自src/emc/task/taskintf.cc,并新增输出taskintf_subset_source_reuse_status=ok。 - 新增
tools/verify_task_taskintf_subset.sh,验证上游 anchors、vendor subset、build script inclusion。 - 更新任务矩阵:T-013 标为完成,下一推进指针改为 T-014。
改了哪些文件
wasm-port/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/taskintf_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tools/build_task_hal_wasm.shwasm-port/tools/verify_task_taskintf_subset.shwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tools/verify_task_taskintf_subset.sh:通过,输出task_taskintf_subset_source_reuse=ok。./tests/wasm/node/verify_task_hal_wasm.sh:通过,新增taskintf_subset_source_reuse_status=ok。
下一步
推进 T-014:引入 vendored/upstream emccanon.cc 可编译子集,让 canonical motion command 生成继续向 LinuxCNC 源码锚点收敛。
2026-07-07 23:42 EDT
本轮目标
继续完成对标工作,推进 T-012:引入 vendored/upstream emctask.cc 的可编译子集,并新增 source reuse 验证。
本轮做了什么
- 复核 T-012 要求,确认当前
wasm-port/vendor/linuxcnc/src/emc/task尚不存在完整 task 源码,verify_task_hal_source_manifest.sh仍显示 task 源码 vendor-ready 为 false。 - 读取上游
/home/mes123456/cnc_wams/linuxcnc/src/emc/task/emctask.cc中determineMode()、determineState()、emcTaskUpdate()锚点,确认这组状态推导逻辑可以先做窄子集,不拉入 interpreter、NML、dlopen、IO/native process 边界。 - 新增
wasm-port/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.hh和emctask_wasm_subset.cc:- 暴露
LcEmcTaskSubsetUpdateInput/LcEmcTaskSubsetUpdateResult。 - 实现上游
determineMode()、determineState()、emcTaskUpdate()的最小状态推导子集。 - 保留 source path 和 anchor list:
src/emc/task/emctask.cc、determineMode,determineState,emcTaskUpdate。
- 暴露
- 更新
tools/build_task_hal_wasm.sh:- 增加
vendor/linuxcnc/srcinclude。 - 将
vendor/linuxcnc/src/emc/task/emctask_wasm_subset.cc纳入 task-HAL WASM 构建。
- 增加
- 更新
linuxcnc_task_hal_wasm.cpp:- 在
wasm_emcTaskUpdate()阶段调用lc_emctask_subset_update()。 - 在 status JSON 中新增
emctaskSourceReuse,暴露emctaskSubsetCompiled、source path、anchors、derived mode/state、motion line 等证据。
- 在
- 更新
verify_task_hal_wasm.mjs,断言emctaskSourceReuse字段来自src/emc/task/emctask.cc锚点,并新增输出emctask_subset_source_reuse_status=ok。 - 新增
tools/verify_task_emctask_subset.sh:- 验证上游
emctask.cc存在。 - 验证上游 anchor 存在。
- 验证 vendor subset 文件存在并记录同一 source path/anchors。
- 验证 build script 已纳入
emctask_wasm_subset.cc。
- 验证上游
- 更新任务矩阵:T-012 标为完成,下一推进指针改为 T-013。
改了哪些文件
wasm-port/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.hhwasm-port/vendor/linuxcnc/src/emc/task/emctask_wasm_subset.ccwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tools/build_task_hal_wasm.shwasm-port/tools/verify_task_emctask_subset.shwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tools/verify_task_emctask_subset.sh:通过,输出task_emctask_subset_source_reuse=ok。./tests/wasm/node/verify_task_hal_wasm.sh:通过,新增emctask_subset_source_reuse_status=ok。node tests/wasm/node/verify_task_state_matrix.mjs:通过。
下一步
推进 T-013:引入 vendored/upstream taskintf.cc 可编译子集,优先把 motion command issuing 的边界从 JSON 拼接继续迁向 LinuxCNC 式 task-to-motion bridge。
2026-07-07 23:34 EDT
本轮目标
继续完成对标工作,推进 T-011:收缩 JSON command 自有状态机,使 lctask_send_command_json() 只作为 C ABI host 边界,task 语义继续转入 LinuxCNC 式 plan/execute 周期层。
本轮做了什么
- 复核当前
linuxcnc_task_hal_wasm.cpp,确认wasm_emcTaskPlan()仍通过重新调用lctask_send_command_json()消费 pending command。 - 新增内部
TaskCommandType和TaskCommand,把TaskRuntime.pending_commands从std::vector<std::string>改为std::vector<TaskCommand>。 - 新增
parse_task_command():在 C ABI host 边界把 JSON command envelope 解析为内部 command 类型;未知 command 直接返回-1,不进入队列。 - 新增
apply_task_command():把原先lctask_send_command_json()中的 state/mode/run/pause/resume/step/abort/MDI/JOG/HOME/IO shim 语义迁入 task plan 阶段。 - 修改
wasm_emcTaskPlan():直接遍历内部TaskCommand并调用apply_task_command(),不再回调lctask_send_command_json()。 - 简化
lctask_send_command_json():只负责解析 host JSON、入队TaskCommand、记录task_command_queued、写 status buffer。 - 保持已有语义兼容:run gate/home gate 等被拒绝时写
errorText,但 task cycle 本身不失败。 - 更新
verify_task_state_matrix.mjs:新增未知 host command 被拒绝且不增加 pending queue 的断言,输出task_command_json_host_boundary=ok。 - 更新任务矩阵:T-011 标为完成,下一推进指针改为 T-012。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_state_matrix.mjswasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过。node tests/wasm/node/verify_task_state_matrix.mjs:通过,新增task_command_json_host_boundary=ok。./tests/native/verify_task_hal_phase0.sh:通过,确认 phase0 gate 不回退。
下一步
推进 T-012:引入 vendored/upstream emctask.cc 可编译子集,先做可编译边界和 source reuse 验证,再继续替换 standalone task 语义。
2026-07-07 23:10 EDT
本轮目标
先解决 verify_task_hal_phase0.sh 因缺失 xyzac-trt_cmds.hal 失败的问题,再继续推进对标工作中的 T-010:把 pause/resume/step 的 motion issue 放到 execute 阶段,并用周期 snapshot 断言其行为。
本轮做了什么
- 复核
verify_task_hal_phase0.sh调用链,确认失败来自probe_trt_task_hal_runtime.sh检查 TRT 机器目录时找不到xyzac-trt_cmds.hal。 - 确认
../linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/是只读上游输入,不直接补文件。 - 在
probe_trt_task_hal_runtime.sh中新增RUN_DIR/machineoverlay:- 优先把上游
../linuxcnc机器目录的条目 symlink 到 overlay。 - 对上游缺失的顶层条目,从
wasm-port/vendor/linuxcnc/.../table-rotary-tilting/补 symlink。 - 输出
trt_task_hal_vendor_overlay_*证据,标明哪些文件来自 vendor fallback。
- 优先把上游
- 运行 native probe 和 phase0 gate,确认
xyzac-trt_cmds.hal缺失问题闭合,./tests/native/verify_task_hal_phase0.sh通过。 - 继续推进 T-010,把
EMC_TASK_PLAN_PAUSE、EMC_TASK_PLAN_STEP、EMC_TASK_PLAN_RESUME从直接forward_motion_command()改为queue_execute_motion_command()。 - 更新
verify_task_hal_wasm.mjs:- pause/resume/step 发送后,先断言
pendingCommandDepth增加且 motion snapshot 尚未变化。 - task cycle 执行后,再断言 motion paused、resume、step 等状态变化。
- 新增输出
pause_resume_step_motion_issue_from_execute=ok。
- pause/resume/step 发送后,先断言
- 更新任务矩阵:T-016、T-010 标为完成,下一推进指针改为 T-011。
改了哪些文件
wasm-port/tests/native/probe_trt_task_hal_runtime.shwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/native/probe_trt_task_hal_runtime.sh:通过,输出trt_task_hal_source_proof_ready=1和trt_task_hal_probe_result=ready_disabled_by_default。./tests/native/verify_task_hal_phase0.sh:通过,输出task_hal_phase0_native_probe_gate=ok。./tests/wasm/node/verify_task_hal_wasm.sh:通过,包含新增pause_resume_step_motion_issue_from_execute=ok。node tests/wasm/node/verify_task_state_matrix.mjs:通过。./tests/wasm/node/verify_task_hal_sdk.sh:通过。./tests/wasm/node/verify_motion_hal_sync.sh:通过。./tools/verify_task_hal_source_manifest.sh:通过;readiness 仍保持保守 false。
下一步
推进 T-011:继续收缩 JSON command 自有状态机,把 host JSON 进一步限制为 C ABI 边界,task 语义继续向 LinuxCNC 式 plan/execute 层迁移。
2026-07-07 21:32 EDT
本轮目标
继续完成对标工作,推进 T-008:把 WAITING_FOR_MOTION、WAITING_FOR_MOTION_QUEUE 和 queueFull 语义迁移为依赖周期 motion snapshot。
本轮做了什么
- 在
wasm_emcTaskExecute()中读取上一周期state.motion_snapshot.queue_full。 - 当 motion queue full 且存在待发 execute motion command 时,不再继续 forward motion,而是保留
pending_execute_motion_commands并将exec_state置为WAITING_FOR_MOTION_QUEUE。 - 当 AUTO/program work 仍需 issue motion 但上一周期 motion queue full 时,将
exec_state置为WAITING_FOR_MOTION_QUEUE并等待下一周期。 - 在
sync_subordinate_states()中使用本周期motion_snapshot完成状态收敛:WAITING_FOR_MOTION_QUEUE且 queue 不再 full 时切回WAITING_FOR_MOTION。WAITING_FOR_MOTION且 motion queue/active depth 清空、in-position 为 true 时切到DONE。- MDI motion 完成后同步把 interpreter 状态收敛到
IDLE。
- 更新
verify_task_hal_wasm.mjs:- 断言 MDI/JOG motion 完成后
execState从WAITING_FOR_MOTION收敛到DONE。 - 构造 paused motion queue 填满 64 条命令的场景,证明 task 进入
WAITING_FOR_MOTION_QUEUE。 - resume 后证明 queueFull 解除时 task 回到
WAITING_FOR_MOTION,最终 motion drain 后进入DONE。 - 新增输出
task_waits_on_motion_snapshot_queue=ok。
- 断言 MDI/JOG motion 完成后
- 更新任务矩阵:T-008 标为完成。
- 继续推进 T-009:在
TaskRuntime中新增task_abort_requested,区分 task 自己发起的 abort cleanup 与外部 motion abort/error。 - 在
sync_subordinate_states()中处理外部 motion abort:如果 motion snapshot 显示 aborted 且不是 task 发起的 abort,则将exec_state置为ERROR,error_text置为MOTION_ABORTED。 - 为 standalone IO runtime edge 增加窄测试 shim:支持
EMC_IO_INJECT_ERRORcommand,进入周期后由 subordinate sync 将 task 置为ERROR,error_text置为IO_ERROR。 - 更新
verify_task_hal_wasm.mjs,新增motion_abort_drives_task_error=ok和io_error_drives_task_error=ok。 - 更新任务矩阵:T-009 标为完成,下一推进指针改为 T-010。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过,新增task_waits_on_motion_snapshot_queue=ok。./tests/wasm/node/verify_task_hal_wasm.sh继续新增motion_abort_drives_task_error=ok、io_error_drives_task_error=ok。node tests/wasm/node/verify_task_state_matrix.mjs:通过。./tests/wasm/node/verify_task_hal_sdk.sh:通过。./tests/wasm/node/verify_motion_hal_sync.sh:通过。./tools/verify_task_hal_source_manifest.sh:通过;readiness 仍保持保守 false。git diff --check -- ...:无输出,通过。
下一步
推进 T-010:迁移 pause/resume/step 到 snapshot 驱动,并保持现有 pause/step/resume smoke 不回退。
2026-07-07 21:21 EDT
本轮目标
继续完成对标工作,从当前推进指针 T-023 开始,把 lctask_run_cycles() 拆成 LinuxCNC emctaskmain.cc 式周期阶段,并让 state/mode/home/run gate 在 task cycle 的 plan 阶段触发。
本轮做了什么
- 复核
04-任务矩阵.md,确认 T-023 为当前推进指针,T-025 仍要求后续把 MDI/JOG/HOME motion issue 拆到 execute 阶段。 - 在
linuxcnc_task_hal_wasm.cpp中新增周期阶段函数:task_cycle_begin()task_read_commands()wasm_emcTaskPlan()wasm_emcTaskExecute()sync_subordinate_states()wasm_emcTaskUpdate()update_top_level_status()- 复用既有
wasm_emcMotionUpdate()和write_status_snapshot()
- 重排
lctask_run_cycles(),使每个周期按 cycle begin、command read、plan、execute、standalone servo step、motion update、subordinate sync、task update、top-level status、status write 的顺序执行。 - 保留当前 command handler 作为 Phase 4 adapter,由
wasm_emcTaskPlan()在 task cycle 内通过 processing 标志调用;这样 state/mode/home/run gate 已由 cycle 触发,而不是 send API 直接触发。 - 明确 T-025 尚未完成:MDI/JOG/HOME motion issue 仍在 plan command handler 中 forward motion,后续需要拆到 execute 阶段。
- 更新任务矩阵:T-006、T-023、T-024 标为完成。
- 继续推进 T-025:在
TaskRuntime中新增pending_execute_motion_commands。 - 将 MDI switchkins、普通 MDI linear move、JOG、HOME 的 motion command 改为排入 execute motion queue。
- 在
wasm_emcTaskExecute()开头统一 flushpending_execute_motion_commands,并记录task_execute_motion_issue:<count>事件。 - 在 task status 中新增
pendingExecuteMotionDepth,用于证明 plan 阶段只是排队,execute 阶段负责 issue motion。 - 更新
verify_task_hal_wasm.mjs,断言 MDI/JOG send 后 motion 不立即变化,run cycle 后 execute issue 生效,并新增mdi_jog_home_motion_issue_from_execute=ok。 - 更新任务矩阵:T-025 标为完成,下一推进指针改为 T-008。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tests/wasm/node/verify_task_hal_wasm.sh:通过。./tests/wasm/node/verify_task_hal_wasm.sh新增输出mdi_jog_home_motion_issue_from_execute=ok。node tests/wasm/node/verify_task_state_matrix.mjs:通过,继续覆盖 command send 入队、run cycle 后才改变状态。./tests/wasm/node/verify_task_hal_sdk.sh:通过。./tests/wasm/node/verify_motion_hal_sync.sh:通过。
下一步
推进 T-008:把 WAITING_FOR_MOTION、WAITING_FOR_MOTION_QUEUE 和 queueFull 语义迁移为依赖周期 motion snapshot。随后继续 T-027/T-028 的 subordinate error sync 和 top-level RCS_STATUS 聚合。
2026-07-07 21:01 EDT
本轮目标
执行 T-002 基线固定,并完成 task 周期内结构化 motion snapshot、wasm_emcMotionUpdate()、task status buffer 和对应验证,避免 lctask_read_status_json() 继续把 motion JSON 当作 task 事实源。
本轮做了什么
- 运行 T-002 要求的四个基线命令:
./tools/verify_task_hal_source_manifest.sh./tests/wasm/node/verify_motion_hal_sync.sh./tests/wasm/node/verify_task_hal_wasm.sh./tests/wasm/node/verify_task_hal_sdk.sh
- 额外运行
./tests/native/verify_task_hal_phase0.sh,确认 native probe 仍因缺失xyzac-trt_cmds.hal保持阻塞。 - 在
linuxcnc_motion_runtime.h定义LcmotStatusSnapshot和 queue/axis 常量,字段覆盖 cycle、program line、motion id、status、in-position、paused、stepping、aborted、queue、axis/joint、velocity、switchkins/analog output。 - 在
linuxcnc_motion_runtime.c实现lcmot_read_status_snapshot(),该函数只复制 motion runtime 状态,不 step servo、不消费队列;lcmot_read_status_json()改为从同一 snapshot 派生。 - 在
linuxcnc_task_hal_wasm.cpp增加 task 持有的motion_snapshot、motion_snapshot_valid和status_buffer。 - 实现
wasm_emcMotionUpdate(),由 task 周期读取LcmotStatusSnapshot并写入 task runtime。 - 将
lctask_read_status_json()改为导出最后一次write_status_snapshot()写出的 status buffer;读取 status 不再调用 motion runtime 同步最新 motion。 - 在
lctask_run_cycles()每个 task cycle 的 servo step 后执行wasm_emcMotionUpdate()和write_status_snapshot(),形成 WASM standalone 边界下的周期 snapshot。 - 更新
build_task_hal_wasm.sh,导出_lcmot_read_status_snapshot。 - 更新
verify_motion_hal_sync.mjs,直接调用_lcmot_read_status_snapshot并断言结构字段。 - 更新
verify_task_hal_wasm.mjs,新增测试:low-levellcmot_step_servo()后 task status 不自动同步,直到下一次lctask_run_cycles()。 - 更新任务矩阵,把 T-002、T-003、T-004、T-005、T-018、T-019、T-020、T-021、T-026 标为完成。
- 继续推进 T-022:在
TaskRuntime中新增pending_commands,把lctask_send_command_json()改为默认只验证并入队;lctask_run_cycles()在每个 task cycle 开始消费 command queue。 - 在 task status 中新增
pendingCommandDepth,用于证明 command send 后状态不立即变化。 - 更新
verify_task_state_matrix.mjs,新增task_command_send_queues_until_cycle=ok,并把 run gate 测试改为 send 后 run cycle 再读取拒绝结果。 - 将任务矩阵 T-022 标为完成,并把下一推进指针移到 T-023。
改了哪些文件
wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.hwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.cwasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cppwasm-port/tools/build_task_hal_wasm.shwasm-port/tests/wasm/node/verify_motion_hal_sync.mjswasm-port/tests/wasm/node/verify_task_hal_wasm.mjswasm-port/tests/wasm/node/verify_task_state_matrix.mjswasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
./tools/verify_task_hal_source_manifest.sh:通过;仍显示task_hal_runtime_promoted=0、nativeTaskReady=false、nativeHalSyncReady=false。./tests/wasm/node/verify_motion_hal_sync.sh:通过;新增motion_status_snapshot_struct=ok。./tests/wasm/node/verify_task_hal_wasm.sh:通过;新增task_status_updates_from_cycle_snapshot=ok。./tests/wasm/node/verify_task_hal_sdk.sh:通过。node tests/wasm/node/verify_task_state_matrix.mjs:通过;新增task_command_send_queues_until_cycle=ok。./tests/native/verify_task_hal_phase0.sh:仍失败,原因保持为缺失xyzac-trt_cmds.hal,属于既有 T-016 阻塞。
下一步
推进 T-023/T-024/T-025:把当前 command queue 消费逻辑继续拆成明确的 command read、plan、execute 阶段,并将 state/mode/home/run/MDI/JOG/HOME 语义逐步迁入对应阶段。
2026-07-07 19:45 EDT
本轮目标
继续分解 emctask.cc、taskintf.cc、emccanon.cc 的具体实施步骤,保证后续不是只搭 lctask_run_cycles() 骨架,而是逐步用上游 task 源码替换当前 JSON 自有状态机。
本轮做了什么
- 使用
rg提取linuxcnc/src/emc/task/emctask.cc、taskintf.cc、emccanon.cc中的函数列表。 - 阅读
emctask.cc中emcTaskAbort()、emcTaskSetMode()、emcTaskSetState()、determineMode()、determineState()、emcTaskPlan*()、emcTaskUpdate(),确认其负责 task 状态、interpreter plan wrapper 和 status update。 - 阅读
taskintf.cc中emcTrajSetMotionId()、emcTrajEnable/Disable/Abort/Pause/Step/Resume()、emcTrajLinearMove()、emcTrajCircularMove()、emcMotionInit()、emcMotionAbort()、emcMotionUpdate(),确认其负责 task 到 motion 的 command/status 边界。 - 阅读
emccanon.cc中FINISH()、ON_RESET()、generate_fast_move()、generate_move()、STRAIGHT_TRAVERSE()、STRAIGHT_FEED()、DWELL()、spindle/tool canonical functions,确认其负责 canon API 到interp_list的 command 生成。 - 新增
08-上游task源码替换分解.md,按emctask.cc、taskintf.cc、emccanon.cc分别拆出优先函数、WASM 实施、依赖 shim、验收要求、迁移批次和禁止路线。 - 更新 README,将 08 文档加入索引和使用规则。
- 更新
02-项目程序开发详细步骤.md,把阶段 5 的替换顺序细化为 taskintf bridge、emctask state/update、emctask plan wrapper、emccanon straight motion、emctask execute、emccanon spindle/tool/io。 - 更新
04-任务矩阵.md,新增 T-031 到 T-046,覆盖三份上游 task 源码的函数族迁移任务。 - 更新
05-验收证据.md,新增本轮文档细化证据。 - 更新
06-决策记录.md,新增 D-007,明确先迁taskintf.ccminimal bridge,再迁emctask.cc和emccanon.cc。
改了哪些文件
wasm-port/working/README.mdwasm-port/working/02-项目程序开发详细步骤.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.mdwasm-port/working/08-上游task源码替换分解.md
验证了什么
本轮是文档分解轮,未修改 runtime 源码。验证重点:
find wasm-port/working -maxdepth 1 -type f | sortrg -n "T-031|D-007|emctask.cc|taskintf.cc|emccanon.cc|B1|B6" wasm-port/workinggit diff --check -- wasm-port/working
下一步
先执行 T-002 固定最新基线证据;代码实施时按 T-018/T-019/T-020/T-021/T-022/T-023 建立周期基础,然后进入 T-031/T-034 的 taskintf.cc minimal bridge。
2026-07-07 19:29 EDT
本轮目标
继续完善 wasm-port/working 实施文档,使其完全围绕“把 emctaskmain.cc 周期结构迁到 wasm-port”展开,并达到后续可以按任务矩阵实施的粒度。
本轮做了什么
- 复核现有 01、02、04、06 文档,确认已有方向但缺少上游代码锚点、字段映射和可验收子任务。
- 重新对照上游:
linuxcnc/src/emc/task/emctaskmain.cc主循环3296-3484。emcTaskExecute()motion/io wait 分支2551-2700。emctask_startup()motion 初始化与首次emcMotionUpdate()2992-3054。linuxcnc/src/emc/nml_intf/emc_nml.hh中EMC_TRAJ_STAT、EMC_MOTION_STAT、EMC_TASK_STAT、EMC_STAT字段定义。
- 新增
07-emctaskmain周期对标蓝图.md,写入上游周期锚点、WASM 周期骨架、EMC_STAT字段映射、command read/plan/execute/motion update/subordinate sync/status write 对标要求和源码替换路线。 - 更新 README,将 07 蓝图加入索引,并要求涉及 task 主循环实现时同步查看该蓝图。
- 更新
01-项目功能内容.md,补充emc_nml.hh为状态字段对标源,增加最小字段闭环和 status/command 行为完成定义。 - 更新
02-项目程序开发详细步骤.md,把 motion snapshot、周期函数拆分、EMC_STAT容器、JSON command 收缩等步骤细化。 - 更新
04-任务矩阵.md,新增 T-017 到 T-030,把设计、实现、测试、status buffer、command buffer、plan/execute/subordinate sync、上游源码替换等工作拆成可验收任务。 - 更新
05-验收证据.md,记录本轮文档完善的验证命令、预期输出和 T-017 通过结论。 - 更新
06-决策记录.md,新增 D-005 和 D-006,固定 status read 不同步 motion、command send 不直接改变 task 语义。
改了哪些文件
wasm-port/working/README.mdwasm-port/working/01-项目功能内容.mdwasm-port/working/02-项目程序开发详细步骤.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.mdwasm-port/working/07-emctaskmain周期对标蓝图.md
验证了什么
本轮仍是文档完善轮,未修改 runtime 源码。验证重点:
find wasm-port/working -maxdepth 1 -type f | sortrg -n "T-017|D-005|emctaskmain 周期对标蓝图|LcmotStatusSnapshot|command read" wasm-port/workinggit status --short wasm-port/working
下一步
执行 T-002 固定最新 task/motion/HAL 基线证据,然后进入 T-003/T-018/T-019:设计并实现结构化 LcmotStatusSnapshot,为 task 周期内 wasm_emcMotionUpdate() 做准备。
2026-07-07 19:17 EDT
本轮目标
创建 wasm-port/working 推进文档,支撑后续按任务矩阵推进 LinuxCNC emctaskmain.cc task 主循环完全对标。
本轮做了什么
- 确认
wasm-port/working目录已存在且暂无推进文档。 - 创建 README 索引和 01-06 号文档。
- 将当前差距固化为文档基线:
- 上游
emctaskmain.cc每周期调用emcMotionUpdate(&emcStatus->motion)。 - 当前
wasm-portlctask_run_cycles()只推进 minimalTaskRuntime和lcmot_step_servo()。 - 当前 motion 状态主要在 status API 拼接输出,不是 task 周期控制输入。
- 上游
- 制定阶段化开发路线:
- 建立 task 周期内 motion snapshot。
- 重排
lctask_run_cycles()为 LinuxCNC 式周期顺序。 - 建立
EMC_STAT等价状态容器。 - 迁移 wait/execute 语义。
- 逐步替换自有状态机。
- 收口 readiness 和文档。
改了哪些文件
wasm-port/working/README.mdwasm-port/working/01-项目功能内容.mdwasm-port/working/02-项目程序开发详细步骤.mdwasm-port/working/03-推进台账.mdwasm-port/working/04-任务矩阵.mdwasm-port/working/05-验收证据.mdwasm-port/working/06-决策记录.md
验证了什么
本轮是文档创建轮,未修改 runtime 源码,验证方式为:
find wasm-port/working -maxdepth 1 -type f | sort- 抽查新建文档内容。
git status --short wasm-port/working
下一步
从 T-002 开始,新增 task 周期内 motion snapshot 设计和测试,先证明每个 lctask_run_cycles() 周期读取 motion,而不是只在 lctask_read_status_json() 时拼接 motion。