wifi-densepose/scripts/verify-calibration-proof.sh

52 lines
1.9 KiB
Bash

#!/usr/bin/env bash
# verify-calibration-proof.sh — calibration deterministic proof verification (ADR-135)
#
# Builds the calibration_proof_runner Rust binary, computes the canonical SHA-256
# hash of the CalibrationRecorder's output on the synthetic reference signal
# (xorshift32 seed=42, HT20, 600 stationary frames), and compares it against
# the committed expected_calibration_features.sha256.
#
# Usage:
# bash scripts/verify-calibration-proof.sh
#
# Exit codes:
# 0 — VERDICT: PASS (hash matches)
# 1 — VERDICT: FAIL (hash mismatch or build error)
# 2 — BLOCKED (calibration module not yet implemented — placeholder hash detected)
set -euo pipefail
cd "$(git rev-parse --show-toplevel)"
HASH_FILE="archive/v1/data/proof/expected_calibration_features.sha256"
# Check for placeholder — module not yet implemented
if grep -q "PLACEHOLDER_REGENERATE" "$HASH_FILE" 2>/dev/null; then
echo "BLOCKED: calibration proof hash is a placeholder."
echo "The calibration module (ADR-135) is not yet implemented."
echo ""
echo "After the implementation lands, regenerate the hash with:"
echo " cd v2 && cargo run -p wifi-densepose-signal --bin calibration_proof_runner \\"
echo " --release --no-default-features -- --generate-hash \\"
echo " > ../archive/v1/data/proof/expected_calibration_features.sha256"
exit 2
fi
echo "Building calibration_proof_runner..."
cargo build -p wifi-densepose-signal --bin calibration_proof_runner --release --no-default-features \
--manifest-path v2/Cargo.toml
echo "Computing calibration hash..."
ACTUAL="$(./v2/target/release/calibration_proof_runner --generate-hash)"
EXPECTED="$(awk '{print $1; exit}' "$HASH_FILE")"
if [ "$ACTUAL" = "$EXPECTED" ]; then
echo "VERDICT: PASS (calibration hash matches)"
exit 0
else
echo "VERDICT: FAIL"
echo "expected: $EXPECTED"
echo "actual: $ACTUAL"
exit 1
fi