mirror of
https://github.com/obra/superpowers.git
synced 2026-07-23 10:44:01 +08:00
Codex SDD runs at frontier tiers spin out: subagents inherit the session's model and effort, review seats find real-but-endless defects every round, and the final whole-branch review has no reachable termination state. Field forensics across multiple real sessions traced the mechanism: spawn_agent's fork_turns defaults to "all" (full-context forks that also refuse model overrides), omitted model/effort params inherit the frontier parent, and dispatch rules loaded at session start do not survive context compaction — a compacted controller reverts to inheritance exactly when the session is longest and most expensive. Three coordinated changes: - codex-tools.md: every SDD spawn sets fork_turns "none" plus explicit model/reasoning_effort when the schema supports them (Codex 0.145+), with an inheritance warning for older builds; reviewer tier never exceeds implementer tier and fix rounds never get effort bumps. - task-brief/review-package print a dispatch tuple with their output (review-package grows --role for re-review/final-review), putting the routing values in front of the controller at the moment of dispatch — reprinted every round, so they survive compaction by construction. - SKILL.md: the final-review wave closing is policy, not a verdict — one fix dispatch, one scoped re-review, residuals adjudicated to the ledger; one-off review procedures never become standing; Model Selection defers to platform role tables where one exists. Validated live: a previously spun-out 14-task run (8h, 6 tasks, died mid-loop) re-executed to completion under these changes — bounded fix loops, single-cycle final review, ~20 consecutive correctly-routed dispatches across two compactions. Reviewer-tier matrix (125 cells) showed no calibration cost: clean-diff approvals and planted-defect recall are identical across tiers. Eval scenarios to follow before any upstream submission. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
48 lines
1.6 KiB
Bash
Executable File
48 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Extract one task's full text from an implementation plan into a file the
|
|
# implementer reads in one call, so the task text never has to be pasted
|
|
# through the controller's context.
|
|
#
|
|
# Usage: task-brief PLAN_FILE TASK_NUMBER [OUTFILE]
|
|
# Default OUTFILE: <repo-root>/.superpowers/sdd/<plan-basename>/task-<N>-brief.md
|
|
# (per plan and per worktree; concurrent runs of the SAME plan in the same
|
|
# working tree share it).
|
|
set -euo pipefail
|
|
|
|
if [ $# -lt 2 ] || [ $# -gt 3 ]; then
|
|
echo "usage: task-brief PLAN_FILE TASK_NUMBER [OUTFILE]" >&2
|
|
exit 2
|
|
fi
|
|
|
|
plan=$1
|
|
n=$2
|
|
[ -f "$plan" ] || { echo "no such plan file: $plan" >&2; exit 2; }
|
|
|
|
if [ $# -eq 3 ]; then
|
|
out=$3
|
|
else
|
|
dir=$("$(cd "$(dirname "$0")" && pwd)/sdd-workspace" "$plan")
|
|
out="$dir/task-${n}-brief.md"
|
|
fi
|
|
|
|
awk -v n="$n" '
|
|
/^```/ { infence = !infence }
|
|
!infence && /^#+[ \t]+Task[ \t]+[0-9]+/ {
|
|
intask = ($0 ~ ("^#+[ \t]+Task[ \t]+" n "([^0-9]|$)"))
|
|
}
|
|
intask { print }
|
|
' "$plan" > "$out"
|
|
|
|
if [ ! -s "$out" ]; then
|
|
echo "task ${n} not found in ${plan} (no heading matching 'Task ${n}')" >&2
|
|
exit 3
|
|
fi
|
|
|
|
echo "wrote ${out}: $(wc -l < "$out" | tr -d ' ') lines"
|
|
# The dispatch hint rides this output because the controller reads it
|
|
# immediately before spawning the implementer; skill text loaded at session
|
|
# start does not survive context compaction, but this line reprints per task.
|
|
# Model/effort values are mirrored in using-superpowers/references/codex-tools.md
|
|
# (they track Codex's spawn_agent allowlist) — update both together.
|
|
echo "dispatch (codex spawn_agent): role=implementer fork_turns=none model=gpt-5.6-terra reasoning_effort=high"
|