shiplisted
Install: claude install-skill jwogrady/spark
# ship — Stage 5 of the Spark lifecycle
`Ideate → Plan → Codify → Validate → Ship`
Ship publishes work that already exists: the implementation commits belong to
[`codify`](../codify/SKILL.md) and the review-fix commits to
[`validate`](../validate/SKILL.md), so by Ship the branch tells its story
already. Ship verifies that series, pushes, and opens one focused PR. The
motion is the same whatever the branch is — an issue branch or a temporary
integration branch (the delivery ADR's exception pattern) publishes
identically.
## Do this
1. **Confirm the branch.** Never commit or push on `master`/`main` — if you're on
it, branch first. Confirm the change passed [`validate`](../validate/SKILL.md).
2. **Review the commit series.** `git log --oneline <trunk>..HEAD` — each
commit a coherent Conventional Commit, the series scoped to this one issue.
Two concerns in the series means the branch should split before it ships.
3. **Sweep the tail.** `git status` — a clean tree ships as-is. A small
coherent remainder (close-out edits, a final doc touch) becomes one last
focused commit:
```
<type>: <imperative subject, under 72 chars, no trailing period>
<body: why this change exists, not a restatement of the diff>
```
A large uncommitted tail means Codify/Validate skipped their commit steps —
commit it as the focused series it should have been, not one blob.
4. **Push** the branch:
```bash
git push -u origin <branch>
```
5. **Open the PR** into the