Skip to main content

Documentation Index

Fetch the complete documentation index at: https://jacobpevans-docs-automation-surface.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

One command. Commit, push, open the PR, fix CodeQL, resolve threads, fix CI, verify everything is green. Never merges. That’s a human decision.
/ship is the local escape hatch for the cloud pipeline. The cloud pipeline (ai-workflows, claude-code-routines) gets a PR opened and reviewed without you. /ship is what you run from a Claude Code session when you are the one iterating on a PR and want it driven to a ready-to-merge state in one command.

What /ship does

/ship is a thin orchestrator. It detects uncommitted changes (commits them), discovers recently-created PRs, then for each PR invokes /finalize-pr — which is where the real work happens.
/ship
  ├─ Step 0: verify git repo
  ├─ Step 1: commit any uncommitted changes; discover PRs in scope
  ├─ Step 1.5: build a context brief from the conversation
  ├─ Step 2: invoke /finalize-pr per PR, sequentially
  └─ Step 3: re-verify each PR with live GitHub state before reporting

What /finalize-pr does

/finalize-pr is the loop. Five phases per PR:
PhaseWhat it owns
1. DiscoverResolve which PR(s) to act on (current branch, all, or org-wide)
2. Resolve loopStart CI monitor in background; in parallel: invoke /resolve-codeql fix, /resolve-pr-threads, merge-conflict resolution; once CI completes, run /simplify once on the cumulative changes
3. Verify gateRe-query live GitHub state — state, mergeable, mergeStateStatus, reviewDecision, statusCheckRollup.state, all reviewThreads.isResolved, CodeQL alert count
4. Update metadataA subagent updates PR title, description, linked issues
5. Report readyEmit the canonical PR status block; wait for human merge

What it never does

  • Never merges. Merge is always a human decision.
  • Never approves. No auto-approval of PRs.
  • Never crosses org boundaries in org-wide mode.
  • Never bypasses branch protection.

Subagents in the call chain

/ship → /finalize-pr → /resolve-codeql fix
                     → /resolve-pr-threads → superpowers:receiving-code-review
                     → /simplify
                     → haiku subagent (PR metadata update)
                     → background CI monitor (Task tool)
Each subagent runs scoped to its task and reports back. The orchestrator re-verifies live state — never trusts a subagent’s self-report as ground truth.

Known reliability gaps

/ship has been ending prematurely without leaving PRs fully mergeable. Root causes traced to the current SKILL.md files:
Failure modeWhy it happens
Exits “blocked” when a fix could have continuedPhase 3 → Phase 2 loop is prose with no enforced iteration counter — subagents treat it as advisory
Treats async-pending checks as failuresPhase 3 aborts on statusCheckRollup.state ≠ SUCCESS, but Phase 2 can’t fix a pending check
Silent subagent failure passes throughAfter /resolve-codeql and /resolve-pr-threads, skill advances without re-querying state to confirm fixes landed
CI monitor dies silentlyBackground Task agent can fail without propagating
All Phase 3 aborts treated identicallySome failures are agent-fixable, some are wait, some require humans (REVIEW_REQUIRED)
Fix in flight: explicit iteration counter (cap 5), wait-for-async-checks phase, post-fix verification of subagent work, CI-monitor failure fallback, and a failure-mode taxonomy that maps each mergeStateStatus/reviewDecision to a handler. After the fix, every /ship invocation reports one of three categories with a specific reason — never silent half-finalization:
  • Ready to merge — all gates clean
  • Ready except human gate — only REVIEW_REQUIRED remaining
  • Ship aborted — specific gate stuck with manual-action suggestion
Tracked as a PR against claude-code-plugins.

When to use /ship vs the cloud pipeline

SituationUse
Issue is filed, you want a PR drafted without thinkingai-workflows (the cloud pipeline triggered on issue open)
You’re editing a PR locally and want CI/threads/CodeQL handled in one command/ship from your Claude Code session
You want a daily org-wide sweepclaude-code-routines (cron-scheduled)
You want to know if a PR is really ready to merge/finalize-pr <N> directly — gives you the canonical gate output without re-running fixes

Where to go next

CodeQL resolution

Why CodeQL is fixed separately from CI checks, and what /resolve-codeql does.

claude-code-plugins

The plugin home for /ship, /finalize-pr, and all the supporting skills.

Source: ship/SKILL.md

The full skill definition.

Source: finalize-pr/SKILL.md

Phases, gates, and the merge prohibition.