Skip to content

Plan Changes While Shipper Ships

Goal of this page: keep defining new OpenSpec changes — wherever it's most comfortable — while Shipper delivers the ones already queued.

Where to write a change

Shipper never touches your working checkout, so you can plan wherever feels natural:

  • On main — fine for solo work. Write the change under openspec/changes/<name>, validate, commit, push.
  • On a planning branch — e.g. spec/<change-name>. Useful when a proposal needs review before it ships, or when you draft several at once.
  • In a separate worktree — if you like keeping planning physically apart from your main checkout.

Whatever you choose, the rule is the same: the planning snapshot must be committed. Shipper adopts the committed state of a change; any uncommitted edit under that change blocks adoption, on purpose — it will never silently implement an older draft while you're still editing.

The handoff

  1. Create the OpenSpec change (proposal, tasks.md with checkboxes, optionally design.md).
  2. Validate it with OpenSpec and commit the complete snapshot.
  3. Add it to the queue — edit queue.md or run queue add <name>.
  4. Run the queue (or leave it running). Shipper resolves the source once and records source_branch and source_commit on the task.

If the same change exists in more than one plausible place, Shipper stops and asks you to disambiguate with source_branch in the queue instead of guessing.

tasks.md is the contract: Shipper tracks progress through its checkboxes (- [ ]- [x]). A tasks.md without checkboxes blocks immediately, because the queue can't know what work remains.

Keep planning while it delivers

This is the core loop that makes Shipper worth it:

  1. Queue change A. Shipper starts implementing it in its own worktree.
  2. While it works, you write the spec for change B on main or a branch.
  3. Queue B. Review A's PR when it arrives. Merge.
  4. Repeat.

You're always doing high-value work (specs, reviews); Shipper is always doing the mechanical work (worktrees, branches, PRs, archiving). Later commits to a change's planning are reported but never silently adopted into an in-flight delivery — you stay in control of what ships.

What's next

Sooner or later a task will show [!]. Don't worry — that's the design working: When the queue blocks.

Released under the MIT License.