Auto Ship
Overview
Get a change from "verified" to "released" the disciplined way: run the pre-launch gate honestly (fail
closed on anything that didn't run or didn't pass), assemble grounded release artifacts, open the PR or
stage the rollout with a rollback path, and hand the irreversible deploy decision to a human. The value is
a ship that's provably ready — not one that looks ready because gates were skipped.
Phase 0: Preflight — scope, state, gate the "ready" claim
- Resolve scope (
$target — the current branch by default) and the changes to ship (diff + commits).
- Confirm the state: a clean tree on the right branch, the build's checkpoint (if from
auto-build) shows
no blocked/dep_blocked tasks.
- Open a
checkpoint-resume run; declare the ship budget/escalation points with budget-guard.
Success criteria: the change set + branch are known; upstream build state is clean (or gaps noted).
Phase 1: The pre-launch gate (fail closed)
Run the standing readiness gate; a gate that didn't run or didn't pass is a BLOCKER:
- Final validate — the whole-suite typecheck+lint+test on the integrated state. RED or unrun → block.
- Review clean — confirmed-blocker findings from
auto-review are resolved (or run it now). Open
blockers → block.
- Security — untrusted input / auth / data handling reviewed; no exposed secrets; deps audited.
- Observability — logs/metrics/traces exist for the new critical paths (you can answer "is it working
in prod?").
- Rollback — a rollback path exists for anything risky (flag, revert, staged rollout, migration
back-out).
- Docs — user-visible/API changes documented; ADR recorded for notable decisions.
Use adversarial-verify on the aggregate "ready to ship" claim: skeptics try to find a gate that's
green-in-name-only. Report each gate's real status (ran + passed / failed / didn't run).
Success criteria: every gate's true status is known; any unrun/failed gate is surfaced as a blocker,
not hidden.
Phase 2: Prepare the release artifacts
With gates green, assemble the release (autonomous — no irreversible action yet):
- Atomic commits — clean, scoped commit history (already per-task from
auto-build); no git add -A
grab-bags.
- Version bump — per the project's scheme (semver); grounded in the change's nature (fix/feat/breaking).
- Changelog / release notes — generated from the ACTUAL commits/diff, user-facing and honest; breaking
changes called out with migration notes.
- Docs — finalize any user/API docs the change requires.
Success criteria: version, changelog, and docs are prepared and grounded in the real changes.
Phase 3: Open the PR / stage the rollout — human-gated deploy
- PR path (default): push the branch and open a PR via
gh with the generated title/body (summary,
test evidence, gate results, rollback plan). This is safe/reversible — autonomous.
- Rollout path (if deploying): present the staged plan — feature flag first, incremental exposure,
monitoring to watch, and the rollback trigger. The DEPLOY itself is gated: STOP and get explicit human
sign-off (
AskUserQuestion) before any irreversible step. After deploy (if approved), confirm the
monitoring signal and keep the rollback ready.
Success criteria: the PR is open (or the rollout staged); no irreversible step taken without explicit
approval; rollback is in place.
Phase 4: Report
Close the checkpoint and report: gate results (each ran+passed, or the blocker), release artifacts
prepared, the PR link / rollout status, the rollback path, and anything awaiting human sign-off.
Success criteria: an honest ship report; nothing irreversible done unilaterally; blockers (if any)
clearly listed.
Common Rationalizations
| Rationalization |
Reality |
| "Review was skipped but the code looks fine — ship it." |
A skipped gate is a blocker, not a pass. Run it or don't call it ready. |
| "The validate will pass, no need to run it before shipping." |
"Will pass" is not "passed". The final validate is load-bearing — run it and read the exit code. |
| "This deploy is low-risk, I'll just do it." |
Irreversible steps need human sign-off regardless of your confidence. Prepare autonomously; deploy on approval. |
| "We can add the rollback plan later." |
Later is after it broke. No rollback path means not ready to ship. |
| "I'll write nice release notes covering what we intended." |
Notes describe what actually changed, from the diff — not intentions. Ground them. |
| "Big-bang deploy is simpler than a flag." |
Big-bang maximizes blast radius. Small, flagged, reversible is faster to recover — which is safer. |
Red Flags
- "Ready to ship" while a gate didn't actually run (validate/review/audit skipped but counted clean).
- A final validate that was assumed green, not executed.
- An irreversible deploy/migration/publish done without explicit sign-off.
- Risky change shipped with no rollback path.
- Release notes mentioning changes not in the diff (or omitting breaking changes).
- A grab-bag commit (
git add -A) in the release history.
Enforcement (deterministic, not prose)
While this skill is active, a skill-scoped PreToolUse hook runs scripts/guard-ship-irreversibles.sh
on every Bash call: plain git push --force (without --force-with-lease) and git push --delete
are BLOCKED at the tool layer — the "human sign-off on irreversible steps" contract is enforced by
machinery. The deploy itself remains human-gated by process (Phase 3).
Guardrails
- Never treat a skipped/unrun gate as clean; fail closed.
- Never call the final validate passed without running it.
- Never take an irreversible step (deploy/migrate/publish) without explicit human approval.
- Never ship risky change without a rollback path.
- Never write release notes that aren't grounded in the actual changes.
- Prefer small, flagged, reversible releases over big-bang.
When To Load References
adversarial-verify (skill) — stress the aggregate "ready to ship" claim to catch green-in-name gates.
auto-review (skill) — run/finish the review gate if it hasn't been.
checkpoint-resume (skill) — durable ship-run state.
budget-guard (skill) — the escalation contract for the human-gated deploy.
Output Contract
Report:
- pre-launch gate — each gate's true status (ran+passed / failed / didn't run → blocker)
- release artifacts — version bump, changelog/notes (grounded), docs
- PR link or staged rollout plan + the rollback path
- anything awaiting human sign-off (irreversible steps) and any remaining blockers
1---2name: auto-ship3description: Take verified work to shippable — autonomously, with fail-closed gates and a human sign-off on anything irreversible. It runs the pre-launch gate (final validate green, review clean, security/observability/ rollback checks), and a gate that DIDN'T actually run is treated as a blocker, never as clean. Then it prepares the release: atomic commits, a changelog/release notes grounded in the actual changes, version bump, docs for user-visible/API changes — and opens the PR (or stages the rollout: feature flag + rollback path + monitoring). The deploy itself is gated on explicit human approval. It fails closed and never fabricates a green gate to ship. This is the SHIP phase. Composes adversarial-verify (confirm the "ready" claim), checkpoint-resume, and budget-guard.4---56<EXTREMELY-IMPORTANT>7Shipping is where fabricated-clean verdicts and skipped gates do real damage. Non-negotiable:81. GATES FAIL CLOSED. A configured gate that did not actually run (final validate didn't execute, review9 was skipped, an audit died) is a BLOCKER, never "clean". "Ready to ship" means every gate ran and10 passed — not that some were skipped.112. THE FINAL VALIDATE IS LOAD-BEARING. Run the whole-suite validate on the integrated release state; a12 red or unrun validate blocks the ship, full stop. "Should pass" is not a pass — run it, read the exit.133. HUMAN SIGN-OFF ON IRREVERSIBLE STEPS. Deploys, destructive migrations, publishing a release, anything14 you can't cleanly roll back → STOP and get explicit approval. Preparing artifacts is autonomous;15 pulling the irreversible trigger is not.164. ROLLBACK BEFORE ROLLOUT. Anything risky ships behind a rollback path (feature flag, revert plan,17 staged rollout, migration back-out). No rollback path → not ready.185. RELEASE NOTES ARE GROUNDED. The changelog/notes describe the ACTUAL changes (from the diff/commits),19 not aspirational or invented ones. Never fabricate a clean verdict or a change that didn't happen.206. FASTER IS SAFER, IN SMALL INCREMENTS. Prefer small, flagged, reversible releases over a big-bang deploy.21</EXTREMELY-IMPORTANT>2223# Auto Ship2425## Overview2627Get a change from "verified" to "released" the disciplined way: run the pre-launch gate honestly (fail28closed on anything that didn't run or didn't pass), assemble grounded release artifacts, open the PR or29stage the rollout with a rollback path, and hand the irreversible deploy decision to a human. The value is30a ship that's provably ready — not one that looks ready because gates were skipped.3132## Phase 0: Preflight — scope, state, gate the "ready" claim3334- Resolve scope (`$target` — the current branch by default) and the changes to ship (diff + commits).35- Confirm the state: a clean tree on the right branch, the build's checkpoint (if from `auto-build`) shows36 no blocked/dep_blocked tasks.37- Open a `checkpoint-resume` run; declare the ship budget/escalation points with `budget-guard`.3839**Success criteria:** the change set + branch are known; upstream build state is clean (or gaps noted).4041## Phase 1: The pre-launch gate (fail closed)4243Run the standing readiness gate; a gate that didn't run or didn't pass is a BLOCKER:4445- **Final validate** — the whole-suite typecheck+lint+test on the integrated state. RED or unrun → block.46- **Review clean** — confirmed-blocker findings from `auto-review` are resolved (or run it now). Open47 blockers → block.48- **Security** — untrusted input / auth / data handling reviewed; no exposed secrets; deps audited.49- **Observability** — logs/metrics/traces exist for the new critical paths (you can answer "is it working50 in prod?").51- **Rollback** — a rollback path exists for anything risky (flag, revert, staged rollout, migration52 back-out).53- **Docs** — user-visible/API changes documented; ADR recorded for notable decisions.5455Use `adversarial-verify` on the aggregate "ready to ship" claim: skeptics try to find a gate that's56green-in-name-only. Report each gate's real status (ran + passed / failed / didn't run).5758**Success criteria:** every gate's true status is known; any unrun/failed gate is surfaced as a blocker,59not hidden.6061## Phase 2: Prepare the release artifacts6263With gates green, assemble the release (autonomous — no irreversible action yet):6465- **Atomic commits** — clean, scoped commit history (already per-task from `auto-build`); no `git add -A`66 grab-bags.67- **Version bump** — per the project's scheme (semver); grounded in the change's nature (fix/feat/breaking).68- **Changelog / release notes** — generated from the ACTUAL commits/diff, user-facing and honest; breaking69 changes called out with migration notes.70- **Docs** — finalize any user/API docs the change requires.7172**Success criteria:** version, changelog, and docs are prepared and grounded in the real changes.7374## Phase 3: Open the PR / stage the rollout — human-gated deploy7576- **PR path** (default): push the branch and open a PR via `gh` with the generated title/body (summary,77 test evidence, gate results, rollback plan). This is safe/reversible — autonomous.78- **Rollout path** (if deploying): present the staged plan — feature flag first, incremental exposure,79 monitoring to watch, and the rollback trigger. The DEPLOY itself is gated: STOP and get explicit human80 sign-off (`AskUserQuestion`) before any irreversible step. After deploy (if approved), confirm the81 monitoring signal and keep the rollback ready.8283**Success criteria:** the PR is open (or the rollout staged); no irreversible step taken without explicit84approval; rollback is in place.8586## Phase 4: Report8788Close the checkpoint and report: gate results (each ran+passed, or the blocker), release artifacts89prepared, the PR link / rollout status, the rollback path, and anything awaiting human sign-off.9091**Success criteria:** an honest ship report; nothing irreversible done unilaterally; blockers (if any)92clearly listed.9394## Common Rationalizations9596| Rationalization | Reality |97|---|---|98| "Review was skipped but the code looks fine — ship it." | A skipped gate is a blocker, not a pass. Run it or don't call it ready. |99| "The validate will pass, no need to run it before shipping." | "Will pass" is not "passed". The final validate is load-bearing — run it and read the exit code. |100| "This deploy is low-risk, I'll just do it." | Irreversible steps need human sign-off regardless of your confidence. Prepare autonomously; deploy on approval. |101| "We can add the rollback plan later." | Later is after it broke. No rollback path means not ready to ship. |102| "I'll write nice release notes covering what we intended." | Notes describe what actually changed, from the diff — not intentions. Ground them. |103| "Big-bang deploy is simpler than a flag." | Big-bang maximizes blast radius. Small, flagged, reversible is faster to recover — which is safer. |104105## Red Flags106107- "Ready to ship" while a gate didn't actually run (validate/review/audit skipped but counted clean).108- A final validate that was assumed green, not executed.109- An irreversible deploy/migration/publish done without explicit sign-off.110- Risky change shipped with no rollback path.111- Release notes mentioning changes not in the diff (or omitting breaking changes).112- A grab-bag commit (`git add -A`) in the release history.113114## Enforcement (deterministic, not prose)115116While this skill is active, a skill-scoped PreToolUse hook runs `scripts/guard-ship-irreversibles.sh`117on every Bash call: plain `git push --force` (without `--force-with-lease`) and `git push --delete`118are BLOCKED at the tool layer — the "human sign-off on irreversible steps" contract is enforced by119machinery. The deploy itself remains human-gated by process (Phase 3).120121## Guardrails122123- Never treat a skipped/unrun gate as clean; fail closed.124- Never call the final validate passed without running it.125- Never take an irreversible step (deploy/migrate/publish) without explicit human approval.126- Never ship risky change without a rollback path.127- Never write release notes that aren't grounded in the actual changes.128- Prefer small, flagged, reversible releases over big-bang.129130## When To Load References131132- `adversarial-verify` (skill) — stress the aggregate "ready to ship" claim to catch green-in-name gates.133- `auto-review` (skill) — run/finish the review gate if it hasn't been.134- `checkpoint-resume` (skill) — durable ship-run state.135- `budget-guard` (skill) — the escalation contract for the human-gated deploy.136137## Output Contract138139Report:1401411. pre-launch gate — each gate's true status (ran+passed / failed / didn't run → blocker)1422. release artifacts — version bump, changelog/notes (grounded), docs1433. PR link or staged rollout plan + the rollback path1444. anything awaiting human sign-off (irreversible steps) and any remaining blockers