186 lines
7.5 KiB
Markdown
186 lines
7.5 KiB
Markdown
# 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` 仍不支持任意动态加载。
|