plugins/core/skills/ship/SKILL.md
Ship workflow - merge PR, deploy via CLAUDE.md, and verify production.
npx skillsauth add qmu/workaholic shipInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Merge a pull request, deploy to production, and verify the deployment. The agent acts as the deployment agent, following the ## Deploy and ## Verify instructions in the project's CLAUDE.md.
This skill is the trip-independent ship essence: it operates on the current branch's PR. Worktree handling and drive/trip context routing are not part of this skill — in Claude Code they are handled separately by the trip workflow and the /ship command. Any agent can run this skill directly to ship the current branch.
This skill works on any Agent-Skills-compatible agent. Where a step uses AskUserQuestion (workspace/ticket guards, deploy confirmation), use the agent's native way of presenting a multiple-choice question (or ask in plain chat). The confirmations are mandatory; only the prompt mechanism varies. (This skill has no subagent fan-out.)
Deploy and verify instructions live in the project's CLAUDE.md — the file authored by the user that already carries the project's instructions. The ship workflow reads its ## Deploy and ## Verify sections to learn how to deploy and verify.
bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/find-claude-md.sh
Searches: ./CLAUDE.md
## Deploy
Step-by-step deployment instructions for the agent to execute.
## Verify
Health checks, smoke tests, and expected outcomes.
Before executing deploy instructions, display the Deploy section and ask the user to confirm via AskUserQuestion. If the user declines, deployment is skipped.
If no CLAUDE.md is found, or it has no ## Deploy section, skip deploy and verify steps. Inform the user that deployment was skipped because CLAUDE.md carried no deploy instructions.
bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/pre-check.sh "<branch>"
Verifies a PR exists for the branch. Returns JSON with PR number, URL, and merge status.
bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/merge-pr.sh "<pr-number>"
Merges the PR, checks out main, and pulls to sync. Returns JSON with merge status and commit hash.
bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/find-claude-md.sh
Searches for the project's CLAUDE.md. Returns JSON with path or {"found": false}.
bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/check-todo.sh
Checks if .workaholic/tickets/todo/ has remaining tickets. Returns JSON with cleanliness status, count, and ticket list. Used as a pre-merge guard to prevent shipping with unfinished work.
bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/extract-carryover.sh "<branch>" "<pr-number>" "<pr-url>"
Reads the just-shipped story (.workaholic/stories/<branch>.md), parses each ### concern block in section 6 (Concerns), and writes one file per concern under .workaholic/concerns/ as <pr-number>-<slug>.md (with severity and a Title/Description/How-to-Fix body). Returns JSON:
{"status":"ok","extracted":10,"files":["..."]}
Commits the new files with message Carry over concerns from PR #<pr-number> so the corpus stays under version control. Skips silently when no story file exists or section 6 is empty.
bash ${CLAUDE_PLUGIN_ROOT}/skills/branching/scripts/check-workspace.sh
Parse the JSON output. If clean is true, proceed silently to the Ticket Guard.
If clean is false, display the summary to the user and ask via AskUserQuestion with selectable options:
If the user selects "Stop", end the workflow immediately.
bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/check-todo.sh
Parse the JSON output. If clean is true, proceed silently to the Ship Flow.
If clean is false, display the ticket list to the user: "Cannot ship: N ticket(s) remaining in .workaholic/tickets/todo/:" followed by the ticket filenames. Then ask via AskUserQuestion with selectable options:
.workaholic/tickets/icebox/, stage and commit "Move remaining tickets to icebox", then proceed to the Ship Flow./drive, manually reorganize, etc.)If the user selects "Stop", end the workflow immediately.
Ship the current branch's PR. (Worktree sync/cleanup and drive/trip routing are not here; in Claude Code those are handled by the trip workflow.)
bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/pre-check.sh "<branch>". If found is false: inform user "No PR found for this branch. Run /report first." and stop. If merged is true: skip to Deploy.bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/merge-pr.sh "<pr-number>". On failure, inform user and stop.bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/extract-carryover.sh "<branch>" "<pr-number>" "<pr-url>". Persists active Concerns from the just-shipped story's section 6 into .workaholic/concerns/. Commits the new files. Skips silently when no story file exists or section 6 is empty. Report extracted count from the JSON output.bash ${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/find-claude-md.sh. If found is false, or CLAUDE.md has no ## Deploy section: inform user "No deploy instructions found in CLAUDE.md. Deployment skipped." and skip to summary. Otherwise: read CLAUDE.md, find the ## Deploy section, ask confirmation via AskUserQuestion, execute if confirmed.## Deploy section was found, read the ## Verify section of CLAUDE.md and execute. Report results.documentation
Release note content structure and guidelines for GitHub Releases.
testing
Ship workflow - merge PR, deploy via CLAUDE.md, and verify production.
development
Generate branch-story sections 4-7 (Outcome, Historical Analysis, Concerns, Successful Development Patterns) from archived tickets and carry-over verdicts. Used by the report workflow when assembling a PR story.
business
Story writing, PR creation, and release readiness assessment for branch reporting.