# 22-04 Full-Process Realtime Runtime Proof 实现缺口复核 ## 定位 本文件落实 `ACC-034/INT-021`:在 `14-04-125项逐项源码证据绑定表.md` 已把 full-process / realtime 缺口集中列出之后,继续复核 `wasm-port` 和 `web-rtcp-5axis-xyzbc-trt-sim-plan` 是否已经具备可机读的 task/motion/HAL 运行时 proof,以及哪些边界仍必须保持条件通过或 Blocked。 覆盖 04 条目: - `2.1-2.12 Task` - `3.1-3.11 Motion` - `4.12 servo-thread 调度` - `8.4-8.10 五轴联动与 RTCP 代表运行` - 与 full-process 相关的 Tool DB、User-M、硬件、实时内核、原生 LinuxCNC process topology 严格口径:Web/WASM 可以晋级为 `linuxcnc_task_motion_hal_wasm_simulation_runtime`,但这不等于已经运行 LinuxCNC 原生实时内核、真实硬件驱动、任意宿主 User-M 外部进程或完整 native NML/process topology。只要 `hostRealtimeKernel=false`、`hardwareDrive=false`、`hostExternalUserMProcessReady=false` 或 `hostToolDbProcessReady=false`,这些宿主/硬件边界仍不得改写为无条件完成。 ## LinuxCNC 源码对照 | 功能域 | LinuxCNC 源码或资产 | 对标含义 | | --- | --- | --- | | Task 状态机 | `linuxcnc/src/emc/task/emctaskmain.cc`、`taskintf.cc`、`emctask.cc` | 程序加载、run/pause/resume/step/abort、task state/mode/interp state | | Motion/servo | `linuxcnc/src/emc/motion/control.c`、`command.c`、`motion.c` | motion command、servo cycle、joint/axis 状态、pause/abort/queue | | TP/TC | `linuxcnc/src/emc/tp/tp.c`、`tc.c` | 轨迹队列、速度规划、暂停继续和采样 | | HAL thread | `linuxcnc/src/hal/hal_lib.c`、`hal_priv.h`、`components/threads.c` | pin/signal/param、thread/addf/call 执行边界 | | 五轴配置 | `linuxcnc/configs/sim/axis/vismach/5axis/*` | `xyzbc-trt`/`xyzac-trt`/switchkins 代表机床文件 | ## 当前实现复核 ### `wasm-port` 当前可见实现资产: | 资产 | 作用 | | --- | --- | | `runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp` | 导出 `lctask_*` C ABI,组合 task subset、motion runtime、HAL runtime、状态 JSON | | `runtime/core/linuxcnc_task_subset/emctask_wasm_subset.cc` | 对 `emcTaskAbort`、`emcTaskSetMode`、`emcTaskSetState`、`emcTaskPlan*` 等上游 task 关键语义做子集映射 | | `runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c` | 运动状态、servo step、motion ready JSON | | `runtime/core/linuxcnc_wrap/linuxcnc_hal_runtime.cpp` | virtual HAL pin/signal/param/net/thread/addf/call 运行时 | | `runtime/sdk/src/linuxcnc-task-hal.js` | JS SDK 只负责加载 WASM、传 JSON、读取 status/events,不实现 CNC 语义 | | `tests/wasm/node/verify_task_hal_wasm.sh` | task/HAL WASM 运行时 smoke | | `tests/wasm/node/verify_hal_runtime.sh` | HAL registry、net propagation、thread scheduler、blocked user edge | 当前严格判断: - 可作为 Web/WASM 仿真运行时 proof:`lctask_*` C ABI、task/motion/HAL readiness、status JSON、HAL thread scheduler、Web 项目的 task/HAL store 集成。 - 不可作为宿主实时 proof:浏览器或 Node 中的周期循环不是 LinuxCNC realtime kernel;`servoCycle`、`taskCycle` 只能作为仿真周期证据。 - 不可作为完整 native process topology proof:当前未声明原生 NML 多进程、rtapi_app、halcmd 动态模块加载和硬件驱动全链路已在浏览器复现。 ### `web-rtcp-5axis-xyzbc-trt-sim-plan` 当前可见实现资产: | 资产 | 作用 | | --- | --- | | `app/src/runtime/full-execution-boundary.js` | 汇总 kinematics、interpreter、planner、machine-file remap、task/HAL、Tool DB、User-M readiness,并输出晋级/阻塞字段 | | `app/src/runtime/linuxcnc-task-hal-runtime.js` | 包装 `wasm-port` task/HAL SDK,归一化 task/motion/HAL status 到 Web store | | `tests/node/verify_full_execution_boundary.mjs` | 验证 blocked、canonical、machine-file remap、task/HAL promoted 等阶段边界 | | `tests/node/verify_linuxcnc_task_hal_runtime.mjs` | 验证真实 profile、machine file staging、task/HAL run、MDI switchkins、JOG、PAUSE、STOP | | `tests/node/verify_native_task_hal_audit.mjs` | 生成 `build/readiness/native-task-hal-readiness.json`,锁定 Web simulation promotion 与宿主硬件/实时边界 | | `tests/browser/gmoccapy_shell_smoke.html` | 浏览器层检查 full execution boundary、task/HAL runtime readiness、host realtime false 等 UI 字段 | `full-execution-boundary.js` 的晋级字段可用于判定: ```text semanticBoundary = linuxcnc_task_motion_hal_wasm_simulation_runtime fullLinuxCncProgramExecutionReady = true promotionAllowed = true hardwareDrive = false hostRealtimeKernel = false hostExternalUserMProcessReady = false hostToolDbProcessReady = false arbitraryUserMExecution = false ``` 上述组合的含义是:Web/WASM 仿真运行时可晋级,但宿主实时/硬件/任意外部进程边界仍被显式关闭。 ## 必须保持的降级禁止规则 | 风险 | 禁止做法 | 正确状态 | | --- | --- | --- | | full-process 降级 | 用普通解释器 canonical events 代替 task/motion/HAL runtime proof | 只能到 canonical boundary,不能 full execution ready | | 实时内核误报 | 把 `servoCycle`/Web Worker/Node loop 写成 Linux realtime kernel | `hostRealtimeKernel=false`,条件通过 | | 硬件误报 | 把 virtual HAL 或 UI 状态写成真实硬件驱动 | `hardwareDrive=false`,Blocked/非目标 | | 外部进程误报 | 把 Web simulation Tool DB/User-M 写成宿主任意外部进程 | `hostExternalUserMProcessReady=false`、`hostToolDbProcessReady=false` | | UI 伪通过 | 只看按钮/截图,不检查 task/motion/HAL status JSON | 不得晋级 | | profile 继承 | 用 `xyzbc-trt` 一套证据宣称所有五轴 profile 完成 | 只能按 profile 逐项晋级 | ## 当前严格状态 | 04 范围 | 当前状态 | 原因 | 晋级或保持条件 | | --- | --- | --- | --- | | Task run/pause/resume/step/abort | 条件通过到 Web/WASM task runtime | 已有 `lctask_*`、task state/status 和 Web store gate | 继续跑 `verify_task_hal_wasm.sh`、`verify_linuxcnc_task_hal_runtime.mjs`、browser full boundary gate | | Motion/TP runtime | 条件通过到 Web/WASM 仿真 runtime | 已有 motion runtime、TP gate、task/HAL status 和 sample proof | 不得宣称真实硬件 servo;需保留 planner/runtime gate | | HAL servo-thread 调度 | 条件通过到 virtual HAL thread | `verify_hal_runtime.sh` 覆盖 thread/addf/call;但不是 Linux realtime kernel | `hostRealtimeKernel=false` 必须保留 | | Full LinuxCNC Web 仿真执行 | 可按 `linuxcnc_task_motion_hal_wasm_simulation_runtime` 晋级 | `full-execution-boundary` 汇总 task/motion/HAL、Tool DB、User-M Web simulation readiness | 仅限 Web/WASM simulation boundary | | 完整 native process topology | Blocked/非目标 | 浏览器未运行 LinuxCNC 原生 NML 多进程和 rtapi/halcmd 动态拓扑 | 不得从 Web smoke 自动晋级 | | 硬件驱动 | Blocked/非目标 | 项目目标明确为全软件仿真 | 保持 `hardwareDrive=false` | | 宿主实时内核 | 条件通过/Blocked | Web/Node 不具备 LinuxCNC realtime kernel | 保持 `hostRealtimeKernel=false` | | 任意宿主 User-M/Tool DB 外部进程 | Blocked | 当前仅有 controlled Web simulation boundary | 保持 host process false,除非新增 opt-in native gate | ## 后续专项 Gate 建议把以下命令作为 full-process/realtime proof 的最小复验包: ```bash cd wasm-port && ./tests/wasm/node/verify_task_hal_wasm.sh cd wasm-port && ./tests/wasm/node/verify_hal_runtime.sh node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_full_execution_boundary.mjs node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_native_task_hal_audit.mjs npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:node npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run smoke:browser ``` 通过标准: - `full_execution_boundary_smoke=ok`。 - `linuxcnc_task_hal_runtime_smoke=ok`、`task_hal_machine_file_smoke=ok`、`switchkins_remap_hal_sync_smoke=ok`。 - `native_task_hal_source_artifact_audit=ok`。 - readiness artifact 中 `promotion_scope=web_simulation_only`。 - `hardware_drive=0`、`host_realtime_kernel=0`、`host_external_user_m_process_ready=0`、`host_tool_db_process_ready=0`。 - 浏览器 full boundary 页面必须渲染 task/HAL readiness,并保持 host realtime false。 ## 结论 `ACC-034/INT-021` 已完成实现缺口复核。当前两个目标项目已经具备 Web/WASM task-motion-HAL 仿真运行时 proof 的关键实现和 gate;但这只能支撑 `linuxcnc_task_motion_hal_wasm_simulation_runtime` 这个边界,不能把 04 中涉及实时内核、硬件驱动、完整 native process topology、任意宿主 User-M/Tool DB 外部进程的内容晋级为无条件完成。后续文档和验收必须同时记录 promotion 和保留的 host/hardware/realtime false 字段。