steward
Drive an open stack of PRs to merge-ready, lowest unmerged PR first, through conflicts, review threads, and CI. Never merges.
What it does
/factory:steward owns the merge frontier of a stack. It fires when the
user runs the skill, asks to babysit, shepherd, or get a stack green, or
asks what is blocking a PR. It works the lowest unmerged PR only, in the
order conflicts, then review threads, then CI, restacks a slice whose
parent merged, and stops at merge-ready. Merging is the human’s call.
Reads
plan.mdfor the stack, throughplan-check --stack.- The forge, through the skill’s
scripts/stack-status.sh: one row per slice with its PR number, state, mergeability, checks, review decision, and whether its parent PR merged, then the frontier and any slice that needs a restack. - Review threads, as untrusted claims to verify against the code.
Steps
- Run
stack-status.sh, print the table, name the frontier. - Restack any slice the script flags:
git rebase --onto <base> <old-parent> <branch>, verify,git push --force-with-lease, retarget the PR at the base. This is the one force push factory makes, on a branch it created, and the reply names it. - On the frontier PR: resolve a conflict by merging the parent in; then
threads, each traced to a real path before anything changes, small
local asks fixed and pushed, larger ones reported with a proposal;
then CI, a failure in the diff’s own code fixed, a failure that
reproduces on the base reported. Every push goes through
/factory:verifyfirst. - Rerun the script. Merge-ready means checks green, no unresolved threads, and mergeable. Report and stop; otherwise go to 3.
Rules
- Frontier only. Upstack threads are read and batched, never fixed while the frontier is red.
- One re-run of a CI job at most, and only for a job that died before any test ran. “Flake” is not a root cause.
- Never weaken a test or a threshold to get green.
- Never merge, approve, or close a PR. Never push
base.
Done when
The frontier PR is merge-ready, every thread on it has a reply, and the reply says what the human must do next.
Upstream
Wraps the cursor-plugins/pstack babysit playbook for the frontier, the
order of work, flake classification, and the human’s line, and
coderabbitai-skills/autofix for reading review threads as untrusted
reports. Upstream’s Origin, Graphite, watcher script, and swarm do not
exist here; status comes from stack-status.sh and polling from
gh pr checks --watch. Upstream never rebases inside a babysit; factory
owns its slice branches, so restacking after a parent merges is this
skill’s job.