Files
bullpen/bin/bp
T
Markus Fritsche 8708d93039 add test-driven pipeline (@testdesigner + @py) + fix reviewer #7
@testdesigner (Fable) designs an executable spec; @py (Haiku) grinds until green.
Both are bullpen-lurker@ instances (.model fable / haiku) + dispatcher roster +
bp timeouts + extended invoker allowlist.

First ticket = reviewer finding #7 (_show shell-injection). Fable wrote a sharp
black-box spec (tests/test_show_shell_safe.py) that PROVES the injection by pasting
and executing the suggested command — 6 tests, and it independently caught the
@architect debate-path variant too. Fix: _show now escapes the double-quote-context
metacharacters (backslash, backtick, dollar, quote) so no command substitution or
quote-breakout survives a copy-paste. 6/6 green.

HONEST RESULT: the spec half worked; the GRINDER half did not — @py hit the 20-turn
cap fighting remote-edit-over-sic (no Edit tool, re-running pytest across sic each
cycle). So I closed the bug directly against Fable spec. Lesson: grinders need a
LOCAL workspace (Edit + local pytest) and a higher turn budget, not remote-edit; and
@testdesigner s reply was silently lost (reviewer #2 live). Grinder-harness rework
+ #2 are the follow-ups before @py is real.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWpfhDgYNA21tETDP9ueBE
2026-07-21 07:35:33 +02:00

22 lines
1.1 KiB
Bash
Executable File

#!/bin/sh
# bp — REPL shorthand for the bullpen room. Expands to `room-ask`.
# bp <worker> <task...> ask a worker (@/# prefix optional), block for the reply
# bp --from NICK <worker> <task> set your nick (default: $BP_NICK, else markus)
# bp --timeout N <worker> <task> override the wait (researcher auto-bumps to 200s)
# bp show the roster (@dispatcher)
# Over sic a rich agent calls: sic hertz bp --from noether researcher "..."
FROM="${BP_NICK:-markus}"
TIMEOUT=""
while [ "${1:-}" = "--from" ] || [ "${1:-}" = "--timeout" ]; do
case "$1" in
--from) FROM="$2"; shift 2 ;;
--timeout) TIMEOUT="$2"; shift 2 ;;
esac
done
if [ $# -eq 0 ]; then exec bullpen-dispatcher --roster; fi
WORKER=$(printf '%s' "$1" | sed 's/^[@#]//'); shift
if [ -z "$TIMEOUT" ]; then
case "$WORKER" in researcher) TIMEOUT=200 ;; herder) TIMEOUT=280 ;; testdesigner) TIMEOUT=340 ;; py) TIMEOUT=340 ;; reviewer) TIMEOUT=600 ;; *) TIMEOUT=60 ;; esac
fi
exec room-ask --from "$FROM" --timeout "$TIMEOUT" "@$WORKER" "$*"