# 05-验收证据 ## 2026-07-08 10:18 EDT T-056 旧 status 字段源头收口 ### 验收对象 `lctask_read_status_json()` 输出契约和直接消费 task status JSON 的 WASM/SDK/state matrix 测试。 ### 证据命令 ```bash source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && bash wasm-port/tools/build_task_hal_wasm.sh node wasm-port/tests/wasm/node/verify_task_status_json_contract.mjs node wasm-port/tests/wasm/node/verify_task_hal_sdk.mjs node wasm-port/tests/wasm/node/verify_task_state_matrix.mjs node wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs ``` ### 实际输出摘要 ```text linuxcnc_task_hal_wasm_build=ok task_status_json_contract=ok linuxcnc_task_hal_sdk=ok task_hal_sdk_status_json_contract=ok task_state_matrix=ok task_status_json_contract_matrix=ok linuxcnc_task_runtime_smoke=ok task_status_json_contract=ok ``` ### 结论 T-056 验收通过。task status JSON 不再输出 `taskTopLevelStatus`、`rcsStatus`、顶层 `task`、`servoCycle`、顶层 `motionStatus`;测试读取路径均从 `emcStatus` 取值,并对旧字段做负向断言。 ## 2026-07-08 09:30 EDT 目标文件 11/12 全部工作复核 ### 验收对象 - `11-WASM核心状态机边界与后续完善路线.md` - `12-status-json-LinuxCNC对标方案.md` - T-051 到 T-055 / SJ-1 到 SJ-5 当前闭合状态。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_full_closure.sh cd /home/mes123456/cnc_wams git diff --check ``` ### 实际输出摘要 `./tools/verify_task_full_closure.sh`: ```text linuxcnc_task_hal_wasm_build=ok task_status_json_contract=ok linuxcnc_task_hal_sdk=ok task_state_matrix=ok motion_hal_sync_smoke=ok task_standalone_emc_status_status=ok task_no_json_motion_plan_main_path_status=ok task_status_json_contract_status=ok task_working_closure_status=ok task_source_reuse_drift_docs_status=ok task_hal_readiness_contract_status=ok task_full_closure_status=ok ``` `git diff --check`:无输出,以 0 退出。 ### 结论 目标文件 `11` 和 `12` 当前定义的全部可执行工作已闭合。后续新增状态或 LinuxCNC 对标字段仍需先补入任务矩阵、验收标准和 gate。 ## 2026-07-08 09:26 EDT working 全部工作闭合复核 ### 验收对象 `/home/mes123456/cnc_wams/wasm-port/working` 当前全部任务闭合状态。 ### 验收目标 - `04-任务矩阵.md` 中 T-001 到 T-055 均为完成。 - 当前推进指针为“下一条优先任务:无”。 - T-051 到 T-055 的 status JSON contract gate 已纳入 full closure。 - 全量闭合验证通过。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_full_closure.sh ``` ### 实际输出摘要 ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok linuxcnc_task_hal_sdk=ok task_state_matrix=ok motion_hal_sync_smoke=ok task_standalone_emc_status_status=ok task_no_json_motion_plan_main_path_status=ok task_status_json_contract_status=ok task_working_closure_status=ok task_source_reuse_drift_docs_status=ok task_hal_readiness_contract_status=ok task_full_closure_status=ok ``` ### 结论 `wasm-port/working` 全部工作闭合复核通过。后续新增对标项仍需先补入任务矩阵、验收标准和 gate,再实施代码或文档变更。 ## 2026-07-08 09:12 EDT SJ-1 到 SJ-5 status JSON contract 验收 ### 验收对象 T-051、T-052、T-053、T-054、T-055。 ### 验收目标 - `emcStatus.motion.traj` 导出 LinuxCNC `EMC_TRAJ_STAT` 风格字段,并与兼容 `motionStatus` 同源。 - `emcStatus.task.currentLine/readLine/motionLine/callLevel` 从 `StandaloneEmcStatus` 导出,并与 `task` 兼容视图同源。 - `emcStatus.motion.axis[]` 和 `joint[]` 导出结构化数组,旧 `motionStatus.axis`、`joint0` 与其一致。 - `emcStatus.io.aux/tool/coolant` 显式表达 shim/unsupported 边界,readiness 不提升。 - `tools/verify_task_status_json_contract.sh` 纳入 full closure。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && ./tools/build_task_hal_wasm.sh SKIP_TASK_HAL_BUILD=1 ./tools/verify_task_status_json_contract.sh SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_sdk.sh node tests/wasm/node/verify_task_state_matrix.mjs ./tools/verify_task_full_closure.sh ``` ### 实际输出摘要 构建: ```text linuxcnc_task_hal_wasm_build=ok ``` 新增 contract gate: ```text task_status_json_contract_runtime=ok task_status_json_contract_schema=ok task_status_json_contract=ok task_status_json_contract_status_read_no_motion_json=ok task_status_json_contract_sdk_no_motion_semantics=absent task_status_json_contract_sdk_no_task_semantics=absent task_status_json_contract_status=ok ``` 回归 smoke: ```text task_status_json_contract=ok task_hal_sdk_status_json_contract=ok task_status_json_contract_matrix=ok ``` 全量闭合: ```text task_status_json_contract_status=ok task_working_closure_status=ok task_source_reuse_drift_docs_status=ok task_hal_readiness_contract_status=ok task_full_closure_status=ok ``` ### 结论 T-051 到 T-055 验收通过。`status JSON` 新增字段均从 `StandaloneEmcStatus` 或同一 C/C++ status buffer 导出,JSON 仍是 host/browser 通信格式,不是 task/motion 事实源。 ## 2026-07-08 09:00 EDT working 全部工作最终复核 ### 验收对象 `/home/mes123456/cnc_wams/wasm-port/working` 当前全部任务闭合状态。 ### 验收目标 - `04-任务矩阵.md` 无 `待办`、`进行中` 或 `阻塞` 任务行。 - README、台账、验收证据、决策记录与 T-007/T-046/T-047/T-048/T-049/T-050 当前闭合口径一致。 - task-HAL 全量闭合 gate 通过。 - 当前相关差异无 whitespace error。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_full_closure.sh git diff --check -- working tools docs runtime tests ``` ### 实际输出摘要 `./tools/verify_task_full_closure.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok linuxcnc_task_hal_sdk=ok task_state_matrix=ok motion_hal_sync_smoke=ok task_standalone_emc_status_status=ok task_no_json_motion_plan_main_path_status=ok task_working_closure_status=ok task_source_reuse_drift_docs_status=ok task_hal_readiness_contract_status=ok task_full_closure_status=ok ``` `git diff --check -- working tools docs runtime tests`:无输出,以 0 退出。 ### 结论 `wasm-port/working` 全部工作最终复核通过。当前矩阵闭合、全量 gate 通过,后续新增对标范围需先在任务矩阵新增任务编号、验收标准和 gate。 ## 2026-07-08 08:55 EDT status JSON LinuxCNC 对标方案验收 ### 验收对象 T-050。 ### 验收目标 - `12-status-json-LinuxCNC对标方案.md` 存在。 - 方案明确 LinuxCNC `EMC_STAT` / status buffer 与 WASM `StandaloneEmcStatus -> status JSON` 的关系。 - README、功能内容、开发步骤、周期蓝图、核心状态机路线、任务矩阵、台账和决策记录均接入该方案。 - 既有 working closure gate 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_working_closure.sh test -f working/12-status-json-LinuxCNC对标方案.md git diff --check -- working ``` ### 实际输出摘要 `./tools/verify_task_working_closure.sh`: ```text task_working_closure_status=ok ``` `test -f working/12-status-json-LinuxCNC对标方案.md`:以 0 退出。 `git diff --check -- working`:无输出,以 0 退出。 ### 结论 T-050 验收通过。status JSON 后续完善方案已固定:WASM/C++ status 容器是事实源,`emcStatus` 是新增 LinuxCNC 对标字段的 JSON 主对象,旧兼容字段只从同一 status buffer 导出。 ## 2026-07-08 08:18 EDT WASM核心状态机边界文档验收 ### 验收对象 本轮文档完善。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_working_closure.sh git diff --check -- working ``` ### 实际输出摘要 `./tools/verify_task_working_closure.sh`: ```text task_working_closure_status=ok ``` `git diff --check -- working`:无输出,以 0 退出。 ### 结论 文档已固定 WASM/C++、JS/SDK、JSON 的职责边界。后续实现时,核心状态机应继续进入 WASM/C++ 结构体、枚举、队列和周期函数;JSON 只作为外部通信格式。 ## 2026-07-08 08:08 EDT task-HAL 全量闭合验证入口验收 ### 验收对象 T-049。 本轮验收目标是证明: - `tools/verify_task_full_closure.sh` 存在且可执行。 - 该脚本能一次性运行 task-HAL build、WASM smoke、SDK smoke、state matrix、motion sync、T-007/T-046/T-047/T-048/docs/readiness gates。 - source reuse / compatibility 文档记录该 full closure gate。 - `verify_task_source_reuse_drift_docs.sh` 检查该 full closure gate 和 T-049 矩阵状态。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_full_closure.sh git diff --check ``` ### 实际输出摘要 `./tools/verify_task_source_reuse_drift_docs.sh`: ```text task_source_reuse_drift_docs_source_full_closure_gate=ok task_source_reuse_drift_docs_compat_full_closure_gate=ok task_source_reuse_drift_docs_compat_full_closure=ok task_source_reuse_drift_docs_matrix_t049_done=ok task_source_reuse_drift_docs_status=ok ``` `./tools/verify_task_full_closure.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok linuxcnc_task_hal_sdk=ok task_state_matrix=ok motion_hal_sync_smoke=ok task_standalone_emc_status_status=ok task_no_json_motion_plan_main_path_status=ok task_working_closure_status=ok task_source_reuse_drift_docs_status=ok task_hal_readiness_contract_status=ok task_full_closure_status=ok ``` ### 结论 T-049 验收通过。task-HAL 对标工作已有统一全量闭合验证入口;后续可用 `./tools/verify_task_full_closure.sh` 一次性验证当前闭合状态。本轮不改变 runtime 行为。 ## 2026-07-08 05:51 EDT working closure 全局文档 gate 验收 ### 验收对象 T-048。 本轮验收目标是证明: - `verify_task_working_closure.sh` 已记录到 source reuse map。 - `verify_task_working_closure.sh` 已记录到 compatibility validation。 - `verify_task_source_reuse_drift_docs.sh` 会检查 working closure gate。 - 任务矩阵记录 T-048 已完成。 - T-047 working closure 和 T-007 StandaloneEmcStatus gate 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_working_closure.sh ./tools/verify_task_standalone_emc_status.sh git diff --check ``` ### 实际输出摘要 `./tools/verify_task_source_reuse_drift_docs.sh`: ```text task_source_reuse_drift_docs_source_working_closure_gate=ok task_source_reuse_drift_docs_compat_working_closure_gate=ok task_source_reuse_drift_docs_compat_working_closure=ok task_source_reuse_drift_docs_matrix_t048_done=ok task_source_reuse_drift_docs_status=ok ``` 回归 gate: ```text task_working_closure_status=ok task_standalone_emc_status_status=ok ``` ### 结论 T-048 验收通过。working closure gate 已纳入 source reuse / compatibility 文档和总文档一致性 gate;后续文档 drift 会检查该收口 gate 是否仍被记录。本轮不改变 runtime 行为。 ## 2026-07-08 05:46 EDT working closure 验收 ### 验收对象 T-047。 本轮验收目标是证明: - 任务矩阵所有任务均为完成。 - 当前推进指针为“无”。 - working README、功能内容和 NML 评估文档不再保留 T-007 完成前的过期口径。 - 新增 closure gate 能防止后续 working 索引与矩阵闭合状态漂移。 - T-007、文档一致性和 no-JSON 主路径 gate 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_working_closure.sh ./tools/verify_task_standalone_emc_status.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_no_json_motion_plan_main_path.sh git diff --check ``` ### 实际输出摘要 `./tools/verify_task_working_closure.sh`: ```text task_working_closure_matrix_t007_done=ok task_working_closure_matrix_t047_done=ok task_working_closure_matrix_next_none=ok task_working_closure_matrix_unclosed_tasks=absent task_working_closure_readme_closed=ok task_working_closure_readme_status_source=ok task_working_closure_readme_no_json=ok task_working_closure_functions_closed=ok task_working_closure_functions_standalone_status=ok task_working_closure_functions_readiness=ok task_working_closure_nml_t007_done=ok task_working_closure_status=ok ``` 回归 gate: ```text task_standalone_emc_status_status=ok task_source_reuse_drift_docs_status=ok task_no_json_motion_plan_main_path_status=ok ``` ### 结论 T-047 验收通过。working 索引与当前实现口径一致,任务矩阵无待办/进行中/阻塞项,下一条优先任务为“无”。本轮为文档和 gate 收口,不改变 runtime 行为。 ## 2026-07-08 05:40 EDT StandaloneEmcStatus 验收 ### 验收对象 T-007。 本轮验收目标是证明: - task/motion/io/top 必需状态集中到 `StandaloneEmcStatus`。 - `write_status_snapshot()` 在写 status buffer 前同步该容器。 - JSON status 从该容器导出 `taskTopLevelStatus`、`rcsStatus`、`task`、`motionStatus` 和 `emcStatus`。 - WASM、SDK、state matrix 均验证 `emcStatus` 与兼容 JSON 字段一致。 - T-046 no-JSON 主路径、source reuse/drift 文档、readiness contract 和 motion sync 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && ./tools/build_task_hal_wasm.sh SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh ./tests/wasm/node/verify_task_hal_sdk.sh node tests/wasm/node/verify_task_state_matrix.mjs ./tools/verify_task_standalone_emc_status.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_no_json_motion_plan_main_path.sh ./tools/verify_task_hal_readiness_contract.sh ./tests/wasm/node/verify_motion_hal_sync.sh ``` ### 实际输出摘要 构建: ```text linuxcnc_task_hal_wasm_build=ok ``` `SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_runtime_smoke=ok task_top_level_rcs_status_aggregation=ok standalone_emc_status_container=ok task_hal_no_json_main_path_status=ok ``` `./tests/wasm/node/verify_task_hal_sdk.sh`: ```text linuxcnc_task_hal_sdk=ok task_hal_sdk_status_snapshot=ok task_hal_sdk_standalone_emc_status=ok task_hal_timed_motion_plan_compat=ok ``` `node tests/wasm/node/verify_task_state_matrix.mjs`: ```text task_state_matrix=ok standalone_emc_status_matrix=ok ``` `./tools/verify_task_standalone_emc_status.sh`: ```text task_standalone_emc_status_wrapper_status_struct=ok task_standalone_emc_status_wrapper_task_struct=ok task_standalone_emc_status_wrapper_motion_struct=ok task_standalone_emc_status_wrapper_io_struct=ok task_standalone_emc_status_wrapper_sync=ok task_standalone_emc_status_wasm_status=ok task_standalone_emc_status_sdk_status=ok task_standalone_emc_status_state_matrix_status=ok task_standalone_emc_status_matrix_t007_done=ok task_standalone_emc_status_matrix_next_none=ok task_standalone_emc_status_status=ok ``` 回归 gate: ```text task_source_reuse_drift_docs_status=ok task_no_json_motion_plan_main_path_status=ok task_hal_readiness_contract_status=ok motion_hal_sync_smoke=ok ``` ### 结论 T-007 验收通过。`StandaloneEmcStatus` 已作为当前阶段 `EMC_STAT` 等价容器集中管理 task/motion/io/top 必需字段,JSON status 从该容器导出并保持兼容字段一致。任务矩阵当前已全部闭合,readiness 仍未提升。 ## 2026-07-08 05:28 EDT no-JSON 主 RUN 路径验收 ### 验收对象 T-046。 本轮验收目标是证明: - 主 `verify_task_hal_wasm.sh` smoke 不再调用 `lctask_load_program_motion_plan_json()`。 - staged program RUN 可通过 `emcTaskPlanRead()`、`emcTaskPlanCommand()`、`emcTaskPlanExecute()`、`emccanon.cc` command envelope 和 `taskintf.cc` motion issue 完成。 - 主状态保持 `motionPlanLoaded=false`、`planId=0`。 - `loadProgramMotionPlan()` 仍作为 timed motion plan 兼容/调试入口保留,且有单独验证。 - T-040/T-041/T-042/T-043/T-044/T-045、SDK、motion sync、readiness contract 和文档 gate 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && ./tools/build_task_hal_wasm.sh SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh ./tests/wasm/node/verify_task_hal_sdk.sh node tests/wasm/node/verify_task_state_matrix.mjs ./tools/verify_task_no_json_motion_plan_main_path.sh ./tools/verify_task_emccanon_motion_output.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_emctask_plan_read_execute.sh ./tools/verify_task_hal_readiness_contract.sh ./tests/wasm/node/verify_motion_hal_sync.sh ``` ### 实际输出摘要 构建: ```text linuxcnc_task_hal_wasm_build=ok ``` `SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_runtime_smoke=ok emctask_plan_read_execute_status=ok emccanon_motion_output_status=ok task_hal_no_json_main_path_status=ok ``` `./tests/wasm/node/verify_task_hal_sdk.sh`: ```text linuxcnc_task_hal_sdk=ok task_hal_sdk_status_snapshot=ok task_hal_timed_motion_plan_compat=ok task_hal_comment_source_line_numbers=ok ``` `node tests/wasm/node/verify_task_state_matrix.mjs`: ```text task_state_matrix=ok run_gate_staged_program_executes_without_json_plan=ok run_gate_accepts_homed_open_plan=ok run_gate_json_motion_plan_compat=ok ``` `./tools/verify_task_no_json_motion_plan_main_path.sh`: ```text task_no_json_motion_plan_main_path_wasm_test_main_load_plan=absent task_no_json_motion_plan_main_path_wasm_test_main_false=ok task_no_json_motion_plan_main_path_wasm_test_plan_zero=ok task_no_json_motion_plan_main_path_sdk_compat_call=ok task_no_json_motion_plan_main_path_state_default_no_json=ok task_no_json_motion_plan_main_path_matrix_t046_done=ok task_no_json_motion_plan_main_path_matrix_next_t007=ok task_no_json_motion_plan_main_path_status=ok ``` 回归 gate: ```text task_emccanon_motion_output_status=ok task_source_reuse_drift_docs_status=ok task_emctask_plan_read_execute_status=ok task_hal_readiness_contract_status=ok motion_hal_sync_smoke=ok ``` ### 结论 T-046 验收通过。主 RUN 路径已从 JSON timed motion plan 预加载切换为 staged program plan read/execute + emccanon + taskintf;`loadProgramMotionPlan()` 仍保留为兼容/调试入口。readiness 仍保持未提升。 ## 2026-07-08 05:06 EDT emccanon motion output/switchkins 验收 ### 验收对象 T-045。 本轮验收目标是证明: - motion output / wait command 已进入 `emccanon_wasm_subset` 的窄 command envelope。 - task-HAL runtime 可观测 `EMC_MOTION_SET_DOUT` / `EMC_MOTION_SET_AOUT` / `EMC_AUX_INPUT_WAIT` append 到 `interp_list` 的 evidence。 - M428/M429/M430 不再走 MDI 字符串 special-case,而是通过 canon `SET_AUX_OUTPUT_VALUE()` 到 taskintf AOUT 边界,仍保持 switchkins HAL 同步。 - T-040/T-041/T-042/T-043/T-044、taskintf、SDK、motion sync 和 readiness contract 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && ./tools/build_task_hal_wasm.sh SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_emccanon_motion_output.sh ./tools/verify_task_emccanon_spindle_tool.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_emccanon_dwell_path_control.sh ./tools/verify_task_emccanon_straight_motion.sh ./tools/verify_task_emccanon_init_finish_unit.sh ./tools/verify_task_hal_readiness_contract.sh 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_taskintf_jog_home_switchkins.sh ./tools/verify_task_emctask_plan_read_execute.sh ./tools/verify_task_emctask_plan_open_wait.sh ``` ### 实际输出摘要 构建: ```text linuxcnc_task_hal_wasm_build=ok ``` `SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_runtime_smoke=ok emccanon_spindle_tool_status=ok emccanon_motion_output_status=ok ``` `./tools/verify_task_emccanon_motion_output.sh`: ```text task_emccanon_motion_output_upstream_SET_MOTION_OUTPUT_BIT=ok task_emccanon_motion_output_upstream_CLEAR_MOTION_OUTPUT_BIT=ok task_emccanon_motion_output_upstream_SET_AUX_OUTPUT_BIT=ok task_emccanon_motion_output_upstream_CLEAR_AUX_OUTPUT_BIT=ok task_emccanon_motion_output_upstream_SET_MOTION_OUTPUT_VALUE=ok task_emccanon_motion_output_upstream_SET_AUX_OUTPUT_VALUE=ok task_emccanon_motion_output_upstream_WAIT=ok task_emccanon_motion_output_upstream_dout=ok task_emccanon_motion_output_upstream_aout=ok task_emccanon_motion_output_upstream_wait=ok task_emccanon_motion_output_wrapper_old_m428_special=absent task_emccanon_motion_output_matrix_t045_done=ok task_emccanon_motion_output_matrix_next_t046=ok task_emccanon_motion_output_status=ok ``` `./tools/verify_task_source_reuse_drift_docs.sh`: ```text task_source_reuse_drift_docs_source_emccanon_motion_output=ok task_source_reuse_drift_docs_drift_emccanon_motion_output=ok task_source_reuse_drift_docs_compat_emccanon_motion_output_gate=ok task_source_reuse_drift_docs_compat_emccanon_motion_output_status=ok task_source_reuse_drift_docs_status=ok ``` 回归 gate: ```text task_emccanon_spindle_tool_status=ok task_emccanon_dwell_path_control_status=ok task_emccanon_straight_motion_status=ok task_emccanon_init_finish_unit_status=ok task_hal_readiness_contract_status=ok task_state_matrix=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok task_taskintf_jog_home_switchkins_status=ok task_emctask_plan_read_execute_status=ok task_emctask_plan_open_wait_status=ok ``` ### 结论 T-045 验收通过。canon motion output/switchkins 已有 `EMC_MOTION_SET_DOUT` / `EMC_MOTION_SET_AOUT` / `EMC_AUX_INPUT_WAIT` / `interp_list` status evidence;M428-M430 已通过 canon output 到 taskintf AOUT 边界,旧 MDI 字符串 special-case 已移除,readiness 仍未提升。 ## 2026-07-08 04:50 EDT emccanon spindle/tool 验收 ### 验收对象 T-044。 本轮验收目标是证明: - spindle/tool command 已进入 `emccanon_wasm_subset` 的窄 command envelope。 - task-HAL runtime 可观测 `EMC_SPINDLE_*` / `EMC_TOOL_*` append 到 `interp_list` 的 evidence。 - MDI `S1200 M3`、`M5`、`T7 M6`、`M61 Q8` 可记录 spindle/tool evidence,不误发 motion command。 - T-040/T-041/T-042/T-043、taskintf、SDK、motion sync 和 readiness contract 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && ./tools/build_task_hal_wasm.sh SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_emccanon_spindle_tool.sh ./tools/verify_task_emccanon_dwell_path_control.sh ./tools/verify_task_emccanon_straight_motion.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_emccanon_init_finish_unit.sh ./tools/verify_task_emctask_plan_read_execute.sh ./tools/verify_task_emctask_plan_open_wait.sh ./tools/verify_task_hal_readiness_contract.sh 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_taskintf_jog_home_switchkins.sh ./tools/verify_task_taskintf_linear_move.sh ``` ### 实际输出摘要 构建: ```text linuxcnc_task_hal_wasm_build=ok ``` `SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_runtime_smoke=ok emccanon_init_finish_unit_status=ok emccanon_straight_motion_status=ok emccanon_dwell_path_control_status=ok emccanon_spindle_tool_status=ok ``` `./tools/verify_task_emccanon_spindle_tool.sh`: ```text task_emccanon_spindle_tool_upstream_SET_SPINDLE_SPEED=ok task_emccanon_spindle_tool_upstream_START_SPINDLE_CLOCKWISE=ok task_emccanon_spindle_tool_upstream_START_SPINDLE_COUNTERCLOCKWISE=ok task_emccanon_spindle_tool_upstream_STOP_SPINDLE_TURNING=ok task_emccanon_spindle_tool_upstream_SELECT_TOOL=ok task_emccanon_spindle_tool_upstream_CHANGE_TOOL=ok task_emccanon_spindle_tool_upstream_CHANGE_TOOL_NUMBER=ok task_emccanon_spindle_tool_upstream_RELOAD_TOOLDATA=ok task_emccanon_spindle_tool_subset_anchor=ok task_emccanon_spindle_tool_wrapper_spindle_append=ok task_emccanon_spindle_tool_wrapper_tool_append=ok task_emccanon_spindle_tool_wasm_test_status=ok task_emccanon_spindle_tool_matrix_t044_done=ok task_emccanon_spindle_tool_matrix_next_t045=ok task_emccanon_spindle_tool_status=ok ``` `./tools/verify_task_source_reuse_drift_docs.sh`: ```text task_source_reuse_drift_docs_source_emccanon_spindle_tool=ok task_source_reuse_drift_docs_drift_emccanon_spindle_tool=ok task_source_reuse_drift_docs_compat_emccanon_spindle_tool_gate=ok task_source_reuse_drift_docs_compat_emccanon_spindle_tool_status=ok task_source_reuse_drift_docs_status=ok ``` 回归 gate: ```text task_emccanon_dwell_path_control_status=ok task_emccanon_straight_motion_status=ok task_emccanon_init_finish_unit_status=ok task_emctask_plan_read_execute_status=ok task_emctask_plan_open_wait_status=ok task_hal_readiness_contract_status=ok task_state_matrix=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok task_taskintf_jog_home_switchkins_status=ok task_taskintf_linear_move_status=ok ``` ### 结论 T-044 验收通过。canon spindle/tool command 已有 `EMC_SPINDLE_*` / `EMC_TOOL_*` / `interp_list` status evidence,readiness 仍未提升。 ## 2026-07-08 04:34 EDT emccanon dwell/path-control 验收 ### 验收对象 T-043。 本轮验收目标是证明: - `DWELL()` 和 `SET_MOTION_CONTROL_MODE()` 已进入 `emccanon_wasm_subset` 的窄 command envelope。 - task-HAL runtime 可观测 `EMC_TRAJ_DELAY` / `EMC_TRAJ_SET_TERM_COND` append 到 `interp_list` 的 evidence。 - MDI `G64 P...` 和 `G4 P...` 可进入 path-control / dwell evidence,不误发 motion command。 - T-040/T-041/T-042、taskintf、SDK、motion sync 和 readiness contract 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && ./tools/build_task_hal_wasm.sh SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_emccanon_dwell_path_control.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_emccanon_straight_motion.sh ./tools/verify_task_emccanon_init_finish_unit.sh ./tools/verify_task_emctask_plan_read_execute.sh node ./tests/wasm/node/verify_task_state_matrix.mjs ./tools/verify_task_hal_readiness_contract.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_emctask_update_snapshot.sh ./tools/verify_task_emctask_plan_open_wait.sh ./tools/verify_task_emctask_state_mode.sh ./tools/verify_task_emctask_subset.sh ./tools/verify_task_taskintf_motion_bridge.sh ./tools/verify_task_taskintf_traj_control.sh ./tools/verify_task_taskintf_linear_move.sh ./tools/verify_task_taskintf_jog_home_switchkins.sh git diff --check -- wasm-port/runtime/core/linuxcnc_task_subset/emccanon_wasm_subset.hh wasm-port/runtime/core/linuxcnc_task_subset/emccanon_wasm_subset.cc wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs wasm-port/tools/verify_task_emccanon_dwell_path_control.sh wasm-port/tools/verify_task_emccanon_straight_motion.sh wasm-port/tools/verify_task_source_reuse_drift_docs.sh wasm-port/docs/source-reuse-map.md wasm-port/docs/drift-report.md wasm-port/docs/compatibility-validation.md wasm-port/working/04-任务矩阵.md ``` ### 实际输出摘要 构建: ```text linuxcnc_task_hal_wasm_build=ok ``` `SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_runtime_smoke=ok emccanon_init_finish_unit_status=ok emccanon_straight_motion_status=ok emccanon_dwell_path_control_status=ok ``` `./tools/verify_task_emccanon_dwell_path_control.sh`: ```text task_emccanon_dwell_path_control_upstream_DWELL=ok task_emccanon_dwell_path_control_upstream_SET_MOTION_CONTROL_MODE=ok task_emccanon_dwell_path_control_upstream_delay=ok task_emccanon_dwell_path_control_upstream_term_cond=ok task_emccanon_dwell_path_control_subset_dwell_impl=ok task_emccanon_dwell_path_control_subset_path_impl=ok task_emccanon_dwell_path_control_wrapper_dwell_count=ok task_emccanon_dwell_path_control_wrapper_term_append=ok task_emccanon_dwell_path_control_matrix_t043_done=ok task_emccanon_dwell_path_control_matrix_next_t044=ok task_emccanon_dwell_path_control_status=ok ``` `./tools/verify_task_source_reuse_drift_docs.sh`: ```text task_source_reuse_drift_docs_source_emccanon_dwell_path_control=ok task_source_reuse_drift_docs_drift_emccanon_dwell_path_control=ok task_source_reuse_drift_docs_compat_emccanon_dwell_path_control_gate=ok task_source_reuse_drift_docs_compat_emccanon_dwell_path_control_status=ok task_source_reuse_drift_docs_status=ok ``` 回归 gate: ```text task_emccanon_straight_motion_status=ok task_emccanon_init_finish_unit_status=ok task_emctask_plan_read_execute_status=ok task_state_matrix=ok task_hal_readiness_contract_status=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok task_emctask_update_snapshot_status=ok task_emctask_plan_open_wait_status=ok task_emctask_state_mode_status=ok task_emctask_subset_source_reuse=ok task_taskintf_motion_bridge_status=ok task_taskintf_traj_control_status=ok task_taskintf_linear_move_status=ok task_taskintf_jog_home_switchkins_status=ok ``` ### 结论 T-043 验收通过。canon dwell/path-control 已有 `EMC_TRAJ_DELAY` / `EMC_TRAJ_SET_TERM_COND` / `interp_list` status evidence,readiness 仍未提升。 ## 2026-07-08 03:52 EDT emccanon straight traverse/feed 验收 ### 验收对象 T-042。 本轮验收目标是证明: - `generate_fast_move()`、`generate_move()`、`STRAIGHT_TRAVERSE()`、`STRAIGHT_FEED()` 已进入 `emccanon_wasm_subset` 的 straight linear move 边界。 - task-HAL runtime 可观测 canon straight move 生成 `EMC_TRAJ_LINEAR_MOVE` 并进入 `interp_list` 路径的 evidence。 - no-json staged program RUN 仍能通过 PlanRead/Execute 后进入 canon straight feed 和 structured taskintf linear move。 - T-041 init/finish/unit、T-040 plan read/execute、taskintf linear move、SDK、motion sync 和 readiness contract 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_emccanon_straight_motion.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_emccanon_init_finish_unit.sh ./tools/verify_task_emctask_plan_read_execute.sh ./tools/verify_task_emccanon_subset.sh node ./tests/wasm/node/verify_task_state_matrix.mjs ./tools/verify_task_hal_readiness_contract.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_emctask_update_snapshot.sh ./tools/verify_task_emctask_plan_open_wait.sh ./tools/verify_task_emctask_state_mode.sh ./tools/verify_task_emctask_subset.sh ./tools/verify_task_taskintf_motion_bridge.sh ./tools/verify_task_taskintf_traj_control.sh ./tools/verify_task_taskintf_linear_move.sh ./tools/verify_task_taskintf_jog_home_switchkins.sh git diff --check -- wasm-port/runtime/core/linuxcnc_task_subset/emccanon_wasm_subset.hh wasm-port/runtime/core/linuxcnc_task_subset/emccanon_wasm_subset.cc wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs wasm-port/tools/verify_task_emccanon_straight_motion.sh wasm-port/tools/verify_task_emccanon_init_finish_unit.sh wasm-port/tools/verify_task_source_reuse_drift_docs.sh wasm-port/docs/source-reuse-map.md wasm-port/docs/drift-report.md wasm-port/docs/compatibility-validation.md wasm-port/working/04-任务矩阵.md ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok emctask_plan_read_execute_status=ok emccanon_subset_source_reuse_status=ok emccanon_init_finish_unit_status=ok emccanon_straight_motion_status=ok ``` `./tools/verify_task_emccanon_straight_motion.sh`: ```text task_emccanon_straight_motion_upstream_generate_fast_move=ok task_emccanon_straight_motion_upstream_generate_move=ok task_emccanon_straight_motion_upstream_STRAIGHT_TRAVERSE=ok task_emccanon_straight_motion_upstream_STRAIGHT_FEED=ok task_emccanon_straight_motion_upstream_linear_move=ok task_emccanon_straight_motion_upstream_interp_list=ok task_emccanon_straight_motion_subset_linear_anchor=ok task_emccanon_straight_motion_wrapper_append_count=ok task_emccanon_straight_motion_wrapper_last_command=ok task_emccanon_straight_motion_matrix_t042_done=ok task_emccanon_straight_motion_matrix_next_t043=ok task_emccanon_straight_motion_status=ok ``` `./tools/verify_task_source_reuse_drift_docs.sh`: ```text task_source_reuse_drift_docs_source_emccanon_straight_motion=ok task_source_reuse_drift_docs_drift_emccanon_straight_motion=ok task_source_reuse_drift_docs_compat_emccanon_straight_motion_gate=ok task_source_reuse_drift_docs_compat_emccanon_straight_motion_status=ok task_source_reuse_drift_docs_status=ok ``` 回归 gate: ```text task_emccanon_init_finish_unit_status=ok task_emctask_plan_read_execute_status=ok task_emccanon_subset_source_reuse=ok task_state_matrix=ok task_hal_readiness_contract_status=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok task_emctask_update_snapshot_status=ok task_emctask_plan_open_wait_status=ok task_emctask_state_mode_status=ok task_emctask_subset_source_reuse=ok task_taskintf_motion_bridge_status=ok task_taskintf_traj_control_status=ok task_taskintf_linear_move_status=ok task_taskintf_jog_home_switchkins_status=ok ``` ### 结论 T-042 验收通过。canon straight traverse/feed 已有 `EMC_TRAJ_LINEAR_MOVE` / `interp_list` status evidence,且 no-json staged program RUN、taskintf structured linear move 和 readiness contract 均未回退。 ## 2026-07-08 03:36 EDT emccanon init/finish/unit 验收 ### 验收对象 T-041。 本轮验收目标是证明: - `INIT_CANON()`、`ON_RESET()`、`FINISH()`、`USE_LENGTH_UNITS()`、`GET_EXTERNAL_LENGTH_UNITS()`、`GET_EXTERNAL_ANGLE_UNITS()` 和 `GET_EXTERNAL_POSITION*()` 已进入 `emccanon_wasm_subset` 的窄状态边界。 - task-HAL runtime 可通过 motion/config snapshot 更新 canon unit 和 endpoint evidence。 - `emccanonSourceReuse` status JSON 可观测 init/finish/reset/unit/position/endpoint 状态。 - T-039/T-040 plan gate、taskintf gate、SDK、motion sync 和 readiness contract 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_emccanon_init_finish_unit.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_emctask_plan_read_execute.sh ./tools/verify_task_emccanon_subset.sh node ./tests/wasm/node/verify_task_state_matrix.mjs ./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 ./tools/verify_task_emctask_update_snapshot.sh ./tools/verify_task_emctask_plan_open_wait.sh ./tools/verify_task_emctask_state_mode.sh ./tools/verify_task_emctask_subset.sh ./tools/verify_task_taskintf_motion_bridge.sh ./tools/verify_task_taskintf_traj_control.sh ./tools/verify_task_taskintf_linear_move.sh ./tools/verify_task_taskintf_jog_home_switchkins.sh git diff --check -- wasm-port/runtime/core/linuxcnc_task_subset/emccanon_wasm_subset.hh wasm-port/runtime/core/linuxcnc_task_subset/emccanon_wasm_subset.cc wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs wasm-port/tools/verify_task_emccanon_init_finish_unit.sh wasm-port/tools/verify_task_source_reuse_drift_docs.sh wasm-port/tools/verify_task_taskintf_jog_home_switchkins.sh wasm-port/tools/verify_task_emctask_plan_read_execute.sh wasm-port/docs/source-reuse-map.md wasm-port/docs/drift-report.md wasm-port/docs/compatibility-validation.md wasm-port/working/04-任务矩阵.md ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok emctask_plan_read_execute_status=ok emccanon_subset_source_reuse_status=ok emccanon_init_finish_unit_status=ok ``` `./tools/verify_task_emccanon_init_finish_unit.sh`: ```text task_emccanon_init_finish_unit_upstream_INIT_CANON=ok task_emccanon_init_finish_unit_upstream_ON_RESET=ok task_emccanon_init_finish_unit_upstream_FINISH=ok task_emccanon_init_finish_unit_upstream_USE_LENGTH_UNITS=ok task_emccanon_init_finish_unit_upstream_GET_EXTERNAL_LENGTH_UNITS=ok task_emccanon_init_finish_unit_upstream_GET_EXTERNAL_ANGLE_UNITS=ok task_emccanon_init_finish_unit_upstream_GET_EXTERNAL_POSITION=ok task_emccanon_init_finish_unit_subset_state=ok task_emccanon_init_finish_unit_wrapper_status_endpoint=ok task_emccanon_init_finish_unit_matrix_t041_done=ok task_emccanon_init_finish_unit_matrix_next_t042=ok task_emccanon_init_finish_unit_status=ok ``` `./tools/verify_task_source_reuse_drift_docs.sh`: ```text task_source_reuse_drift_docs_source_emccanon_init_finish_unit=ok task_source_reuse_drift_docs_drift_emccanon_init_finish_unit=ok task_source_reuse_drift_docs_compat_emccanon_init_finish_unit_gate=ok task_source_reuse_drift_docs_compat_emccanon_init_finish_unit_status=ok task_source_reuse_drift_docs_status=ok ``` 回归 gate: ```text task_emctask_plan_read_execute_status=ok task_emccanon_subset_source_reuse=ok task_state_matrix=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok task_hal_readiness_contract_status=ok task_emctask_update_snapshot_status=ok task_emctask_plan_open_wait_status=ok task_emctask_state_mode_status=ok task_emctask_subset_source_reuse=ok task_taskintf_motion_bridge_status=ok task_taskintf_traj_control_status=ok task_taskintf_linear_move_status=ok task_taskintf_jog_home_switchkins_status=ok ``` ### 结论 T-041 验收通过。canon init/reset/finish/unit/endpoint 状态已由 `emccanon_wasm_subset` 驱动并进入 task-HAL status evidence;T-042 可继续推进 straight traverse/feed 子集。 ## 2026-07-08 03:14 EDT emctask plan read/execute 验收 ### 验收对象 T-040。 本轮验收目标是证明: - `emcTaskPlanRead()`、`emcTaskPlanExecute()`、`emcTaskPlanLine()`、`emcTaskPlanLevel()`、`emcTaskPlanCommand()` 已进入 `emctask_wasm_subset` 的 plan IO result 边界。 - staged program 不再必须依赖 host JSON motion plan 才能 RUN。 - no-json staged program RUN 可通过 PlanRead/Command/Execute 进入 `interp_list`/taskintf issue 等价路径。 - MDI execute 也记录 PlanExecute evidence。 - 现有 task-HAL smoke、state matrix、source reuse/drift 文档和 readiness 均不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_emctask_plan_read_execute.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_emctask_plan_open_wait.sh node ./tests/wasm/node/verify_task_state_matrix.mjs ./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 ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_commands_drive_motion_runtime=ok emctask_subset_source_reuse_status=ok emctask_plan_read_execute_status=ok taskintf_motion_bridge_status=ok emccanon_subset_source_reuse_status=ok ``` `./tools/verify_task_emctask_plan_read_execute.sh`: ```text task_emctask_plan_read_execute_upstream_emcTaskPlanRead=ok task_emctask_plan_read_execute_upstream_emcTaskPlanExecute=ok task_emctask_plan_read_execute_upstream_emcTaskPlanLine=ok task_emctask_plan_read_execute_upstream_emcTaskPlanLevel=ok task_emctask_plan_read_execute_upstream_emcTaskPlanCommand=ok task_emctask_plan_read_execute_upstream_interp_list=ok task_emctask_plan_read_execute_subset_plan_io_result=ok task_emctask_plan_read_execute_wrapper_read_execute_helper=ok task_emctask_plan_read_execute_wrapper_no_json_run=ok task_emctask_plan_read_execute_wrapper_status_interp_list=ok task_emctask_plan_read_execute_state_matrix_no_json=ok task_emctask_plan_read_execute_matrix_t040_done=ok task_emctask_plan_read_execute_matrix_next_t041=ok task_emctask_plan_read_execute_status=ok ``` 补充回归: ```text task_source_reuse_drift_docs_status=ok task_emctask_plan_open_wait_status=ok task_state_matrix=ok run_gate_staged_program_executes_without_json_plan=ok task_emctask_update_snapshot_status=ok task_emctask_state_mode_status=ok task_emctask_subset_source_reuse=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok task_hal_readiness_contract_status=ok ``` ### 结论 T-040 通过。`emctask.cc` plan read/execute/line/level/command 子集已接入 staged program 主路径;RUN 不再硬依赖 host JSON motion plan。完整 canon init/finish/unit 和更完整 `interp_list` 命令类型迁移留给 T-041 之后继续推进。 ## 2026-07-08 02:30 EDT emctask plan wait/open/synch/reset 验收 ### 验收对象 T-039。 本轮验收目标是证明: - `emcTaskPlanSetWait()`、`emcTaskPlanIsWait()`、`emcTaskPlanClearWait()`、`emcTaskPlanSynch()`、`emcTaskPlanOpen()`、`emcTaskPlanClose()`、`emcTaskPlanReset()` 已进入 `emctask_wasm_subset` 的 plan state/result 边界。 - `lctask_open_program()` 正常路径通过 plan open 处理 staged FS program open。 - `EMC_TASK_PLAN_RUN` 设置 plan wait,程序完成和 motion wait done 路径清理 plan wait。 - `should_plan_synch` 通过 `emctask_plan_synch()` 记录 source-anchored plan synch。 - 现有 task-HAL smoke、state matrix、source reuse/drift 文档和 readiness 均不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_emctask_plan_open_wait.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_emctask_update_snapshot.sh ./tools/verify_task_emctask_state_mode.sh ./tools/verify_task_emctask_subset.sh node ./tests/wasm/node/verify_task_state_matrix.mjs ./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 ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_commands_drive_motion_runtime=ok emctask_subset_source_reuse_status=ok taskintf_motion_bridge_status=ok taskintf_jog_home_switchkins_status=ok emccanon_subset_source_reuse_status=ok ``` `./tools/verify_task_emctask_plan_open_wait.sh`: ```text task_emctask_plan_open_wait_upstream_emcTaskPlanSetWait=ok task_emctask_plan_open_wait_upstream_emcTaskPlanIsWait=ok task_emctask_plan_open_wait_upstream_emcTaskPlanClearWait=ok task_emctask_plan_open_wait_upstream_emcTaskPlanSynch=ok task_emctask_plan_open_wait_upstream_emcTaskPlanOpen=ok task_emctask_plan_open_wait_upstream_emcTaskPlanClose=ok task_emctask_plan_open_wait_upstream_emcTaskPlanReset=ok task_emctask_plan_open_wait_subset_plan_state=ok task_emctask_plan_open_wait_subset_plan_result=ok task_emctask_plan_open_wait_wrapper_plan_open=ok task_emctask_plan_open_wait_wrapper_plan_wait=ok task_emctask_plan_open_wait_wrapper_plan_clear=ok task_emctask_plan_open_wait_wrapper_plan_synch=ok task_emctask_plan_open_wait_wrapper_plan_close=ok task_emctask_plan_open_wait_wrapper_plan_reset=ok task_emctask_plan_open_wait_matrix_t039_done=ok task_emctask_plan_open_wait_matrix_next_t040=ok task_emctask_plan_open_wait_status=ok ``` 补充回归: ```text task_source_reuse_drift_docs_status=ok task_emctask_update_snapshot_status=ok task_emctask_state_mode_status=ok task_emctask_subset_source_reuse=ok task_state_matrix=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok task_hal_readiness_contract_status=ok ``` ### 结论 T-039 通过。`emctask.cc` plan wait/open/synch/reset 子集已接入 staged FS 和 task-cycle command 边界;完整 `PlanRead/Execute/Line/Level/Command` 与 `interp_list` 驱动留给 T-040。readiness 仍保持未 promoted。 ## 2026-07-08 01:57 EDT emctask determine/update snapshot 验收 ### 验收对象 T-038。 本轮验收目标是证明: - `determineMode()`、`determineState()`、`emcTaskUpdate()` 已进入 `emctask_wasm_subset` 的 update 边界。 - `wasm_emcTaskUpdate()` 正常路径从 task cycle 的 `LcmotStatusSnapshot` 和 IO latch 构造 update 输入。 - status JSON 能记录 snapshot-fed update 证据。 - 现有 task-HAL smoke、state matrix、source reuse/drift 文档和 readiness 均不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_emctask_update_snapshot.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_emctask_state_mode.sh ./tools/verify_task_emctask_subset.sh node ./tests/wasm/node/verify_task_state_matrix.mjs ./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 ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok emctask_subset_source_reuse_status=ok taskintf_motion_bridge_status=ok taskintf_jog_home_switchkins_status=ok ``` `./tools/verify_task_emctask_update_snapshot.sh`: ```text task_emctask_update_snapshot_upstream_determineMode=ok task_emctask_update_snapshot_upstream_determineState=ok task_emctask_update_snapshot_upstream_emcTaskUpdate=ok task_emctask_update_snapshot_wrapper_motion_coord=ok task_emctask_update_snapshot_wrapper_motion_enabled=ok task_emctask_update_snapshot_wrapper_io_estop=ok task_emctask_update_snapshot_wrapper_status_source=ok task_emctask_update_snapshot_wasm_assertion=ok task_emctask_update_snapshot_matrix_t038_done=ok task_emctask_update_snapshot_matrix_next_t039=ok task_emctask_update_snapshot_status=ok ``` 补充回归: ```text task_source_reuse_drift_docs_status=ok task_emctask_state_mode_status=ok task_emctask_subset_source_reuse=ok task_state_matrix=ok task_command_json_host_boundary=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok task_hal_readiness_contract_status=ok ``` ### 结论 T-038 通过。`emctask.cc` determine/update 子集已由 motion/io snapshot 驱动,task cycle command 触发语义保持稳定;readiness 仍保持未 promoted。下一步进入 T-039。 ## 2026-07-08 01:49 EDT emctask abort/state/mode 验收 ### 验收对象 T-037。 本轮验收目标是证明: - `emcTaskAbort()`、`emcTaskSetMode()`、`emcTaskSetState()` 已进入 `emctask_wasm_subset` 的 command-result 边界。 - wrapper 的 SetState/SetMode/Abort 分支通过 `lc_emctask_subset_*()` 决策结果执行。 - command 仍由 task cycle 消费,不在 send 阶段改变 task 语义状态。 - 现有 task-HAL smoke、state matrix、readiness 均不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_emctask_state_mode.sh ./tools/verify_task_emctask_subset.sh ./tools/verify_task_source_reuse_drift_docs.sh node ./tests/wasm/node/verify_task_state_matrix.mjs ./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 ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_commands_drive_motion_runtime=ok emctask_subset_source_reuse_status=ok taskintf_motion_bridge_status=ok taskintf_jog_home_switchkins_status=ok ``` `./tools/verify_task_emctask_state_mode.sh`: ```text task_emctask_state_mode_upstream_emcTaskAbort=ok task_emctask_state_mode_upstream_emcTaskSetMode=ok task_emctask_state_mode_upstream_emcTaskSetState=ok task_emctask_state_mode_subset_result_type=ok task_emctask_state_mode_wrapper_result_apply=ok task_emctask_state_mode_wrapper_status_count=ok task_emctask_state_mode_matrix_t037_done=ok task_emctask_state_mode_matrix_next_t038=ok task_emctask_state_mode_status=ok ``` `node ./tests/wasm/node/verify_task_state_matrix.mjs`: ```text task_state_matrix=ok run_gate_estop_rejected=ok run_gate_estop_reset_rejected=ok run_gate_manual_rejected=ok run_gate_unhomed_rejected=ok run_gate_homing_rejected=ok run_gate_program_open_required=ok run_gate_interpreter_plan_required=ok run_gate_accepts_homed_open_plan=ok task_command_send_queues_until_cycle=ok task_command_json_host_boundary=ok ``` 补充回归: ```text task_emctask_subset_source_reuse=ok task_source_reuse_drift_docs_status=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok task_hal_readiness_contract_status=ok ``` ### 结论 T-037 通过。`emctask.cc` abort/state/mode 子集已通过结构化 command-result 接入,task cycle command 触发语义保持稳定;readiness 仍保持未 promoted。下一步进入 T-038。 ## 2026-07-08 01:39 EDT taskintf jog/home/switchkins 验收 ### 验收对象 T-036。 本轮验收目标是证明: - `emcJogIncr()`、`emcJointHome()`、`emcJointUnhome()`、`emcMotionSetAout()` 已进入 `taskintf_wasm_subset` 的结构化 command envelope。 - task runtime 的 jog/home/switchkins 主路径不再依赖 task wrapper 拼接 motion JSON,而是调用结构化 `lcmot_write_*()`。 - Home/Jog/M428/M429/M430 smoke 均通过,且 readiness 不提升。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_taskintf_jog_home_switchkins.sh ./tools/verify_task_taskintf_subset.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_taskintf_linear_move.sh ./tools/verify_task_taskintf_traj_control.sh ./tools/verify_task_taskintf_motion_bridge.sh ./tools/verify_task_hal_readiness_contract.sh ./tests/wasm/node/verify_task_hal_sdk.sh SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok mdi_jog_home_motion_issue_from_execute=ok mdi_jog_task_motion_hal_sync=ok taskintf_subset_source_reuse_status=ok taskintf_motion_bridge_status=ok taskintf_traj_control_status=ok taskintf_linear_move_status=ok taskintf_jog_home_switchkins_status=ok ``` `./tools/verify_task_taskintf_jog_home_switchkins.sh`: ```text task_taskintf_jog_home_switchkins_upstream_taskintf_emcJogIncr=ok task_taskintf_jog_home_switchkins_upstream_taskintf_emcJointHome=ok task_taskintf_jog_home_switchkins_upstream_taskintf_emcJointUnhome=ok task_taskintf_jog_home_switchkins_upstream_taskintf_emcMotionSetAout=ok task_taskintf_jog_home_switchkins_lcmot_jog_abi=ok task_taskintf_jog_home_switchkins_lcmot_home_abi=ok task_taskintf_jog_home_switchkins_lcmot_unhome_abi=ok task_taskintf_jog_home_switchkins_lcmot_aout_abi=ok task_taskintf_jog_home_switchkins_wrapper_status_count=ok task_taskintf_jog_home_switchkins_matrix_t036_done=ok task_taskintf_jog_home_switchkins_matrix_next_t037=ok task_taskintf_jog_home_switchkins_status=ok ``` 补充回归: ```text task_taskintf_subset_source_reuse=ok task_source_reuse_drift_docs_status=ok task_taskintf_linear_move_status=ok task_taskintf_traj_control_status=ok task_taskintf_motion_bridge_status=ok task_hal_readiness_contract_status=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok ``` ### 结论 T-036 通过。`taskintf.cc` jog/home/switchkins 子集已通过结构化 `lcmot_write_*()` 接入,Home/Jog/M428-M430 smoke 通过;readiness 仍保持未 promoted。下一步进入 T-037。 ## 2026-07-08 01:27 EDT taskintf linear move 验收 ### 验收对象 T-035。 本轮验收目标是证明: - `emcTrajLinearMove()` 已进入 `taskintf_wasm_subset` 的结构化 linear move envelope。 - task runtime 的 linear move 主路径不再依赖 task wrapper 拼接 linear move JSON,而是调用 `lcmot_write_linear_move()`。 - pending execute flush 也能携带结构化 `LcTaskIntfSubsetMotionCommand`。 - G0/G1 smoke 均通过,且 readiness 不提升。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_taskintf_linear_move.sh ./tools/verify_task_taskintf_subset.sh ./tools/verify_task_source_reuse_drift_docs.sh ./tools/verify_task_taskintf_traj_control.sh ./tools/verify_task_hal_readiness_contract.sh ./tools/verify_task_taskintf_motion_bridge.sh ./tests/wasm/node/verify_task_hal_sdk.sh SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok taskintf_subset_source_reuse_status=ok taskintf_motion_bridge_status=ok taskintf_traj_control_status=ok taskintf_linear_move_status=ok emccanon_subset_source_reuse_status=ok ``` `./tools/verify_task_taskintf_linear_move.sh`: ```text task_taskintf_linear_move_upstream_emcTrajLinearMove=ok task_taskintf_linear_move_upstream_sets_line=ok task_taskintf_linear_move_upstream_writes_command=ok task_taskintf_linear_move_subset_linear_move_ex_decl=ok task_taskintf_linear_move_lcmot_linear_abi=ok task_taskintf_linear_move_wrapper_structured_issue=ok task_taskintf_linear_move_wrapper_pending_struct=ok task_taskintf_linear_move_build_exports_linear=ok task_taskintf_linear_move_wasm_test_prints_linear=ok task_taskintf_linear_move_matrix_t035_done=ok task_taskintf_linear_move_matrix_next_t036=ok task_taskintf_linear_move_status=ok ``` 补充回归: ```text task_taskintf_subset_source_reuse=ok task_source_reuse_drift_docs_status=ok task_taskintf_traj_control_status=ok task_hal_readiness_contract_status=ok task_taskintf_motion_bridge_status=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok ``` ### 结论 T-035 通过。`taskintf.cc` linear move issue 子集已通过结构化 `lcmot_write_linear_move()` 接入,G0/G1 smoke 通过;readiness 仍保持未 promoted。下一步进入 T-036。 ## 2026-07-08 01:13 EDT taskintf traj control 验收 ### 验收对象 T-034。 本轮验收目标是证明: - `emcTrajEnable()` / `emcTrajDisable()` / `emcTrajAbort()` / `emcTrajPause()` / `emcTrajStep()` / `emcTrajResume()` / `emcTrajSetMotionId()` 已进入 `taskintf_wasm_subset`。 - enable/disable/set-motion-id 已接入 `lcmot` runtime 状态。 - task state ON/OFF、pause/step/resume、program/MDI motion issue 都能通过 taskintf traj control 入口。 - 现有 pause/step/resume smoke 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_taskintf_traj_control.sh ``` ### 实际输出摘要 ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok pause_resume_step_motion_issue_from_execute=ok taskintf_subset_source_reuse_status=ok taskintf_motion_bridge_status=ok taskintf_traj_control_status=ok ``` `./tools/verify_task_taskintf_traj_control.sh`: ```text task_taskintf_traj_control_upstream_taskintf=ok task_taskintf_traj_control_upstream_motion=ok task_taskintf_traj_control_subset_source=ok task_taskintf_traj_control_subset_header=ok task_taskintf_traj_control_lcmot_header=ok task_taskintf_traj_control_lcmot_source=ok task_taskintf_traj_control_task_wrapper=ok task_taskintf_traj_control_wasm_test=ok task_taskintf_traj_control_matrix=ok task_taskintf_traj_control_subset_has_enable_fn=ok task_taskintf_traj_control_subset_has_disable_fn=ok task_taskintf_traj_control_subset_has_motion_id_fn=ok task_taskintf_traj_control_lcmot_enable_command=ok task_taskintf_traj_control_lcmot_disable_command=ok task_taskintf_traj_control_lcmot_motion_id_command=ok task_taskintf_traj_control_wrapper_exports_traj_count=ok task_taskintf_traj_control_wasm_test_prints_traj=ok task_taskintf_traj_control_matrix_t034_done=ok task_taskintf_traj_control_matrix_next_t035=ok task_taskintf_traj_control_status=ok ``` 补充回归: ```text task_taskintf_subset_source_reuse=ok task_source_reuse_drift_docs_status=ok task_hal_readiness_contract_status=ok task_taskintf_motion_bridge_status=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok ``` ### 结论 T-034 通过。`taskintf.cc` traj control 子集已接入 `lcmot`,并通过 smoke 证明 pause/step/resume 不回退;readiness 仍保持未 promoted。 ## 2026-07-08 01:00 EDT taskintf motion bridge 验收 ### 验收对象 T-033。 本轮验收目标是证明: - `emcMotionInit()` 通过 `taskintf_wasm_subset` 的 motion bridge 初始化 `lcmot`。 - `emcMotionUpdate()` 通过 bridge 读取 status/config/error,而不是 task wrapper 直接读取 motion snapshot。 - `emcMotionAbort()` 通过 bridge 生成 abort command。 - `lcmot_read_config_snapshot()` 和 `lcmot_read_error_message()` 已作为窄 runtime-edge ABI 存在。 - task cycle snapshot smoke 继续通过,readiness 不提升。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ./tools/verify_task_taskintf_motion_bridge.sh ``` ### 实际输出摘要 ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_updates_from_cycle_snapshot=ok motion_abort_drives_task_error=ok motion_error_drives_task_error=ok motion_soft_limit_drives_task_error=ok task_top_level_rcs_status_aggregation=ok taskintf_subset_source_reuse_status=ok taskintf_motion_bridge_status=ok ``` `./tools/verify_task_taskintf_motion_bridge.sh`: ```text task_taskintf_motion_bridge_upstream_taskintf=ok task_taskintf_motion_bridge_upstream_usrmot=ok task_taskintf_motion_bridge_subset_source=ok task_taskintf_motion_bridge_subset_header=ok task_taskintf_motion_bridge_lcmot_header=ok task_taskintf_motion_bridge_lcmot_source=ok task_taskintf_motion_bridge_task_wrapper=ok task_taskintf_motion_bridge_wasm_test=ok task_taskintf_motion_bridge_build_script=ok task_taskintf_motion_bridge_matrix=ok task_taskintf_motion_bridge_subset_has_motion_init=ok task_taskintf_motion_bridge_subset_has_motion_update=ok task_taskintf_motion_bridge_subset_has_motion_abort=ok task_taskintf_motion_bridge_lcmot_has_config_read=ok task_taskintf_motion_bridge_lcmot_has_error_read=ok task_taskintf_motion_bridge_wrapper_status_exports_bridge=ok task_taskintf_motion_bridge_wasm_test_prints_bridge=ok task_taskintf_motion_bridge_matrix_t033_done=ok task_taskintf_motion_bridge_matrix_next_t034=ok task_taskintf_motion_bridge_status=ok ``` 补充回归: ```text task_taskintf_subset_source_reuse=ok task_source_reuse_drift_docs_status=ok task_hal_readiness_contract_status=ok task_usrmot_shim_design_status=ok linuxcnc_task_hal_sdk=ok task_hal_sdk_status_snapshot=ok ``` ### 结论 T-033 通过。task cycle 的 motion init/update/abort 已经走 `taskintf.cc` 窄 motion bridge;config/error read 有窄 `lcmot_*` ABI;完整 native usrmot/shared-memory/NML 拓扑仍未 promoted。 ## 2026-07-08 00:52 EDT taskintf usrmot shim 设计验收 ### 验收对象 T-032。 本轮验收目标是证明: - 已明确 `taskintf.cc` 侧 usrmot shim 不直接复用完整 `usrmotintf.cc`。 - 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()`,当前不能把 boolean error flag 当作错误队列。 - T-032 已完成,下一步进入 T-033。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_usrmot_shim_design.sh ``` ### 实际输出摘要 ```text task_usrmot_shim_design_doc=ok task_usrmot_shim_design_matrix=ok task_usrmot_shim_design_upstream_header=ok task_usrmot_shim_design_upstream_source=ok task_usrmot_shim_design_upstream_taskintf=ok task_usrmot_shim_design_lcmot_header=ok task_usrmot_shim_design_lcmot_source=ok task_usrmot_shim_design_taskintf_subset_header=ok task_usrmot_shim_design_lcmot_has_command_write=ok task_usrmot_shim_design_lcmot_has_status_snapshot=ok task_usrmot_shim_design_lcmot_has_init=ok task_usrmot_shim_design_lcmot_has_reset=ok task_usrmot_shim_design_doc_command_write=ok task_usrmot_shim_design_doc_command_maps_lcmot=ok task_usrmot_shim_design_doc_status_read=ok task_usrmot_shim_design_doc_status_maps_lcmot=ok task_usrmot_shim_design_doc_config_read=ok task_usrmot_shim_design_doc_config_gap=ok task_usrmot_shim_design_doc_error_read=ok task_usrmot_shim_design_doc_error_gap=ok task_usrmot_shim_design_doc_no_json_status_parse=ok task_usrmot_shim_design_doc_no_hal_config=ok task_usrmot_shim_design_doc_no_readiness_promotion=ok task_usrmot_shim_design_readme_lists_doc=ok task_usrmot_shim_design_matrix_t032_done=ok task_usrmot_shim_design_matrix_next_t033=ok task_usrmot_shim_design_status=ok ``` 补充回归: ```text task_taskintf_subset_source_reuse=ok task_source_reuse_drift_docs_status=ok task_hal_readiness_contract_status=ok linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_top_level_rcs_status_aggregation=ok taskintf_subset_source_reuse_status=ok ``` ### 结论 T-032 通过。`taskintf.cc` usrmot shim 的四类核心边界已经设计闭合:command write/status read 有当前 `lcmot_*` 落点;config read/error read 作为 T-033 之前必须补齐的底层 ABI 缺口被明确记录。 ## 2026-07-08 00:43 EDT source reuse / drift 文档验收 ### 验收对象 T-030。 本轮验收目标是证明: - `docs/source-reuse-map.md` 反映 T-027/T-028/T-029 后的 task 主循环迁移阶段。 - `docs/drift-report.md` 记录 task/motion/HAL WASM runtime-edge 和 `emc_nml.hh` status container 边界。 - `docs/compatibility-validation.md` 记录 task-HAL WASM/SDK、readiness、`emc_nml` 复用评估和文档一致性验证 gate。 - readiness 仍保持未 promoted,不出现 `nativeTaskReady=true` 或 `nativeHalSyncReady=true`。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_source_reuse_drift_docs.sh ``` ### 实际输出摘要 ```text task_source_reuse_drift_docs_source_reuse=ok task_source_reuse_drift_docs_drift=ok task_source_reuse_drift_docs_compatibility=ok task_source_reuse_drift_docs_matrix=ok task_source_reuse_drift_docs_source_task_row=ok task_source_reuse_drift_docs_source_readiness_promoted=ok task_source_reuse_drift_docs_source_native_task_false=ok task_source_reuse_drift_docs_source_native_hal_false=ok task_source_reuse_drift_docs_source_full_program_false=ok task_source_reuse_drift_docs_source_rcs_aggregation=ok task_source_reuse_drift_docs_source_emc_nml_decision=ok task_source_reuse_drift_docs_source_readiness_gate=ok task_source_reuse_drift_docs_source_emc_nml_gate=ok task_source_reuse_drift_docs_source_docs_gate=ok task_source_reuse_drift_docs_source_native_task_true=absent task_source_reuse_drift_docs_source_native_hal_true=absent task_source_reuse_drift_docs_drift_task_boundary=ok task_source_reuse_drift_docs_drift_emc_nml_boundary=ok task_source_reuse_drift_docs_drift_rcs_aggregation=ok task_source_reuse_drift_docs_drift_readiness_false=ok task_source_reuse_drift_docs_drift_runtime_promoted_false=ok task_source_reuse_drift_docs_drift_no_promotion=ok task_source_reuse_drift_docs_compat_task_hal_wasm=ok task_source_reuse_drift_docs_compat_task_hal_sdk=ok task_source_reuse_drift_docs_compat_readiness_gate=ok task_source_reuse_drift_docs_compat_emc_nml_gate=ok task_source_reuse_drift_docs_compat_docs_gate=ok task_source_reuse_drift_docs_compat_rcs_status=ok task_source_reuse_drift_docs_compat_readiness_false=ok task_source_reuse_drift_docs_matrix_t030_done=ok task_source_reuse_drift_docs_status=ok ``` 补充回归: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_hal_readiness_contract_status=ok task_emc_nml_reuse_plan_status=ok ``` 未完成验证: ```text ./tests/docs/node/verify_project_release_handoff_docs.sh ``` 该 docs gate 当前因 `/home/mes123456/cnc_wams/PROJECT_COMPLETION_TRACKER.md` 缺失而失败,失败发生在读取 tracker 文件阶段,未进入本轮修改的 source reuse / drift / compatibility 断言。 ### 结论 T-030 通过。source reuse、drift、compatibility 文档已同步当前 task 主循环迁移阶段、readiness false 口径、RCS 聚合和 `emc_nml.hh` 复用决策。 ## 2026-07-08 00:36 EDT emc_nml 复用评估验收 ### 验收对象 T-029。 本轮验收目标是证明: - 已评估上游 `emc_nml.hh` 的直接 include 依赖。 - 已明确当前 vendor tree 未包含完整 `emc_nml.hh`。 - 已形成选择记录:当前不直接 include 完整 `emc_nml.hh`,先走分阶段 typedef / 窄 `StandaloneEmcStatus`。 - 已记录后续 T-007/T-030/T-032/T-033/T-038 入口。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_emc_nml_reuse_plan.sh ``` ### 实际输出摘要 ```text task_emc_nml_reuse_plan_upstream=ok task_emc_nml_reuse_plan_doc=ok task_emc_nml_reuse_plan_matrix=ok task_emc_nml_reuse_plan_vendor_emc_nml_hh=absent task_emc_nml_reuse_plan_upstream_has_emc_stat=ok task_emc_nml_reuse_plan_upstream_has_task_stat=ok task_emc_nml_reuse_plan_upstream_has_motion_stat=ok task_emc_nml_reuse_plan_upstream_has_io_stat=ok task_emc_nml_reuse_plan_doc_choice=ok task_emc_nml_reuse_plan_doc_strategy=ok task_emc_nml_reuse_plan_doc_standalone=ok task_emc_nml_reuse_plan_doc_dependency_nml=ok task_emc_nml_reuse_plan_doc_dependency_rs274=ok task_emc_nml_reuse_plan_doc_boundary=ok task_emc_nml_reuse_plan_doc_next_t032=ok task_emc_nml_reuse_plan_matrix_t029_done=ok task_emc_nml_reuse_plan_status=ok ``` ### 结论 T-029 通过。当前阶段选择分阶段 typedef / 窄 `StandaloneEmcStatus`,不直接 include 完整 `emc_nml.hh`;完整 NML/CMS 依赖和 vendor 提升留给后续 T-032+ 以及 source reuse map 更新。 ## 2026-07-08 00:33 EDT top-level RCS_STATUS 聚合验收 ### 验收对象 T-028。 本轮验收目标是证明: - task/motion/io 三方状态聚合顺序与 `emctaskmain.cc` 的顶层 status write 口径一致。 - JSON status 明确导出 `rcsStatus.top/task/motion/io` 和 `task.status`。 - task/motion/io 任一 ERROR 会驱动 top/task `ERROR`。 - task exec done、interp idle、pending 为空、motion done、io done 时 top/task 为 `DONE`。 - 其它运行中状态为 `EXEC`。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh ``` ### 实际输出摘要 ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok mdi_jog_home_motion_issue_from_execute=ok task_waits_on_motion_snapshot_queue=ok motion_abort_drives_task_error=ok motion_error_drives_task_error=ok motion_soft_limit_drives_task_error=ok io_error_drives_task_error=ok task_top_level_rcs_status_aggregation=ok pause_resume_step_motion_issue_from_execute=ok task_hal_readiness_status_contract=ok emctask_subset_source_reuse_status=ok taskintf_subset_source_reuse_status=ok emccanon_subset_source_reuse_status=ok ``` ### 结论 T-028 通过。status JSON 现在导出 top/task/motion/io 四个 RCS 聚合状态,聚合顺序与上游 `emctaskmain.cc` 的 ERROR -> DONE -> EXEC 口径一致。 ## 2026-07-08 00:22 EDT motion error/soft-limit 注入验收 ### 验收对象 T-027。 本轮验收目标是证明: - motion runtime 可以通过测试命令注入独立 motion ERROR。 - motion runtime 可以通过测试命令注入 soft-limit。 - task 周期内的 subordinate sync 会消费 motion snapshot,把上述状态转成 task `ERROR`。 - 最小 `taskTopLevelStatus` 会同步反映 motion ERROR 和 soft-limit 的 `ERROR` 状态。 - 用户主动 task abort cleanup 语义不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_motion_hal_sync.sh 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 ``` ### 实际输出摘要 ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok mdi_jog_home_motion_issue_from_execute=ok task_waits_on_motion_snapshot_queue=ok motion_abort_drives_task_error=ok motion_error_drives_task_error=ok motion_soft_limit_drives_task_error=ok io_error_drives_task_error=ok pause_resume_step_motion_issue_from_execute=ok task_hal_readiness_status_contract=ok emctask_subset_source_reuse_status=ok taskintf_subset_source_reuse_status=ok emccanon_subset_source_reuse_status=ok ``` 补充回归: ```text motion_hal_sync_smoke=ok linuxcnc_task_hal_sdk=ok task_state_matrix=ok task_hal_phase0_native_probe_gate=ok task_hal_readiness_contract_status=ok ``` ### 结论 T-027 通过。motion ERROR 和 soft-limit 现在都有独立注入路径、snapshot 字段和 task subordinate sync 覆盖,均能驱动 task 进入 `ERROR`,并让最小 `taskTopLevelStatus` 反映 `ERROR`。新增 snapshot 字段追加在 `LcmotStatusSnapshot` 尾部,保留已有 C ABI struct offset;既有 abort/io/wait/readiness smoke 未回退。 ## 2026-07-08 00:13 EDT readiness contract 验收 ### 验收对象 T-015。 本轮验收目标是证明: - `nativeTaskReady`、`nativeHalSyncReady`、`fullLinuxCncProgramExecutionReady` 与当前能力边界一致,均保持 false。 - `task_hal_runtime_promoted=0` 仍是 task-HAL source manifest 的真实口径。 - `docs/source-reuse-map.md` 不再声称 task/motion/HAL Web simulation runtime 已 promoted 或 readiness 为 true。 - WASM smoke 明确断言 `fullLinuxCncProgramExecutionReady=false`。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_hal_readiness_contract.sh ./tests/wasm/node/verify_task_hal_wasm.sh ./tests/native/verify_task_hal_phase0.sh 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 ``` ### 实际输出摘要 ```text task_hal_readiness_task_hal_runtime_promoted=0 task_hal_readiness_nativeTaskReady=false task_hal_readiness_nativeHalSyncReady=false task_hal_readiness_doc_runtime_promoted_false=ok task_hal_readiness_doc_native_task_false=ok task_hal_readiness_doc_native_hal_false=ok task_hal_readiness_doc_full_program_false=ok task_hal_readiness_doc_unpromoted_classification=ok task_hal_readiness_doc_native_task_true=absent task_hal_readiness_doc_native_hal_true=absent task_hal_readiness_doc_full_boundary_promoted_claim=absent task_hal_readiness_doc_complete_claim=absent task_hal_readiness_runtime_native_task_false=ok task_hal_readiness_runtime_native_hal_false=ok task_hal_readiness_runtime_full_program_false=ok task_hal_readiness_wasm_test_full_program_false=ok task_hal_readiness_contract_status=ok ``` `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok mdi_jog_home_motion_issue_from_execute=ok task_waits_on_motion_snapshot_queue=ok motion_abort_drives_task_error=ok io_error_drives_task_error=ok pause_resume_step_motion_issue_from_execute=ok task_hal_readiness_status_contract=ok emctask_subset_source_reuse_status=ok taskintf_subset_source_reuse_status=ok emccanon_subset_source_reuse_status=ok ``` 补充回归: ```text task_hal_phase0_native_probe_gate=ok linuxcnc_task_hal_sdk=ok motion_hal_sync_smoke=ok ``` ### 结论 T-015 通过。readiness 的文档、manifest、runtime、WASM test 口径已经统一为未 promoted;`docs/source-reuse-map.md` 不再与代码中的 false readiness 状态矛盾。 ## 2026-07-07 23:59 EDT emccanon 可编译子集验收 ### 验收对象 T-014。 本轮验收目标是证明: - task-HAL WASM build 已纳入 vendored `emccanon_wasm_subset.cc`。 - 该子集有明确上游 source path 和锚点:`src/emc/task/emccanon.cc` 的 `generate_fast_move()`、`generate_move()`、`STRAIGHT_TRAVERSE()`、`STRAIGHT_FEED()`。 - task runtime 的 linear motion 生成先通过 emccanon canonical linear-move envelope,再进入 taskintf command envelope 和 `lcmot_*` runtime edge。 - 完整 `emccanon.cc` 的 `CanonConfig_t`、`interp_list`、offset/unit conversion、NURBS、spindle/tool 等边界仍未 promoted,readiness 保持保守。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_emccanon_subset.sh ./tests/wasm/node/verify_task_hal_wasm.sh ``` ### 实际输出摘要 `./tools/verify_task_emccanon_subset.sh`: ```text task_emccanon_subset_upstream=ok task_emccanon_subset_source=ok task_emccanon_subset_header=ok task_emccanon_subset_upstream_generate_fast_move=ok task_emccanon_subset_origin_generate_fast_move=ok task_emccanon_subset_upstream_generate_move=ok task_emccanon_subset_origin_generate_move=ok task_emccanon_subset_upstream_STRAIGHT_TRAVERSE=ok task_emccanon_subset_origin_STRAIGHT_TRAVERSE=ok task_emccanon_subset_upstream_STRAIGHT_FEED=ok task_emccanon_subset_origin_STRAIGHT_FEED=ok task_emccanon_subset_origin_path=ok task_emccanon_subset_build_included=ok task_emccanon_subset_source_reuse=ok ``` `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok mdi_jog_home_motion_issue_from_execute=ok task_waits_on_motion_snapshot_queue=ok motion_abort_drives_task_error=ok io_error_drives_task_error=ok pause_resume_step_motion_issue_from_execute=ok emctask_subset_source_reuse_status=ok taskintf_subset_source_reuse_status=ok emccanon_subset_source_reuse_status=ok ``` ### 结论 T-014 通过。task-HAL WASM build 已编译 vendored `emccanon_wasm_subset.cc`,linear motion 生成现在经由 emccanon canonical envelope,再经 taskintf envelope issue 到 standalone motion runtime。完整 `emccanon.cc` 仍未 promoted。 ## 2026-07-07 23:51 EDT taskintf 可编译子集验收 ### 验收对象 T-013。 本轮验收目标是证明: - task-HAL WASM build 已纳入 vendored `taskintf_wasm_subset.cc`。 - 该子集有明确上游 source path 和锚点:`src/emc/task/taskintf.cc` 的 traj control、linear move、jog、home、aout 函数族。 - task runtime 的 motion command issuing 已通过该子集生成 command envelope,再转交现有 `lcmot_*` runtime edge。 - 完整 `taskintf.cc` 的 usrmot/NML/INI/native motion process 仍未 promoted,readiness 保持保守。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_taskintf_subset.sh ./tests/wasm/node/verify_task_hal_wasm.sh ``` ### 实际输出摘要 `./tools/verify_task_taskintf_subset.sh`: ```text task_taskintf_subset_upstream=ok task_taskintf_subset_source=ok task_taskintf_subset_header=ok task_taskintf_subset_upstream_emcTrajAbort=ok task_taskintf_subset_origin_emcTrajAbort=ok task_taskintf_subset_upstream_emcTrajPause=ok task_taskintf_subset_origin_emcTrajPause=ok task_taskintf_subset_upstream_emcTrajStep=ok task_taskintf_subset_origin_emcTrajStep=ok task_taskintf_subset_upstream_emcTrajResume=ok task_taskintf_subset_origin_emcTrajResume=ok task_taskintf_subset_upstream_emcTrajLinearMove=ok task_taskintf_subset_origin_emcTrajLinearMove=ok task_taskintf_subset_upstream_emcJogIncr=ok task_taskintf_subset_origin_emcJogIncr=ok task_taskintf_subset_upstream_emcJointHome=ok task_taskintf_subset_origin_emcJointHome=ok task_taskintf_subset_upstream_emcMotionSetAout=ok task_taskintf_subset_origin_emcMotionSetAout=ok task_taskintf_subset_origin_path=ok task_taskintf_subset_build_included=ok task_taskintf_subset_source_reuse=ok ``` `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok mdi_jog_home_motion_issue_from_execute=ok task_waits_on_motion_snapshot_queue=ok motion_abort_drives_task_error=ok io_error_drives_task_error=ok pause_resume_step_motion_issue_from_execute=ok emctask_subset_source_reuse_status=ok taskintf_subset_source_reuse_status=ok ``` ### 结论 T-013 通过。task-HAL WASM build 已编译 vendored `taskintf_wasm_subset.cc`,当前 motion command issuing 经由该子集生成 task-to-motion command envelope,再序列化到 standalone `lcmot_*` runtime edge。完整 `taskintf.cc` 仍未 promoted。 ## 2026-07-07 23:42 EDT emctask 可编译子集验收 ### 验收对象 T-012。 本轮验收目标是证明: - task-HAL WASM build 已纳入 vendored `emctask_wasm_subset.cc`。 - 该子集有明确上游 source path 和锚点:`src/emc/task/emctask.cc` 的 `determineMode()`、`determineState()`、`emcTaskUpdate()`。 - task runtime 在 `wasm_emcTaskUpdate()` 阶段实际调用该子集,并把 source reuse 证据写入 status JSON。 - readiness 仍保持保守 false;该子集不代表完整 `emctask.cc`、interpreter/NML/native process 已迁移完成。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tools/verify_task_emctask_subset.sh ./tests/wasm/node/verify_task_hal_wasm.sh node tests/wasm/node/verify_task_state_matrix.mjs ``` ### 实际输出摘要 `./tools/verify_task_emctask_subset.sh`: ```text task_emctask_subset_upstream=ok task_emctask_subset_source=ok task_emctask_subset_header=ok task_emctask_subset_upstream_determine_mode=ok task_emctask_subset_upstream_determine_state=ok task_emctask_subset_upstream_update=ok task_emctask_subset_origin_path=ok task_emctask_subset_origin_determine_mode=ok task_emctask_subset_origin_determine_state=ok task_emctask_subset_origin_update=ok task_emctask_subset_build_included=ok task_emctask_subset_source_reuse=ok ``` `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok mdi_jog_home_motion_issue_from_execute=ok task_waits_on_motion_snapshot_queue=ok motion_abort_drives_task_error=ok io_error_drives_task_error=ok pause_resume_step_motion_issue_from_execute=ok emctask_subset_source_reuse_status=ok ``` `node tests/wasm/node/verify_task_state_matrix.mjs`: ```text task_state_matrix=ok run_gate_estop_rejected=ok run_gate_estop_reset_rejected=ok run_gate_manual_rejected=ok run_gate_unhomed_rejected=ok run_gate_homing_rejected=ok run_gate_program_open_required=ok run_gate_interpreter_plan_required=ok run_gate_accepts_homed_open_plan=ok task_command_send_queues_until_cycle=ok task_command_json_host_boundary=ok ``` ### 结论 T-012 通过。task-HAL WASM build 已编译 vendored `emctask_wasm_subset.cc`,runtime update 阶段实际调用该子集并在 status JSON 中暴露 source reuse 证据。该子集只覆盖 `emctask.cc` 的状态推导锚点;完整 task 源码迁移和 readiness promotion 仍保持后续任务。 ## 2026-07-07 23:34 EDT JSON command host boundary 验收 ### 验收对象 T-011。 本轮验收目标是证明: - `lctask_send_command_json()` 只解析 host JSON command envelope 并入队内部 `TaskCommand`。 - `wasm_emcTaskPlan()` 直接处理内部 command,不再通过递归调用 C ABI send 函数执行 task 语义。 - 未知 host JSON command 在 C ABI 边界被拒绝,不进入 pending command queue。 - 现有 task/motion/HAL smoke 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh node tests/wasm/node/verify_task_state_matrix.mjs ./tests/native/verify_task_hal_phase0.sh ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok mdi_jog_home_motion_issue_from_execute=ok task_waits_on_motion_snapshot_queue=ok motion_abort_drives_task_error=ok io_error_drives_task_error=ok pause_resume_step_motion_issue_from_execute=ok ``` `node tests/wasm/node/verify_task_state_matrix.mjs`: ```text task_state_matrix=ok run_gate_estop_rejected=ok run_gate_estop_reset_rejected=ok run_gate_manual_rejected=ok run_gate_unhomed_rejected=ok run_gate_homing_rejected=ok run_gate_program_open_required=ok run_gate_interpreter_plan_required=ok run_gate_accepts_homed_open_plan=ok task_command_send_queues_until_cycle=ok task_command_json_host_boundary=ok ``` `./tests/native/verify_task_hal_phase0.sh`: ```text task_hal_phase0_native_probe_gate=ok ``` ### 结论 T-011 通过。host JSON command 已被限制在 C ABI 边界解析,pending command queue 保存内部 `TaskCommand`,plan 阶段不再回调 `lctask_send_command_json()` 执行 task 语义。未知 host command 会被拒绝且不污染 command queue。 ## 2026-07-07 23:10 EDT phase0 native probe 与 pause/resume/step 验收 ### 验收对象 T-016、T-010。 本轮验收目标是证明: - `verify_task_hal_phase0.sh` 不再因为缺失 `xyzac-trt_cmds.hal` 失败。 - 缺失文件来源有明确修复路径:native probe 使用运行目录 overlay,优先引用只读上游 `../linuxcnc`,仅对缺失顶层条目从 `wasm-port/vendor/linuxcnc` 补齐。 - pause/resume/step 不在 command send 时直接 issue motion command,而是在 task cycle 的 execute 阶段发给 motion runtime。 - 现有 task/motion/HAL smoke 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/native/probe_trt_task_hal_runtime.sh ./tests/native/verify_task_hal_phase0.sh ./tests/wasm/node/verify_task_hal_wasm.sh 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 ``` ### 实际输出摘要 `./tests/native/probe_trt_task_hal_runtime.sh`: ```text trt_task_hal_source_proof_ready=1 trt_task_hal_probe_result=ready_disabled_by_default ``` `./tests/native/verify_task_hal_phase0.sh`: ```text task_hal_phase0_native_probe_gate=ok ``` `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok mdi_jog_home_motion_issue_from_execute=ok task_waits_on_motion_snapshot_queue=ok motion_abort_drives_task_error=ok io_error_drives_task_error=ok pause_resume_step_motion_issue_from_execute=ok ``` `node tests/wasm/node/verify_task_state_matrix.mjs`: ```text task_state_matrix=ok run_gate_estop_rejected=ok run_gate_estop_reset_rejected=ok run_gate_manual_rejected=ok run_gate_unhomed_rejected=ok run_gate_homing_rejected=ok run_gate_program_open_required=ok run_gate_interpreter_plan_required=ok run_gate_accepts_homed_open_plan=ok task_command_send_queues_until_cycle=ok ``` `./tests/wasm/node/verify_task_hal_sdk.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_hal_sdk=ok task_hal_sdk_status_snapshot=ok task_hal_feed_timed_motion_plan=ok task_hal_comment_source_line_numbers=ok ``` `./tests/wasm/node/verify_motion_hal_sync.sh`: ```text linuxcnc_task_hal_wasm_build=ok motion_hal_servo_cycle=ok motion_program_line_hal_sync=ok switchkins_type_hal_sync=ok jog_motion_status_sync=ok motion_status_snapshot_struct=ok motion_hal_sync_smoke=ok ``` `./tools/verify_task_hal_source_manifest.sh`: ```text task_hal_source_manifest_status=ok task_hal_source_manifest_ready=1 task_hal_runtime_promoted=0 nativeTaskReady=false nativeHalSyncReady=false ``` ### 结论 T-016、T-010 通过。phase0 native probe 的 `xyzac-trt_cmds.hal` 缺失问题已通过运行目录 overlay 闭合,未修改只读上游 `../linuxcnc`。pause/resume/step 已与 MDI/JOG/HOME 一样进入 execute 阶段 motion issue 队列,并由周期 snapshot 断言证明 send command 本身不直接改变 motion 状态。 ## 2026-07-07 21:32 EDT wait/error subordinate sync 验收 ### 验收对象 T-008、T-009。 本轮验收目标是证明: - `WAITING_FOR_MOTION_QUEUE` 由周期 `motion_snapshot.queue_full` 驱动。 - queueFull 时 task 不继续向 motion runtime issue execute motion command。 - queueFull 解除后 task 由 `WAITING_FOR_MOTION_QUEUE` 回到 `WAITING_FOR_MOTION`。 - motion queue/active depth 清空且 in-position 后,task 由 `WAITING_FOR_MOTION` 收敛到 `DONE`。 - 外部 motion abort/error 通过 subordinate sync 驱动 task `ERROR`。 - IO runtime-edge 注入错误通过 subordinate sync 驱动 task `ERROR`。 - task 自己发起的 abort 保持 cleanup 到 `DONE`,不误报为外部 motion error。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh 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 git diff --check -- wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.h wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp wasm-port/tools/build_task_hal_wasm.sh wasm-port/tests/wasm/node/verify_motion_hal_sync.mjs wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs wasm-port/tests/wasm/node/verify_task_state_matrix.mjs wasm-port/working ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok mdi_jog_home_motion_issue_from_execute=ok task_waits_on_motion_snapshot_queue=ok motion_abort_drives_task_error=ok io_error_drives_task_error=ok ``` `node tests/wasm/node/verify_task_state_matrix.mjs`: ```text task_state_matrix=ok run_gate_estop_rejected=ok run_gate_estop_reset_rejected=ok run_gate_manual_rejected=ok run_gate_unhomed_rejected=ok run_gate_homing_rejected=ok run_gate_program_open_required=ok run_gate_interpreter_plan_required=ok run_gate_accepts_homed_open_plan=ok task_command_send_queues_until_cycle=ok ``` `./tests/wasm/node/verify_task_hal_sdk.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_hal_sdk=ok task_hal_sdk_status_snapshot=ok task_hal_feed_timed_motion_plan=ok task_hal_comment_source_line_numbers=ok ``` `./tests/wasm/node/verify_motion_hal_sync.sh`: ```text linuxcnc_task_hal_wasm_build=ok motion_hal_servo_cycle=ok motion_program_line_hal_sync=ok switchkins_type_hal_sync=ok jog_motion_status_sync=ok motion_status_snapshot_struct=ok motion_hal_sync_smoke=ok ``` `./tools/verify_task_hal_source_manifest.sh`: ```text task_hal_source_manifest_status=ok task_hal_source_manifest_ready=1 task_hal_runtime_promoted=0 nativeTaskReady=false nativeHalSyncReady=false ``` `git diff --check -- ...`:无输出,表示无空白错误。 `./tests/native/verify_task_hal_phase0.sh`:本条为 21:32 时的历史失败记录,23:10 已通过上方 phase0 native probe 验收闭合。 ```text trt_task_hal_source_proof_ready expected 1, got 0 from /home/mes123456/cnc_wams/wasm-port/build/task-hal/probe_trt_task_hal_runtime.stdout.log ``` ### 结论 T-008、T-009 通过。task 的 `WAITING_FOR_MOTION` / `WAITING_FOR_MOTION_QUEUE` 已依赖周期 motion snapshot;queueFull 场景会阻止 execute 阶段继续 issue motion command,并在 motion queue 可用后恢复等待、最终收敛到 `DONE`。外部 motion abort 和 IO shim error 均能通过 subordinate sync 驱动 task `ERROR`,task 自己发起的 abort cleanup 仍保持 `DONE`。 ## 2026-07-07 21:21 EDT task 周期阶段拆分验收 ### 验收对象 T-006、T-023、T-024、T-025。 本轮验收目标是证明: - `lctask_run_cycles()` 已拆成 LinuxCNC `emctaskmain.cc` 式周期阶段。 - command read、plan、execute、motion update、subordinate sync、task update、top-level status、status write 在代码中有明确函数边界。 - state/mode/home/run gate 由 task cycle 消费 command 后触发,不由 send API 直接触发。 - MDI/JOG/HOME 的 motion issue 从 plan command handler 移到 execute 阶段队列。 - 现有 task/motion/HAL smoke 不回退。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./tests/wasm/node/verify_task_hal_wasm.sh 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 ``` ### 实际输出摘要 `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok mdi_jog_home_motion_issue_from_execute=ok ``` `node tests/wasm/node/verify_task_state_matrix.mjs`: ```text task_state_matrix=ok run_gate_estop_rejected=ok run_gate_estop_reset_rejected=ok run_gate_manual_rejected=ok run_gate_unhomed_rejected=ok run_gate_homing_rejected=ok run_gate_program_open_required=ok run_gate_interpreter_plan_required=ok run_gate_accepts_homed_open_plan=ok task_command_send_queues_until_cycle=ok ``` `./tests/wasm/node/verify_task_hal_sdk.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_hal_sdk=ok task_hal_sdk_status_snapshot=ok task_hal_feed_timed_motion_plan=ok task_hal_comment_source_line_numbers=ok ``` `./tests/wasm/node/verify_motion_hal_sync.sh`: ```text linuxcnc_task_hal_wasm_build=ok motion_hal_servo_cycle=ok motion_program_line_hal_sync=ok switchkins_type_hal_sync=ok jog_motion_status_sync=ok motion_status_snapshot_struct=ok motion_hal_sync_smoke=ok ``` ### 结论 T-006、T-023、T-024、T-025 通过。`lctask_run_cycles()` 已形成可继续替换上游源码的周期骨架。MDI/JOG/HOME motion issue 已通过 `pending_execute_motion_commands` 在 `wasm_emcTaskExecute()` 阶段发出。 ## 2026-07-07 21:01 EDT task 周期 motion snapshot 与 status buffer 验收 ### 验收对象 T-002、T-003、T-004、T-005、T-018、T-019、T-020、T-021、T-022、T-026。 本轮验收目标是证明: - 当前 task/motion/HAL 基线已重新固定。 - motion runtime 已提供结构化 `LcmotStatusSnapshot`,task 周期不再解析 motion JSON。 - `lctask_run_cycles()` 会刷新 task 持有的 motion snapshot。 - `lctask_read_status_json()` 只导出最后一次 task status write,不因读取而同步最新 low-level motion。 - `lctask_send_command_json()` 只入队 command;不调用 `runCycles()` 时 task 语义状态不变化。 ### 证据命令 ```bash cd /home/mes123456/cnc_wams/wasm-port ./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 node tests/wasm/node/verify_task_state_matrix.mjs ./tests/native/verify_task_hal_phase0.sh ``` ### 实际输出摘要 `./tools/verify_task_hal_source_manifest.sh`: ```text task_hal_source_manifest_status=ok task_hal_source_manifest_ready=1 task_hal_source_count=20 task_source_count=7 hal_source_count=4 motion_source_count=6 task_hal_reference_source_ready=1 task_hal_vendor_source_ready=0 task_hal_runtime_promoted=0 nativeTaskReady=false nativeHalSyncReady=false ``` `./tests/wasm/node/verify_motion_hal_sync.sh`: ```text linuxcnc_task_hal_wasm_build=ok motion_hal_servo_cycle=ok motion_program_line_hal_sync=ok switchkins_type_hal_sync=ok jog_motion_status_sync=ok motion_status_snapshot_struct=ok motion_hal_sync_smoke=ok ``` `./tests/wasm/node/verify_task_hal_wasm.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_runtime_smoke=ok task_status_from_linuxcnc_runtime=ok task_commands_drive_motion_runtime=ok mdi_jog_task_motion_hal_sync=ok pause_freezes_motion_queue=ok resume_restores_interp_resume_state=ok step_returns_to_paused=ok task_status_updates_from_cycle_snapshot=ok ``` `./tests/wasm/node/verify_task_hal_sdk.sh`: ```text linuxcnc_task_hal_wasm_build=ok linuxcnc_task_hal_sdk=ok task_hal_sdk_status_snapshot=ok task_hal_feed_timed_motion_plan=ok task_hal_comment_source_line_numbers=ok ``` `node tests/wasm/node/verify_task_state_matrix.mjs`: ```text task_state_matrix=ok run_gate_estop_rejected=ok run_gate_estop_reset_rejected=ok run_gate_manual_rejected=ok run_gate_unhomed_rejected=ok run_gate_homing_rejected=ok run_gate_program_open_required=ok run_gate_interpreter_plan_required=ok run_gate_accepts_homed_open_plan=ok task_command_send_queues_until_cycle=ok ``` `./tests/native/verify_task_hal_phase0.sh`:本条为 21:01 时的历史失败记录,23:10 已通过上方 phase0 native probe 验收闭合。 ```text trt_task_hal_source_proof_ready expected 1, got 0 from /home/mes123456/cnc_wams/wasm-port/build/task-hal/probe_trt_task_hal_runtime.stdout.log ``` 对应 stdout log 关键内容: ```text trt_task_hal_missing_source_xyzac_trt_cmds_hal=/home/mes123456/cnc_wams/wasm-port/../linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt_cmds.hal trt_task_hal_source_proof_ready=0 trt_task_hal_runtime_ready=1 nativeTaskReady=false nativeHalSyncReady=false native_probe_status=blocked_missing_source ``` ### 结论 T-002、T-003、T-004、T-005、T-018、T-019、T-020、T-021、T-022、T-026 通过。task status 的 motion 部分已经来自 task 周期写入的结构化 snapshot;low-level motion 单独 step 后,task status 不会自动同步,必须等待下一次 `lctask_run_cycles()`。task command 发送也已改为入队,状态变化必须等待 task cycle 消费 command。 T-016 在 21:01 时仍阻塞;后续 23:10 已通过运行目录 overlay 修复 `xyzac-trt_cmds.hal` 缺失输入并闭合。 ## 2026-07-07 19:45 EDT 上游 task 源码替换分解验收 ### 验收对象 把 `emctask.cc`、`taskintf.cc`、`emccanon.cc` 的具体实施步骤拆解到函数族、shim、验收和任务矩阵。 ### 证据命令 ```bash find wasm-port/working -maxdepth 1 -type f | sort rg -n "T-031|D-007|emctask.cc|taskintf.cc|emccanon.cc|B1|B6" wasm-port/working git diff --check -- wasm-port/working ``` ### 实际输出摘要 `find wasm-port/working -maxdepth 1 -type f | sort`: ```text wasm-port/working/01-项目功能内容.md wasm-port/working/02-项目程序开发详细步骤.md wasm-port/working/03-推进台账.md wasm-port/working/04-任务矩阵.md wasm-port/working/05-验收证据.md wasm-port/working/06-决策记录.md wasm-port/working/07-emctaskmain周期对标蓝图.md wasm-port/working/08-上游task源码替换分解.md wasm-port/working/README.md ``` `rg -n "T-031|D-007|emctask.cc|taskintf.cc|emccanon.cc|B1|B6" wasm-port/working` 命中摘要: ```text wasm-port/working/04-任务矩阵.md: T-031 wasm-port/working/06-决策记录.md: D-007 wasm-port/working/08-上游task源码替换分解.md: emctask.cc wasm-port/working/08-上游task源码替换分解.md: taskintf.cc wasm-port/working/08-上游task源码替换分解.md: emccanon.cc wasm-port/working/08-上游task源码替换分解.md: B1 wasm-port/working/08-上游task源码替换分解.md: B6 ``` `git diff --check -- wasm-port/working`:无输出,表示无空白错误。 ### 结论 T-031 通过。后续源码替换不再只停留在泛泛“引入上游文件”,而是按 `taskintf.cc` minimal bridge、`emctask.cc` state/update/plan、`emccanon.cc` straight/spindle/tool/io 子集逐批实施。 ## 2026-07-07 19:29 EDT 实施文档细化验收 ### 验收对象 继续完善 `wasm-port/working` 实施文档,使其完全对标“把 `emctaskmain.cc` 周期结构迁到 `wasm-port`”这一目标。 ### 证据命令 ```bash find wasm-port/working -maxdepth 1 -type f | sort rg -n "T-017|D-005|emctaskmain 周期对标蓝图|LcmotStatusSnapshot|command read" wasm-port/working git status --short wasm-port/working ``` ### 实际输出摘要 `find wasm-port/working -maxdepth 1 -type f | sort`: ```text wasm-port/working/01-项目功能内容.md wasm-port/working/02-项目程序开发详细步骤.md wasm-port/working/03-推进台账.md wasm-port/working/04-任务矩阵.md wasm-port/working/05-验收证据.md wasm-port/working/06-决策记录.md wasm-port/working/07-emctaskmain周期对标蓝图.md wasm-port/working/README.md ``` `rg -n "T-017|D-005|emctaskmain 周期对标蓝图|LcmotStatusSnapshot|command read" wasm-port/working` 命中摘要: ```text wasm-port/working/04-任务矩阵.md: T-017 wasm-port/working/04-任务矩阵.md: LcmotStatusSnapshot wasm-port/working/06-决策记录.md: D-005 wasm-port/working/07-emctaskmain周期对标蓝图.md: command read ``` `git status --short wasm-port/working`: ```text ?? wasm-port/working/ ``` ### 结论 T-017 通过。实施文档已新增独立周期对标蓝图,并把后续实现拆分到 T-018 到 T-030。后续代码实施应从 T-002 基线证据开始,再进入 snapshot/status buffer/command buffer 周期骨架。 ## 2026-07-07 19:17 EDT 文档创建验收 ### 验收对象 创建 `wasm-port/working` 推进文档,用于后续推进 LinuxCNC `emctaskmain.cc` task 主循环完全对标。 ### 证据命令 ```bash find wasm-port/working -maxdepth 1 -type f | sort git status --short wasm-port/working ``` ### 实际输出摘要 `find wasm-port/working -maxdepth 1 -type f | sort`: ```text wasm-port/working/01-项目功能内容.md wasm-port/working/02-项目程序开发详细步骤.md wasm-port/working/03-推进台账.md wasm-port/working/04-任务矩阵.md wasm-port/working/05-验收证据.md wasm-port/working/06-决策记录.md wasm-port/working/README.md ``` `git status --short wasm-port/working`: ```text ?? wasm-port/working/ ``` ### 结论 T-001 通过。README 和 01-06 号推进文档均已创建;任务矩阵、推进台账、验收证据和决策记录具备初始内容。`git status` 显示 `wasm-port/working/` 为新增未跟踪目录,符合本轮只创建文档的预期。 ### 当前已知基线命令 后续 `T-002` 需要正式运行并记录完整输出: ```bash cd /home/mes123456/cnc_wams/wasm-port ./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 ``` ### 已知结果口径 上一轮分析已确认: - `verify_task_hal_source_manifest.sh` 可通过,但显示 `task_hal_runtime_promoted=0`、`nativeTaskReady=false`、`nativeHalSyncReady=false`。 - `verify_motion_hal_sync.sh` 可通过。 - `verify_task_hal_wasm.sh` 可通过。 - `verify_task_hal_phase0.sh` 当前失败,原因是缺少 `linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt_cmds.hal`。 正式推进时,以每轮重新运行结果为准,不沿用旧输出冒充新证据。 ## 待补证据类型 - 命令输出。 - Node/WASM 测试报告。 - Browser smoke 页面或截图。 - 如后续接入 CI/job 系统,记录 `job_id`。 - 如后续生成对标报告,记录 `report_id` 和报告路径。 - 如后续生成 PDF 或截图,记录文件路径。