Skip to content

Releases

v0.10.0

Choose a tag to compare

@nicoleman0 nicoleman0 released this 01 Nov 16:27
39fe824

Added

  • #138: Install asks whether to include OpenSpec. Use --no-openspec for 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.py restacks 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 timings splits each phase into busy and wait time. The coordinator marks turns with state.py turn-end and turn-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.py merges 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 CANDIDATE variable.

Changed

  • #130: Docs match the small-issue fast path and resumed fix rounds again: README.md stops saying the planner always stops at a plan and that you are asked at exactly three points, roles/implementer.md names the fast path in line 1, and SKILL.md no 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 --auto merges 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 small issue is planned and implemented in one session. It stops for a plan review only when it has questions.
  • #117: pre-review.sh runs the checks, the scope check, and OpenSpec validation before a reviewer starts. Projects put their checks in switchyard/hooks/checks.sh.
  • #122: switchyard/lessons.md carries 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.md to codex exec resume <session> <flags> "<prompt>".
  • #79: state.py timings reports 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 status shows an issue with open questions as waiting.

v0.9.1

Choose a tag to compare

@nicoleman0 nicoleman0 released this 25 Oct 19:50
4d30323

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

  • #86: Teardown exits 1 when the issue has no record and nothing to remove, instead of reporting success.
  • #103: Building the same tag twice gives a byte-identical npm bundle.

v0.9.0

Choose a tag to compare

@nicoleman0 nicoleman0 released this 25 Oct 12:15
71415c6

Added

  • #91: npm init switchyard@latest update updates 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-run prints 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

Choose a tag to compare

@nicoleman0 nicoleman0 released this 24 Oct 17:13
af830a0

Added

  • #74: npx create-switchyard adds Switchyard to an existing repo without cloning this one.
  • #78: The coordinator sizes each issue small, medium, or large, 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 of escalation now counts as large and the separate escalation step is gone, so an older routing.md may run its escalation row 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

  • #38: compare.py and the preflight check fall back to ImageMagick 6's convert, the version Ubuntu 24.04 ships.
  • #56: Teardown removes issue records when worktrees or branches are already gone.

v0.7.2

Choose a tag to compare

@nicoleman0 nicoleman0 released this 22 Oct 18:14
6e98848

Changed

  • #64: Roles now cover changes with skip_specs: true.

v0.7.1

Choose a tag to compare

@nicoleman0 nicoleman0 released this 21 Oct 22:52
b84124d

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.txt guard for old updaters is gone; a project can delete its copy.

v0.7.0

Choose a tag to compare

@nicoleman0 nicoleman0 released this 21 Oct 21:56
6d43e89

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.md row that uses .claude/sessions/ to .switchyard/sessions/.

Fixed

  • #61: start-worker.sh records agents blocked during startup so the coordinator can recover them.
  • #62: The Herdr runner ends workers through a command that checks the agent and clears the pane input line.
  • #63: Herdr prompts wait until the agent starts working or becomes blocked before returning.

v0.6.0

Choose a tag to compare

@nicoleman0 nicoleman0 released this 15 Oct 19:31
6fab754

Added

  • A preflight check reports missing batch requirements before a worktree is created.
  • teardown-worktree.sh takes --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.py moves the workflow guide to docs/WORKFLOW.md and deletes Switchyard-only files in a new project, changes nothing when README.md is not Switchyard's guide, and preflight.sh warns while the AGENTS.md Project section still holds the shipped placeholder.
  • update-switchyard.py --install installs the workflow into a repo that has never had Switchyard. It adds the workflow's files, merges the project's AGENTS.md sections, .gitignore lines, and openspec/config.yaml rules without touching the rest, writes VERSION, and prints the openspec init step when the repo has no openspec/ directory.

Changed

  • The coordinator can run on any CLI that reads AGENTS.md and can run the skill's scripts. Per-CLI setup lives in routing.md.
  • Milestones are optional. The workflow passes --milestone to gh pr create only 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 in SKILL.md or a profile, take the release's side and move your values to routing.md.
  • Workers use any provider named after its CLI command. start-worker.sh accepts --turns, gives each turns worker a fresh session, and no longer refuses an opencode reviewer or a missing routing.md. When the file does not settle a choice, the coordinator chooses and reports it. preflight.sh takes provider names, and runner commands come from routing.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, by docs/pixelart.py, in place of the Mermaid diagram.

Fixed

  • teardown-worktree.sh now 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.sh no longer fails under bash 3.2 when an issue owns no paths. It now reports every changed file outside openspec/ 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

Choose a tag to compare

@nicoleman0 nicoleman0 released this 11 Oct 13:19
12e8d45

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.sh refuses a reviewer on the implementer's provider. Set SWITCHYARD_SAME_PROVIDER=1 when only one provider is available.
  • setup-worktree.sh disables the push URL in each new worktree, so workers cannot push. It turns on git's extensions.worktreeConfig in 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 with state.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

Choose a tag to compare

@nicoleman0 nicoleman0 released this 11 Oct 11:53
9b50a70

Changed

  • Switchyard's checks moved from .github/workflows/ci.yml to .github/workflows/switchyard.yml, and the updater no longer touches ci.yml. A repo with its own ci.yml got a whole-file conflict when a release changed the template's. After you update, delete the Switchyard steps from your ci.yml if it still has them.