carlos / todomvc-bakeoff Public

Clone
git clone https://amadan.net/carlos/todomvc-bakeoff

Plain git — no account needed to clone.

Download

Download this file

1#!/usr/bin/env bash
2# Runs one builder: a headless Opus 5.5 session in the app's worktree, with
3# a 4-hour limit. Logs go to builders/logs/<slug>.build.jsonl.
4# builders/run-build.sh <slug>
5set -euo pipefail
6slug=$1
7repo=$(cd "$(dirname "$0")/.." && pwd)
8wt="$repo/.worktrees/$slug"
9[ -d "$wt" ] || { echo "no worktree: run builders/worktree.sh $slug" >&2; exit 1; }
10language=$(cd "$repo/harness" && go run ./cmd/language "$slug")
11prompt=$(python3 - "$repo" "$slug" "$language" <<'PY'
12import sys, pathlib
13repo, slug, lang = sys.argv[1:]
14t = pathlib.Path(repo, "builders/prompts/build.md").read_text()
15extra = pathlib.Path(repo, "builders/extra", slug + ".md").read_text().strip()
16print(t.replace("{SLUG}", slug).replace("{LANGUAGE}", lang).replace("{EXTRA}", extra))
17PY
18)
19log="$repo/builders/logs/$slug.build.jsonl"
20cd "$wt"
21set +e
22timeout 4h "$repo/builders/claude.sh" -p "$prompt" > "$log" 2> "$repo/builders/logs/$slug.build.stderr"
23status=$?
24set -e
25python3 -c 'import json,sys; print(json.loads(open(sys.argv[1]).readline())["session_id"])' "$log" > "$repo/builders/logs/$slug.session" || true
26echo "$slug build exited $status (124 means the 4-hour limit)"
27exit $status
28