| name | ship |
| description | Close out a phase by running the full local CI surface, opening the phase PR, and (after merge) advancing state. |
| argument-hint | <phase-id> [--dry-run] |
| user-invocable | true |
| disable-model-invocation | true |
/ship
v0.4 cross-links
/ship reads the phase CloseReadiness projection (gate-pack aggregate + EvidenceRecord summary + outstanding follow-ups) to decide what gates still need clearing. The phase-close commit only lands once CloseReadiness.status == "ready". The phase-PR body is synthesized from the same projection so reviewer and tool see the same shape. MEMORY mutations driven by ship (e.g. release-notes entries) carry an explicit MutationKind for downstream audit.
Canonical algorithm
- Resolve
<phase-id>; verify all waves under it are complete.
- Run the local verification gauntlet (pre-commit, mypy, pytest, ruff).
- Validate artifact markdown and PR prose against the chassis/scrub rules.
- Push the long-running feature branch.
- Open the phase PR via
gh pr create.
- PR-review pass. Read remote review comments via
gh pr view <PR> --comments (or the inline equivalent). For each actionable finding, append a follow-up wave to the current iter via eawf roadmap revise --add-wave (not a new iter — per the iter-phase-close-timing rule). Implement, re-push, wait for green CI, re-request review until clean.
- Bundle close in the final pre-merge commit. Once CI is green and the review-passed branch is on the remote, emit a single
[P<NN>] state: close iter + phase (audit=<id>) commit (the legacy [P<NN>-CORE] state: ... form remains valid per the commit-prefix block in AGENTS.md) that bundles eawf iter close P<NN>-I<MM> + eawf phase close P<NN> (no other touched files). The operator merges that commit to end the phase.
Pre-flight checklist
Decision surfaces
gh pr create, gh pr merge, and any push to a protected branch are irreversible/visible-to-others actions per AGENTS.md — surface the final confirm through AskUserQuestion (options: proceed / defer / abort) unless vcs.auto_push, vcs.pr_open, and the merge strategy are pre-resolved by config.
Output contract
Skill envelope carrying the PR URL, the post-merge state mutation, and any deferred follow-ups.