mandelbrot/BUILD_REPRODUCIBILITY.md

48 lines
2.1 KiB
Markdown
Raw Normal View History

2026-08-22 20:55:27 +09:00
# WASM build reproducibility
v23では、`src/`を監査可能なkernel source、`src/abi.json`を公開ABI、
`toolchain.lock.json`を固定toolchain契約として扱います。
## 互換payloadを展開する
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/extract-wasm.ps1
```
現在配布している8 payloadを`dist/wasm/`へ展開し、byte数とSHA-256を
`manifest.json`へ記録します。COLOR SIMD/scalarがbyte単位で同一ならStandaloneでは
Base64文字列を1本へ自動集約し、異なる場合は各payloadを保持します。どちらの場合もmanifest上の2 ABI名は維持します。
## sourceから再生成する
clang 17.0.6をPATHへ置き、次を実行します。
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-wasm.ps1
```
生成先は`build/wasm-v23/`です。`src/shallow_kernel.c`、
`src/deep_kernel.c`、`src/bla_kernel_v18.c`、`src/color_kernel.c`をそれぞれ
SIMD/scalarでcompileし、timestampを含まないsource manifestを生成します。
配布payloadへ昇格するときだけ`-Promote`を指定します。昇格前に
`tests/kernel-golden.mjs`が、画素中心座標、escape iteration、magnitude、
smooth補正、SIMD/scalar同値性を検査します。golden失敗時はコピーも
`kernels.js`再生成も行いません。
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-wasm.ps1 -Promote
```
## 信頼境界
公式配布物のSHA-256を照合したclang 17.0.6とNode.js v22.18.0を作業領域内で使用し、
復元sourceのcompile、generated-WASM golden、SIMD/scalar同値性、画素中心契約を実行済みです。
golden合格後に8 payloadと`kernels.js`を昇格し、Hosted/Standalone成果物も再生成しました。
実測結果と生成manifestのSHA-256は`audit/v23-source-baseline.json`へ記録しています。
省略なしの再検証は、toolchainをPATHへ追加した状態で次を実行します。
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/test-all.ps1 -RequireToolchain
```