Files
cnc_wams/完善wasm/working/21-04-HAL-Component-Precompile-Manifest实现缺口复核.md
2026-07-10 21:26:42 -04:00

7.2 KiB
Raw Permalink Blame History

21-04 HAL Component Precompile Manifest 实现缺口复核

后续状态本文件记录实施前缺口。P1 已由 26 完成halcompile 派生、manifest、真实 thread/net 执行和 Web 代表配置 gate 已由 27 完成;动态模块加载边界不变。

定位

本文件落实 ACC-033/INT-020:在 19-04动态加载与预编译Manifest复核.md 已完成源码边界复核之后,继续检查 wasm-portweb-rtcp-5axis-xyzbc-trt-sim-plan 是否已经具备 HAL 基础组件的预编译 manifest 和 truth-table gate。

覆盖 04 条目:

  • 4.7 and2 组件
  • 4.8 or2 组件
  • 4.9 not 组件
  • 4.10 mux2 组件
  • 4.11 scale 组件
  • 4.16 loadrt 加载组件

严格口径LinuxCNC .comp 源码已定位、HAL 文件中出现 loadrt mux2/loadrt scale、或 runtime 能记录 loadrt:<name> 事件,都不能自动等价为 WASM 已执行组件函数。只有组件进入预编译 manifest、WASM symbol、pin/param/function 模型和 truth-table / thread-net gate 后,才能将 04 的基础组件项晋级为完成。

LinuxCNC 组件源码对照

