Files
cnc_wams/完善wasm/working/26-04-HAL-Component-P1源码同步与哈希Gate实施记录.md
2026-07-10 21:26:42 -04:00

186 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 基线
```text
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` |
## 实施内容
### 双清单登记
五个路径已同时加入:
```text
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` 从只读上游复制得到:
```text
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
新增:
```text
wasm-port/tools/verify_hal_component_source_sync.sh
```
gate 同时检查:
1. LinuxCNC HEAD 等于 `tools/upstream-baseline.txt`
2. 五个路径在 source manifest 和 task-HAL manifest 中均恰好可定位;
3. 上游文件和 vendored 文件都存在;
4. P0 与 P1 逐字节一致;
5. P0/P1 SHA-256 都等于锁定值;
6. 五项全部完成后才输出 `hal_component_source_sync=ok`
固定哈希的目的是让上游公式、pin 或声明变化显式失败;不能因重新运行抽取脚本而自动接受语义变化。
## 执行证据
### 抽取与基线
```bash
cd wasm-port
./tools/extract_sources.sh
./tools/verify_upstream_baseline.sh
```
关键输出:
```text
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
```bash
cd wasm-port
./tools/verify_hal_component_source_sync.sh
```
实际输出:
```text
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 参考清单
```bash
cd wasm-port
./tools/verify_task_hal_source_manifest.sh
```
关键输出:
```text
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` 时,实际失败为:
```text
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 漂移。重跑输出:
```text
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 输出 |
## 下一步
1.`24` 阶段 B 定位锁定基线可执行 `halcompile`,生成可复现 C 和 generation report。
2. 完成 precompile manifest、真实 `loadrt/addf/servo-step`、truth-table/formula 和 thread/net gate。
3. 目标 Web 项目只消费同一 WASM runtime 的组件 evidence不另写组件公式。
## 结论
`ACC-038/INT-025` 已将五个基础 HAL component 从 P0 推进到专项 gate 保护的 P1。此结果证明源码来源、commit、双清单、字节和哈希一致不证明组件已编译或执行。04 的 `4.7-4.11` 仍不能标为功能完成,`4.16` 仍不支持任意动态加载。