mirror of
https://github.com/ruvnet/RuView
synced 2026-07-30 18:41:42 +00:00
#559: Fix ./verify wrapper The repo moved v1/ -> archive/v1/ but ./verify still pointed at the old paths and failed before reaching the proof script with: FAIL: Reference signal not found at .../v1/data/proof/sample_csi_data.json FAIL: verify.py not found at .../v1/data/proof/verify.py Update PROOF_DIR, V1_SRC, and two diagnostic strings to use archive/v1/. #560: Add platform probe + root-cause evidence Add scripts/probe-fft-platform.py that runs verify.py's hash-relevant scipy.fft.fft / scipy.signal.windows.hamming calls in isolation on a deterministic input (no pydantic Settings stack), so the source of divergence can be located across platforms. Tested on three machines via Tailscale: Windows (Intel AVX-512, numpy 2.4.2 / scipy 1.17.1): first4_psd_floats = [..., 94.40426770856882, ..., 51.677496924642476] sha256 = 78b3fb4acb8cc18c3e870f92e29ee98143c7cac4767f2f71b0fc384a82b92f6e ruvultra (Linux x86_64, numpy 1.26.4 / scipy 1.14.1): first4_psd_floats = [..., 94.40426770856882, ..., 51.677496924642476] sha256 = 41dc56416b6e8346d6457b1e3c9ca5d4b9035f645658e40e2eb668d08efaf9b6 ruv-mac-mini (Apple Silicon arm64/NEON, numpy 2.4.4 / scipy 1.17.1): first4_psd_floats = [..., 94.4042677085688, ..., 51.67749692464246] sha256 = 9b5e192b56d26a486eefe5dff6bb0e05f6223163a4246043fc168002d495efca Win and Linux agree on the first PSD/doppler values but produce different SHA-256s (later FFT bins diverge due to scipy version's pocketfft SIMD path). Mac arm64 differs from x86_64 at ULP precision (~2e-14 at value ~94 = ~1 ULP) on index 1 of the FIRST PSD bins. Root cause: SIMD-vectorized FFT reorders floating-point operations. NEON on Apple Silicon vs AVX2/AVX-512 on x86_64 produce ULP-different results, which a bit-exact SHA-256 cannot tolerate. The verify.py docstring at line 172 ("platform-independent for IEEE 754 compliant systems") is incorrect -- IEEE 754 guarantees per-operation determinism but vectorized FFT reorders ops. This commit ships the diagnostic probe + the #559 path fix only. The verify.py hash function itself (quantize-before-hash to absorb ULP divergence + regeneration of expected_features.sha256 on a canonical CI platform) is a follow-up that affects a published trust-anchor artifact -- left for maintainer decision. Verification: cd <repo> && ./verify # before: FAIL before reaching pipeline (v1/... not found) # after: reaches verify.py and runs the pipeline python3 scripts/probe-fft-platform.py # prints JSON with sha256 + first-few-floats per platform Refs: #559, #560 Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
@@ -19,9 +19,9 @@
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROOF_DIR="${SCRIPT_DIR}/v1/data/proof"
|
||||
PROOF_DIR="${SCRIPT_DIR}/archive/v1/data/proof"
|
||||
VERIFY_PY="${PROOF_DIR}/verify.py"
|
||||
V1_SRC="${SCRIPT_DIR}/v1/src"
|
||||
V1_SRC="${SCRIPT_DIR}/archive/v1/src"
|
||||
|
||||
# Colors (disabled if not a terminal)
|
||||
if [ -t 1 ]; then
|
||||
@@ -136,7 +136,7 @@ echo ""
|
||||
echo -e "${CYAN}[PHASE 3] PRODUCTION CODE INTEGRITY SCAN${RESET}"
|
||||
echo ""
|
||||
echo " Scanning ${V1_SRC} for np.random.rand / np.random.randn calls..."
|
||||
echo " (Excluding v1/src/testing/ -- test helpers are allowed to use random.)"
|
||||
echo " (Excluding archive/v1/src/testing/ -- test helpers are allowed to use random.)"
|
||||
echo ""
|
||||
|
||||
MOCK_FINDINGS=0
|
||||
@@ -204,7 +204,7 @@ elif [ $PIPELINE_EXIT -eq 2 ]; then
|
||||
echo -e " ${YELLOW}${BOLD}RESULT: SKIP${RESET}"
|
||||
echo ""
|
||||
echo " No expected hash file to compare against."
|
||||
echo " Run: python v1/data/proof/verify.py --generate-hash"
|
||||
echo " Run: python archive/v1/data/proof/verify.py --generate-hash"
|
||||
echo ""
|
||||
echo -e "${BOLD}======================================================================${RESET}"
|
||||
exit 2
|
||||
|
||||
Reference in New Issue
Block a user