update autoresearch.sh: 3-run best-of, skip liquid-spec for speed

This commit is contained in:
Tobi Lutke
2026-04-04 17:42:32 -07:00
committed by Chris Pak
parent 1032d57532
commit 92ca381fb1
+31 -35
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Autoresearch benchmark runner for Liquid performance optimization # Autoresearch benchmark runner for Liquid performance optimization
# Runs: unit tests → liquid-spec → performance benchmark # Runs: unit tests → performance benchmark (3 runs, takes best)
# Outputs METRIC lines for the agent to parse # Outputs METRIC lines for the agent to parse
# Exit code 0 = all good, non-zero = broken # Exit code 0 = all good, non-zero = broken
set -euo pipefail set -euo pipefail
@@ -9,45 +9,41 @@ cd "$(dirname "$0")/.."
# ── Step 1: Unit tests (fast gate) ────────────────────────────────── # ── Step 1: Unit tests (fast gate) ──────────────────────────────────
echo "=== Unit Tests ===" echo "=== Unit Tests ==="
if ! bundle exec rake base_test 2>&1; then TEST_OUT=$(bundle exec rake base_test 2>&1)
TEST_RESULT=$(echo "$TEST_OUT" | tail -1)
if echo "$TEST_OUT" | grep -q 'failures\|errors' && ! echo "$TEST_RESULT" | grep -q '0 failures, 0 errors'; then
echo "$TEST_OUT" | grep -E 'Failure|Error|failures|errors' | head -20
echo "FATAL: unit tests failed" echo "FATAL: unit tests failed"
exit 1 exit 1
fi fi
echo "$TEST_RESULT"
# ── Step 2: liquid-spec (correctness gate) ────────────────────────── # ── Step 2: Performance benchmark (3 runs, take best) ──────────────
echo "" echo ""
echo "=== Liquid Spec ===" echo "=== Performance Benchmark (3 runs) ==="
SPEC_OUTPUT=$(bundle exec liquid-spec run spec/ruby_liquid.rb 2>&1 || true) BEST_COMBINED=999999
echo "$SPEC_OUTPUT" | tail -3 BEST_PARSE=0
BEST_RENDER=0
BEST_ALLOC=0
# Extract failure count from "Total: N passed, N failed, N errors" line for i in 1 2 3; do
# Allow known pre-existing failures (≤2) OUT=$(bundle exec ruby performance/bench_quick.rb 2>&1)
TOTAL_LINE=$(echo "$SPEC_OUTPUT" | grep "^Total:" || echo "Total: 0 passed, 0 failed, 0 errors") P=$(echo "$OUT" | grep '^parse_us=' | cut -d= -f2)
FAILURES=$(echo "$TOTAL_LINE" | sed -n 's/.*\([0-9][0-9]*\) failed.*/\1/p') R=$(echo "$OUT" | grep '^render_us=' | cut -d= -f2)
ERRORS=$(echo "$TOTAL_LINE" | sed -n 's/.*\([0-9][0-9]*\) error.*/\1/p') C=$(echo "$OUT" | grep '^combined_us=' | cut -d= -f2)
FAILURES=${FAILURES:-0} A=$(echo "$OUT" | grep '^allocations=' | cut -d= -f2)
ERRORS=${ERRORS:-0} echo " run $i: combined=${C}µs (parse=${P} render=${R}) allocs=${A}"
TOTAL_BAD=$((FAILURES + ERRORS)) if [ "$C" -lt "$BEST_COMBINED" ]; then
BEST_COMBINED=$C
if [ "$TOTAL_BAD" -gt 2 ]; then BEST_PARSE=$P
echo "FATAL: liquid-spec has $FAILURES failures and $ERRORS errors (threshold: 2)" BEST_RENDER=$R
exit 1 BEST_ALLOC=$A
fi fi
done
# ── Step 3: Performance benchmark ──────────────────────────────────
echo ""
echo "=== Performance Benchmark ==="
BENCH_OUTPUT=$(bundle exec ruby performance/bench_quick.rb 2>&1)
echo "$BENCH_OUTPUT"
# Parse results and output METRIC lines
PARSE_US=$(echo "$BENCH_OUTPUT" | grep '^parse_us=' | cut -d= -f2)
RENDER_US=$(echo "$BENCH_OUTPUT" | grep '^render_us=' | cut -d= -f2)
COMBINED_US=$(echo "$BENCH_OUTPUT" | grep '^combined_us=' | cut -d= -f2)
ALLOCATIONS=$(echo "$BENCH_OUTPUT" | grep '^allocations=' | cut -d= -f2)
echo "" echo ""
echo "METRIC combined_us=$COMBINED_US" echo "RESULTS"
echo "METRIC parse_us=$PARSE_US" echo "parse_us=$BEST_PARSE"
echo "METRIC render_us=$RENDER_US" echo "render_us=$BEST_RENDER"
echo "METRIC allocations=$ALLOCATIONS" echo "combined_us=$BEST_COMBINED"
echo "allocations=$BEST_ALLOC"