#!/usr/bin/env bash # Overnight corpus: every size, smallest first. Self-recovering, load-guarded. set -uo pipefail export PATH="$HOME/.cargo/bin:$PATH" export SDS_IMAGE=lance-blue/sds-runner-report cd "$(dirname "$0")" || exit 1 BOT=/work/target/release/sds-bot LOG=overnight.log say() { echo "[$(date +%H:%M:%S)] $*" | tee -a "$LOG"; } # Wait until the machine can take another phase. Never proceeds blindly. settle() { for _ in $(seq 1 120); do load=$(awk '{print int($1)}' /proc/loadavg) free=$(free -g | awk '/^Mem:/{print $7}') [ "$load" -lt 8 ] && [ "$free" -ge 4 ] && return 0 say "waiting: load $load, ${free}G free" sleep 60 done say "machine never settled; going ahead at low concurrency anyway" } phase() { size=$1; games=$2 say "=== $size: $games games ===" for attempt in 1 2 3; do settle if ./sds.sh bench --suite "suites/$size" --games "$games" --jobs 2 \ --bot "$BOT" --candidates \ --save-baseline "overnight-$size" \ --notes "generated-only, uncapped, ceiling denominator" >>"$LOG" 2>&1; then say "$size finished" return 0 fi say "$size attempt $attempt failed; retrying after a pause" sleep 120 done say "$size failed three times; moving on rather than stopping the night" } say "start: $(uptime)" phase 1v1 180 phase 2v2 180 phase 4v4 150 phase 8v8 120 say "all phases done"