#!/usr/bin/env bash # M-INTEROCEPTION P3 gate: drift-sensor primitive engram_geo_displacement. # Read-only pure primitive; no store, no flag. Throwaway /tmp only. set -u HERE="$(cd "$(dirname "$0")" && pwd)" RT="$HERE/../../lang/runtime/el_runtime.c" ST="$HERE/../../lang/runtime/engram_store.c" GEO="$HERE/../../lang/runtime/engram_geometry.c" VIDX="$HERE/../../lang/runtime/engram_vindex.c" INC="$HERE/../../lang/runtime" WORK="$(mktemp -d /tmp/engram-p3-XXXXXX)" export HOME="$WORK/home"; mkdir -p "$HOME" fail=0 echo "== compile ==" gcc -O1 -std=c11 -I "$INC" "$HERE/test_interoception_p3_drift.c" "$RT" "$ST" "$GEO" "$VIDX" \ -lcurl -lm -o "$WORK/p3" 2>"$WORK/cc.log" || { echo "COMPILE FAILED"; cat "$WORK/cc.log"; rm -rf "$WORK"; exit 1; } "$WORK/p3" > "$WORK/out.txt" 2>&1 || { echo "FAIL run"; cat "$WORK/out.txt"; fail=1; } cat "$WORK/out.txt" | sed 's/^/ /' echo echo "== assertions ==" python3 - "$WORK/out.txt" <<'PY' import sys,re rows={} for line in open(sys.argv[1]): m=re.match(r'(\w+) (.*)',line.strip()) if not m: continue tag=m.group(1); kv=dict(re.findall(r'(\w+)=([-\d.]+)',m.group(2))) rows[tag]={k:float(v) for k,v in kv.items()} rc=0 def check(c,msg): global rc; print((" PASS: " if c else " FAIL: ")+msg) if not c: rc=1 g=rows["GROWTH"]; c=rows["CORRUPTION"]; i=rows["IDENTITY"] check(g["core_disp"]<0.05, f"GROWTH: core displacement ~0 (core fixed) = {g['core_disp']}") check(g["periph_disp"]>0.30, f"GROWTH: periphery extended = {g['periph_disp']}") check(g["centroid_sep"]<1e-6, f"GROWTH: centroid unmoved = {g['centroid_sep']}") check(abs(g["radius_delta"]-0.4)<1e-4, f"GROWTH: radius grew by ~0.4 = {g['radius_delta']}") check(c["core_disp"]>0.40, f"CORRUPTION: core displaced strongly = {c['core_disp']}") check(c["periph_disp"]<0.05, f"CORRUPTION: periphery fixed = {c['periph_disp']}") check(c["centroid_sep"]>0.1, f"CORRUPTION: centroid moved = {c['centroid_sep']}") check(c["core_disp"] > 8*g["core_disp"]+0.3, f"SENSOR DISCRIMINATES: corruption core_disp ({c['core_disp']}) >> growth core_disp ({g['core_disp']})") check(i["core_disp"]==0 and i["periph_disp"]==0 and i["centroid_sep"]<1e-6, "IDENTITY: A vs A -> zero drift") sys.exit(rc) PY [ $? -ne 0 ] && fail=1 echo echo "== ASan+UBSan ==" gcc -O1 -g -std=c11 -fsanitize=address,undefined -fno-sanitize-recover=undefined \ -I "$INC" "$HERE/test_interoception_p3_drift.c" "$RT" "$ST" "$GEO" "$VIDX" \ -lcurl -lm -o "$WORK/p3.san" 2>"$WORK/san_cc.log" || { echo "SAN COMPILE FAILED"; tail -25 "$WORK/san_cc.log"; fail=1; } if [ -x "$WORK/p3.san" ]; then export ASAN_OPTIONS=detect_leaks=0 "$WORK/p3.san" >/dev/null 2>"$WORK/san.log" if grep -qiE 'runtime error|AddressSanitizer|Sanitizer|ERROR: ' "$WORK/san.log"; then echo " FAIL: sanitizer findings:"; grep -iE 'runtime error|Sanitizer|ERROR' "$WORK/san.log" | head; fail=1 else echo " ok: ASan+UBSan clean"; fi fi echo if [ "$fail" -eq 0 ]; then echo "====== P3 DRIFT-SENSOR GATE: PASS ======"; else echo "====== P3 DRIFT-SENSOR GATE: FAIL ======"; fi rm -rf "$WORK" exit $fail