7.5 KiB
26-04 HAL Component P1 源码同步与哈希 Gate 实施记录
定位
本文件落实 ACC-038/INT-025,执行 24-04-HAL-Component-Precompile-Manifest-Truth-Table-Gate落地蓝图.md 的阶段 A:把 and2、or2、not、mux2、scale 五个 LinuxCNC .comp 纳入 wasm-port 的可复现源码抽取,并用锁定 commit、双清单、逐字节比较和固定 SHA-256 建立专项 gate。
本轮只晋级 P1 源码同步,不晋级以下能力:
- LinuxCNC
halcompile派生 C 生成; - HAL component precompile manifest;
- WASM factory/step symbol;
loadrt -> addf -> servo-step真实组件执行;- truth-table/formula、thread/net 或 Web runtime evidence;
- 任意运行时动态模块加载。
LinuxCNC 基线
upstream_commit=60597ee0718873d2449058c824262a275e5e4bad
| 组件 | 上游/P1 相对路径 | 固定 SHA-256 |
|---|---|---|
and2 |
src/hal/components/and2.comp |
29f02d1342bae24d138bbb1387b006b97f592967b8688ccb1c6c0af451cae419 |
or2 |
src/hal/components/or2.comp |
c27663ce45f9562d7a5dc1b542da50ec2cc60802ef591ee729222002083a3c08 |
not |
src/hal/components/not.comp |
9fd9522627db9926d037dc0c116badce7dc880f190c6f8b85c690cbb8b638332 |
mux2 |
src/hal/components/mux2.comp |
b75e3eeb74297d09d13052e812de53a38613ea8287522c371cc2fdaf76be3284 |
scale |
src/hal/components/scale.comp |
d6830d74fd3462c7b7285a9e0b37cbcd2c53d2243007a198e3f19bfed9817f4f |
实施内容
双清单登记
五个路径已同时加入:
wasm-port/tools/source-manifest.txt
wasm-port/tools/task-hal-source-manifest.txt
source-manifest.txt 是 extract_sources.sh 和全量 vendor sync 的输入;task-hal-source-manifest.txt 保留 task/motion/HAL phase0 来源计数。本轮没有把 task-HAL 清单中的其他参考源码自动复制进 vendor。
P1 文件
既有 extract_sources.sh 从只读上游复制得到:
wasm-port/vendor/linuxcnc/src/hal/components/and2.comp
wasm-port/vendor/linuxcnc/src/hal/components/or2.comp
wasm-port/vendor/linuxcnc/src/hal/components/not.comp
wasm-port/vendor/linuxcnc/src/hal/components/mux2.comp
wasm-port/vendor/linuxcnc/src/hal/components/scale.comp
没有修改 /home/mes123456/cnc_wams/linuxcnc。
专项 gate
新增:
wasm-port/tools/verify_hal_component_source_sync.sh
gate 同时检查:
- LinuxCNC HEAD 等于
tools/upstream-baseline.txt; - 五个路径在 source manifest 和 task-HAL manifest 中均恰好可定位;
- 上游文件和 vendored 文件都存在;
- P0 与 P1 逐字节一致;
- P0/P1 SHA-256 都等于锁定值;
- 五项全部完成后才输出
hal_component_source_sync=ok。
固定哈希的目的,是让上游公式、pin 或声明变化显式失败;不能因重新运行抽取脚本而自动接受语义变化。
执行证据
抽取与基线
cd wasm-port
./tools/extract_sources.sh
./tools/verify_upstream_baseline.sh
关键输出:
copied src/hal/components/and2.comp
copied src/hal/components/or2.comp
copied src/hal/components/not.comp
copied src/hal/components/mux2.comp
copied src/hal/components/scale.comp
extraction complete
upstream baseline validation complete
专项源码同步 gate
cd wasm-port
./tools/verify_hal_component_source_sync.sh
实际输出:
hal_component_source=and2 sha256=29f02d1342bae24d138bbb1387b006b97f592967b8688ccb1c6c0af451cae419 vendor_match=1
hal_component_source=or2 sha256=c27663ce45f9562d7a5dc1b542da50ec2cc60802ef591ee729222002083a3c08 vendor_match=1
hal_component_source=not sha256=9fd9522627db9926d037dc0c116badce7dc880f190c6f8b85c690cbb8b638332 vendor_match=1
hal_component_source=mux2 sha256=b75e3eeb74297d09d13052e812de53a38613ea8287522c371cc2fdaf76be3284 vendor_match=1
hal_component_source=scale sha256=d6830d74fd3462c7b7285a9e0b37cbcd2c53d2243007a198e3f19bfed9817f4f vendor_match=1
hal_component_upstream_commit=60597ee0718873d2449058c824262a275e5e4bad
hal_component_source_count=5
hal_component_source_sync=ok
task-HAL 参考清单
cd wasm-port
./tools/verify_task_hal_source_manifest.sh
关键输出:
task_hal_source_manifest_status=ok
task_hal_source_manifest_ready=1
task_hal_source_count=25
hal_source_count=9
task_hal_reference_source_ready=1
task_hal_vendor_source_ready=0
task_hal_vendor_hash_match_ready=1
task_hal_runtime_promoted=0
nativeHalSyncReady=false
task_hal_vendor_source_ready=0 是预期保守状态:该 phase0 清单中的 task、motion、hal_lib.c、threads.c 等 15 个参考文件仍未全部进入 vendor。本轮只闭合五个基础组件,不能借此把整个 task-HAL 来源或 runtime 晋级。
全量 Vendor Gate 与 Generated Overlay 分层
本轮执行 ./tools/verify_vendor_sync.sh 时,实际失败为:
vendor files not listed in manifest:
configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt_cmds.hal
该文件不是本轮生成;它是前序 ACC-034 为 native TRT phase0 probe 恢复的 vendor fallback,来源为目标 Web app dist,锁定 LinuxCNC commit 中没有同名上游文件。按照“不回退既有改动”和 D-013 overlay 决策,本轮没有删除或伪装其上游来源。
首次失败后的临时结论分为两层:
- 五个 HAL component 的专项 P1 source sync/hash gate 已通过;
- 全量 vendor tree gate 当时被既有非上游 fallback 阻塞,尚不能记录为通过。
本轮随后新增 tools/vendor-overlay-manifest.tsv,只登记该路径、固定 SHA-256 d12f6c...a4ab3 和 basic_sim.tcl 生成 provenance;verify_vendor_sync.sh 同时验证严格上游清单与独立 overlay 清单,并拒绝未登记额外文件、路径重叠、重复条目、无效 hash/provenance 和 hash 漂移。重跑输出:
vendor generated overlay validation complete: 1
vendor sync validation complete
因此最终结论分为两层:五个 HAL component 的专项 P1 gate 通过,全量 vendor/overlay gate 也通过;但 xyzac-trt_cmds.hal 仍明确是生成 overlay,不得描述为锁定 commit 内的上游文件。
04 状态
| 04 项 | 本轮后状态 | 尚缺 |
|---|---|---|
4.7 and2 |
P1 源码同步完成,执行 gate 待补 | halcompile 生成、manifest、WASM symbol、truth table、thread/net |
4.8 or2 |
P1 源码同步完成,执行 gate 待补 | halcompile 生成、manifest、WASM symbol、truth table、thread/net |
4.9 not |
P1 源码同步完成,执行 gate 待补 | halcompile 生成、manifest、WASM symbol、truth table、thread/net |
4.10 mux2 |
P1 源码同步完成,执行 gate 待补 | names=、代表配置、WASM execution、thread/net |
4.11 scale |
P1 源码同步完成,执行 gate 待补 | formula/容差、rpm_rps、WASM execution、thread/net |
4.16 loadrt |
仍为预编译 allowlist 条件通过/动态加载 Blocked | factory、未知组件 blocked、真实 step 输出 |
下一步
- 按
24阶段 B 定位锁定基线可执行halcompile,生成可复现 C 和 generation report。 - 完成 precompile manifest、真实
loadrt/addf/servo-step、truth-table/formula 和 thread/net gate。 - 目标 Web 项目只消费同一 WASM runtime 的组件 evidence,不另写组件公式。
结论
ACC-038/INT-025 已将五个基础 HAL component 从 P0 推进到专项 gate 保护的 P1。此结果证明源码来源、commit、双清单、字节和哈希一致,不证明组件已编译或执行。04 的 4.7-4.11 仍不能标为功能完成,4.16 仍不支持任意动态加载。