Repository navigation
Releases
Releases · nicoleman0/switchyard
v0.10.0
Added
- #138: Install asks whether to include OpenSpec. Use
--no-openspecfor plain plans; later updates keep that mode. - #82: Projects without
openspec/use a plain plan with scenarios and tasks. Roles and review checks support both modes. - #134:
merge-queue.pyrestacks each child after its parent merges, before the parent's teardown, and refuses a child queued ahead of its parent. It waits up to 60 seconds for a lagging PR head after a push. - #124:
state.py timingssplits each phase into busy and wait time. The coordinator marks turns withstate.py turn-endandturn-start. - #119: Opt-in stacked issues branch from a reviewed parent, restack after it merges, and block parent teardown while children depend on it.
- #123:
wait-agents.sh --timeout <seconds>returns when watched agents run past the limit, listing each with how long it has worked. - #121:
merge-queue.py <issue>...rebases, checks, pushes, and waits for CI on each passing PR in order, then prints the merge command, or merges with--merge.union-resolve.pymerges a CHANGELOG's Unreleased subsections instead of repeating their headings. - #120: Best-of-N, opt-in per issue. Two implementers on different providers build the same reviewed change, the reviewer keeps one, and the other is abandoned. Hooks get a
CANDIDATEvariable.
Changed
- #130: Docs match the small-issue fast path and resumed fix rounds again:
README.mdstops saying the planner always stops at a plan and that you are asked at exactly three points,roles/implementer.mdnames the fast path in line 1, andSKILL.mdno longer says every phase starts fresh. - #113: The maintainer can pre-approve a batch's merges by naming the condition in the coordinator conversation. The approval covers that batch only and can be withdrawn. With a repo that allows auto-merge,
gh pr merge --squash --automerges each PR when its CI finishes. - #115: Only blockers (an unmet scenario or task, a failed check, a scope breach, a security or data-loss problem) request changes. The coordinator may fix notes and small findings itself, up to about 10 lines.
- #116: A
smallissue is planned and implemented in one session. It stops for a plan review only when it has questions. - #117:
pre-review.shruns the checks, the scope check, and OpenSpec validation before a reviewer starts. Projects put their checks inswitchyard/hooks/checks.sh. - #122:
switchyard/lessons.mdcarries traps from one batch to the next. The updater adds it when missing and never changes it. - #114: Fix rounds resume the implementer session that built the change. On Herdr the reviewer runs in a split pane beside it. Existing projects should change Codex's Later turns in
switchyard/routing.mdtocodex exec resume <session> <flags> "<prompt>". - #79:
state.py timingsreports time per phase, provider, and model, with review rounds and the verdict. Teardown keeps a summary in.switchyard/history.jsonl. - #118: Open maintainer questions wait in one queue,
.switchyard/questions.md, so the coordinator goes on with other issues meanwhile.state.py statusshows an issue with open questions as waiting.
v0.9.1
Changed
- #104: CI tests the scripts on Python 3.10 and the newest Python 3. The README names 3.10 as the oldest supported Python.
Fixed
v0.9.0
Added
- #91:
npm init switchyard@latest updateupdates a repo from the releases bundled in the npm package. Install in a repo that already has Switchyard now names this command. - #92:
update-switchyard.py --dry-runprints the update report without writing files. - #93: The updater prints release notes for each release it moves across.
- #94: Preflight warns when a project is behind the newest Switchyard release.
- #95: The updater ends by printing the commands that undo that run.
v0.8.0
Added
- #74:
npx create-switchyardadds Switchyard to an existing repo without cloning this one. - #78: The coordinator sizes each issue
small,medium, orlarge, and a Workers row can name a size in its Use cell to get its own model and effort. A row with no size serves every size without its own row. A Use cell ofescalationnow counts aslargeand the separate escalation step is gone, so an olderrouting.mdmay run itsescalationrow more often. To opt out, delete that row and name the model in the session. A file with no sized rows works as before.
Fixed
v0.7.2
Changed
- #64: Roles now cover changes with
skip_specs: true.
v0.7.1
Removed
- The updater no longer migrates 0.6.0 and older projects, and refuses a base release from before the
switchyard/layout. Update those to 0.7.0 first. The.claude/skills/work-issues/update-paths.txtguard for old updaters is gone; a project can delete its copy.
v0.7.0
Added
- The review lists up to five places a human should read first, and the coordinator puts that list at the top of the PR body.
Changed
- Moved the provider-neutral workflow to
switchyard/and runtime files to.switchyard/. - Projects on 0.6.0 or older must run the new updater once from a Switchyard checkout. Update any pi
routing.mdrow that uses.claude/sessions/to.switchyard/sessions/.
Fixed
v0.6.0
Added
- A preflight check reports missing batch requirements before a worktree is created.
teardown-worktree.shtakes--abandon: it prints the uncommitted files and local-only commits it is about to discard, then removes the worktree, branches, and record without a prompt. Ordinary teardown now stops before the down hook when the worktree holds uncommitted changes and says to use--abandon.- Planner, implementer, and reviewer roles run on any provider listed in
routing.md. pi ships as example rows. init-project.pymoves the workflow guide todocs/WORKFLOW.mdand deletes Switchyard-only files in a new project, changes nothing whenREADME.mdis not Switchyard's guide, andpreflight.shwarns while theAGENTS.mdProject section still holds the shipped placeholder.update-switchyard.py --installinstalls the workflow into a repo that has never had Switchyard. It adds the workflow's files, merges the project'sAGENTS.mdsections,.gitignorelines, andopenspec/config.yamlrules without touching the rest, writesVERSION, and prints theopenspec initstep when the repo has noopenspec/directory.
Changed
- The coordinator can run on any CLI that reads
AGENTS.mdand can run the skill's scripts. Per-CLI setup lives inrouting.md. - Milestones are optional. The workflow passes
--milestonetogh pr createonly for an issue that has one. - Models, effort, and provider flags now live in
.claude/skills/work-issues/routing.md. The opencode Implementer example uses the CLI's default model; it no longer pins GLM 5.3 Flash or Kimi K3. The updater adds the file when missing and never changes it. Claude role profiles no longer set models. After updating, review an added routing file; for a conflict inSKILL.mdor a profile, take the release's side and move your values torouting.md. - Workers use any provider named after its CLI command.
start-worker.shaccepts--turns, gives each turns worker a fresh session, and no longer refuses an opencode reviewer or a missingrouting.md. When the file does not settle a choice, the coordinator chooses and reports it.preflight.shtakes provider names, and runner commands come fromrouting.md. - Updating from 0.5.0 adds Codex and opencode rows without model IDs. Those workers use the CLI's default model until the project pins one. See the provider notes in
routing.md: use-m <model>for Codex and--model <provider/model>for opencode. - The README's sequence diagram for one issue is drawn as pixel-art rail tracks,
docs/workflow.svg, bydocs/pixelart.py, in place of the Mermaid diagram.
Fixed
teardown-worktree.shnow removes the record even when the remote branch delete fails, and a branch GitHub deletes between the check and the push no longer fails the teardown. A remote branch that still exists after a rejected delete prints an error and exits non-zero.check-scope.shno longer fails under bash 3.2 when an issue owns no paths. It now reports every changed file outsideopenspec/and exits 1.- On the headless runner, the Claude coordinator note now runs each worker turn in the background and reads the turn log when the command exits, because Claude Code stops a foreground command after 10 minutes. The updater never changes
routing.md, so update your project's own Claude note to match.
v0.5.0
Added
- A reviewer role. After the implementer commits, a fresh session on another provider checks the diff against the change's scenarios and tasks and writes a verdict to
.claude/reviews/<n>.md. Each issue now runs one more worker session. start-worker.shrefuses a reviewer on the implementer's provider. SetSWITCHYARD_SAME_PROVIDER=1when only one provider is available.setup-worktree.shdisables the push URL in each new worktree, so workers cannot push. It turns on git'sextensions.worktreeConfigin the repo. The coordinator now pushes from the main checkout.scripts/check-scope.sh <issue>lists files a branch changed outside the owned paths recorded withstate.py set <issue> "owned=...".
Changed
- The coordinator reads the reviewer's verdict, not the diff. Its PR review checklist moved to
roles/reviewer.md. Fixes go to a fresh implementer session that reads the review file. - At plan review, the coordinator reads the change files on disk, not the planner's summary.
- The PR body has a Review section.
v0.4.0
Changed
- Switchyard's checks moved from
.github/workflows/ci.ymlto.github/workflows/switchyard.yml, and the updater no longer touchesci.yml. A repo with its ownci.ymlgot a whole-file conflict when a release changed the template's. After you update, delete the Switchyard steps from yourci.ymlif it still has them.