mirror of
https://github.com/bdbrown4/peltier.io.git
synced 2026-11-07 10:58:28 +00:00
The .agents mirror staged preflight.sh as a new path, so it missed the canonical copy's 755. diff -r compares content, not modes — index modes must match too. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
92 lines
3.9 KiB
Bash
Executable File
92 lines
3.9 KiB
Bash
Executable File
#!/bin/sh
|
|
# peltier preflight — locate the trust layer, check this host can RUN it, and
|
|
# build the real bench-runner.
|
|
#
|
|
# STATUS=ok means the harness is present and runnable here. It does NOT mean
|
|
# this host can measure your change: only the A/A self-test decides that, and
|
|
# it decides it empirically. Do not read STATUS=ok as "calibrated".
|
|
#
|
|
# A refusal (STATUS=refuse, nonzero exit) is a complete, valid outcome. It
|
|
# ends the *claim*, not the work: you may still write and explain a patch, you
|
|
# just may not attach a number to it. Never work around a refusal with a
|
|
# hand-rolled timing loop.
|
|
set -eu
|
|
|
|
say() { printf '%s\n' "$1"; }
|
|
refuse() {
|
|
say "STATUS=refuse"
|
|
say "REASON=$1"
|
|
exit 1
|
|
}
|
|
abspath() { ( CDPATH= cd -- "$1" 2>/dev/null && pwd ); }
|
|
|
|
# --- host -------------------------------------------------------------
|
|
# bench-runner shells every timed run through `sh -c`, and the in-repo
|
|
# pipeline (harnessd, service mode, the sh-based gates) is POSIX-only.
|
|
# Windows compiles the workspace but cannot run it.
|
|
uname_s=$(uname -s 2>/dev/null || echo unknown)
|
|
case "$uname_s" in
|
|
Linux) host=linux ;;
|
|
Darwin) host=darwin ;;
|
|
*) refuse "unsupported host '$uname_s' — peltier's harness is Linux/POSIX-only at runtime. Run it on Linux (or macOS for verify mode). Do not substitute another benchmark." ;;
|
|
esac
|
|
|
|
# --- trust layer ------------------------------------------------------
|
|
is_peltier() { [ -f "$1/crates/bench-runner/Cargo.toml" ] && [ -f "$1/config/accept.toml" ]; }
|
|
|
|
# Walk up from a starting dir looking for a checkout. Absolute POSIX paths
|
|
# always terminate at "/", so this cannot spin.
|
|
walk_up() {
|
|
d=$1
|
|
while [ -n "$d" ] && [ "$d" != "/" ]; do
|
|
if is_peltier "$d"; then printf '%s' "$d"; return 0; fi
|
|
d=$(dirname "$d")
|
|
done
|
|
is_peltier / && printf '/'
|
|
return 0
|
|
}
|
|
|
|
home=""
|
|
if [ -n "${PELTIER_HOME:-}" ]; then
|
|
canon=$(abspath "$PELTIER_HOME" || true)
|
|
[ -n "$canon" ] || refuse "PELTIER_HOME='$PELTIER_HOME' does not exist"
|
|
is_peltier "$canon" || refuse "PELTIER_HOME='$PELTIER_HOME' is not a peltier checkout (no crates/bench-runner/Cargo.toml + config/accept.toml)"
|
|
home=$canon
|
|
else
|
|
# cwd first (working inside a checkout), then this script's own location
|
|
# (the skill still living inside one). A skill copied into another project
|
|
# finds neither — which is why PELTIER_HOME exists.
|
|
home=$(walk_up "$(pwd)")
|
|
[ -n "$home" ] || home=$(walk_up "$(abspath "$(dirname -- "$0")")")
|
|
fi
|
|
[ -n "$home" ] || refuse "no peltier checkout found — clone https://github.com/bdbrown4/peltier.io and set PELTIER_HOME=/path/to/peltier.io. The statistics live in bench-runner; do not reimplement them."
|
|
|
|
command -v cargo >/dev/null 2>&1 || refuse "cargo not on PATH — needed to build bench-runner from $home"
|
|
|
|
# --- build the real harness -------------------------------------------
|
|
# Always build. cargo is a no-op when current, and skipping this because a
|
|
# binary happens to exist would silently measure with a stale copy of the
|
|
# statistics after a `git pull`.
|
|
br="$home/target/release/bench-runner"
|
|
( cd "$home" && cargo build --release -q -p bench-runner ) \
|
|
|| refuse "bench-runner failed to build in $home — fix the build before claiming any number"
|
|
{ [ -f "$br" ] && [ -x "$br" ]; } || refuse "bench-runner did not appear at $br after a successful build"
|
|
|
|
# --- pinning ----------------------------------------------------------
|
|
# NOTE: config/accept.toml's `pin_prefix` is read ONLY by the in-repo verdict
|
|
# pipeline. For compare/aa/calibrate you must wrap the commands yourself
|
|
# (`taskset -c N <cmd>` on both sides). PIN_SUPPORTED just says whether that
|
|
# tool is available here.
|
|
if [ "$host" = linux ] && command -v taskset >/dev/null 2>&1; then
|
|
pin=yes
|
|
else
|
|
pin=no
|
|
fi
|
|
|
|
say "STATUS=ok"
|
|
say "PELTIER_HOME=$home"
|
|
say "BENCH_RUNNER=$br"
|
|
say "HOST=$host"
|
|
say "PIN_SUPPORTED=$pin"
|
|
say "NOTE=harness runnable here; the A/A self-test decides whether it can measure your change"
|