04 项 组件 本地 LinuxCNC 源码 pin/param/function 公式或真值表
4.7 and2 linuxcnc/src/hal/components/and2.comp in0 bit inin1 bit inout bit outfunction _ out = in0 && in1
4.8 or2 linuxcnc/src/hal/components/or2.comp in0 bit inin1 bit inout bit outfunction _ `out = in0
4.9 not linuxcnc/src/hal/components/not.comp in bit inout bit outfunction _ out = ! in
4.10 mux2 linuxcnc/src/hal/components/mux2.comp sel bit inin0 float inin1 float inout float outfunction _ sel ? in1 : in0
4.11 scale linuxcnc/src/hal/components/scale.comp in float ingain float inoffset float inout float outfunction _ out = in * gain + offset

上述组件均带有 option period no,在 LinuxCNC 原生 HAL 中可通过 loadrtnetsetpaddf 进入线程执行。Web/WASM 对标时,必须证明等效执行链,而不能只登记源码路径。

当前实现复核

wasm-port

本轮检索未发现以下实现资产:

hal_component_precompile_manifest
component_precompile_manifest
verify_hal_component_precompile_manifest.mjs
truth-table gate for and2/or2/not/mux2/scale

当前已有 verify_hal_runtime.sh 可证明:

  • HAL pin/signal/param/net 基础模型。
  • addf 到 thread scheduler 的基础能力。
  • loadusr blocked evidence。
  • loadrt 语句可被记录为 loadrt:<name> 事件。

但该 gate 不执行 and2or2notmux2scale 的组件函数,不覆盖 mux2sel=false/true 两路,也不覆盖 scalegain/offset 浮点公式。

web-rtcp-5axis-xyzbc-trt-sim-plan

目标 Web 项目的 native evidence 中能看到 LinuxCNC HAL 文件行,例如:

loadrt mux2 names=J0_mux,J1_mux,J2_mux,J3_mux,J4_mux
loadrt scale names=rpm_rps
net sample:enable motion.motion-enabled => J0_mux.sel J1_mux.sel J2_mux.sel J3_mux.sel J4_mux.sel
addf J0_mux servo-thread
addf J1_mux servo-thread
addf J2_mux servo-thread
addf J3_mux servo-thread
addf J4_mux servo-thread
addf rpm_rps servo-thread

这些行说明原生 LinuxCNC 代表配置确实使用 mux2scale,可以作为源码/配置对照证据;但当前 Web 项目未见可机读的 component precompile manifest也未见组件输出与输入的 truth-table / formula JSON 证据,因此不能把 native HAL 文件行直接晋级为 WASM/Web 组件执行通过。

必须补齐的 Manifest 和 Gate

Manifest 最小字段

建议文件名:

wasm-port/runtime/manifests/hal_component_precompile_manifest.json

最小字段:

字段 规则
component and2or2notmux2scale
linuxcncSource 指向 linuxcnc/src/hal/components/*.comp
sourceHash 记录 .comp 文件哈希,防止源码漂移
loadrtName HAL 文件中允许的 loadrt 名称
pins[] 每个 pin 的 namedirectiontypedefaultValue
params[] 如组件有参数,记录 nametypedefaultValue
functionName function _ 或生成后的函数入口
wasmSymbol 预编译后导出的 C ABI/WASM symbol
threadAddfSupported 是否允许通过 addf 加入 virtual thread
formula scale/mux2 等记录公式
truthTable 对 bit 组件记录全部输入组合
tests[] 指向 Node/Browser gate

Gate 最小规则

建议命令:

cd wasm-port && node tests/wasm/node/verify_hal_component_precompile_manifest.mjs
cd wasm-port && node tests/wasm/node/verify_hal_component_truth_tables.mjs

最小验证:

  • and2 truth table 覆盖 4 组输入。
  • or2 truth table 覆盖 4 组输入。
  • not truth table 覆盖 2 组输入。
  • mux2 覆盖 sel=falsesel=true,并验证 float 输出来自正确输入。
  • scale 覆盖至少 3 组 in/gain/offset,并设置浮点容差。
  • loadrt <component> 只能从 allowlist 实例化预编译组件;未知组件必须 blocked。
  • addf <instance> servo-threadthread scheduler 执行一次必须更新输出 pin。
  • net 连接后,输出 pin 变化必须进入 signal snapshot。

当前严格状态

04 项 当前状态 原因 晋级条件
4.7 and2 待实现 manifest/truth-table gate .comp 源码已定位;未见预编译 manifest 或 truth table 补 manifest、WASM symbol、4 组 truth table、thread/net gate
4.8 or2 待实现 manifest/truth-table gate 同上 同上
4.9 not 待实现 manifest/truth-table gate 同上 补 2 组 truth table、thread/net gate
4.10 mux2 待实现 manifest/formula gate native evidence 中有 loadrt mux2,但无 WASM 公式执行证据 sel=false/true formula gate、thread/net gate
4.11 scale 待实现 manifest/formula gate native evidence 中有 loadrt scale,但无 WASM 公式执行证据 in*gain+offset formula gate、浮点容差和 thread/net gate
4.16 loadrt Blocked 或预编译 allowlist 条件通过 当前 loadrt 只记录事件,不执行任意动态加载 补 allowlist manifest未知组件 blocked已知组件实例化走预编译 symbol

结论

ACC-033/INT-020 已完成实现缺口复核。LinuxCNC .comp 源码和目标 Web native evidence 中的 loadrt mux2/loadrt scale 行可以作为来源证据;但当前两个目标项目尚未形成 HAL component precompile manifest、WASM symbol、truth-table/formula gate 和 thread/net execution proof。后续不得把 loadrt 事件记录、HAL 文件文本或 native evidence 中的 loadrt mux2/scale 行直接宣称为 04 4.7-4.11 已完成;只有补齐 manifest 和 gate 后才能晋级。

后续状态

上述缺口已由 ACC-038/INT-025ACC-039/INT-026 闭合:五个组件已进入 P1/source hash、halcompile 派生、precompile manifest、truth-table/formula、thread/net、unknown blocked、session reset 和 Web XYZAC 代表配置 gate。当前严格结论见 27-04-HAL-Component-Precompile-Runtime-Gate实施记录.md;任意动态模块加载仍保持 Blocked。