8708d93039
@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
22 lines
1.1 KiB
Bash
Executable File
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" "$*"
|