From sdd
Commits, pushes, and opens a pull request for completed work. Uses Conventional Commits format and gh CLI for PR creation. Use when user says "ship", "create PR", "open pull request", "push", "ship it", "commit and PR", or after running /implement. Do NOT use without running /review first or with failing tests. All tests must be passing before shipping.
npx claudepluginhub robertraf/rob-agent-workflow --plugin sddThis skill is limited to using the following tools:
You are shipping completed work: **Commit, push, and open a pull request.**
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
You are shipping completed work: Commit, push, and open a pull request.
Run the pre-ship check script to validate readiness:
${CLAUDE_SKILL_DIR}/scripts/pre-ship-check.sh [test-command]
This checks: feature branch, debug code, secrets, .env files, and optionally runs tests. If any check fails, fix before proceeding.
If the script is not available, verify manually:
git branch --show-current # must be feat/{issue-number}-{name}
All tests must be passing. Run the project's test command and confirm zero failures. If tests fail, stop immediately and ask the user to fix them.
git status
git diff
git diff --staged
Read the diff carefully. Understand every change. Look for and remove:
Stage specific files — do not blindly git add .:
git add <file1> <file2> ...
Group logically related changes. Each commit should represent one coherent unit of work.
If the changes span multiple logical units, create multiple commits (one per unit).
Use the Conventional Commits format:
<type>(<optional scope>): <short description>
<optional body>
<optional footer>
Types:
| Type | When to use |
|---|---|
feat | New feature visible to users or consumers |
fix | Bug fix |
refactor | Code change that neither adds a feature nor fixes a bug |
test | Adding or updating tests only |
chore | Build process, dependencies, CI, config changes |
docs | Documentation only |
perf | Performance improvement |
Rules:
Closes #<issue-number> to auto-close the issue on mergeBefore pushing, confirm you are in the correct repository:
git remote get-url origin # verify this is the expected repository
In multi-repo projects (e.g., frontend + backend), show the remote URL to the user and confirm before pushing. A push to the wrong remote is hard to undo and creates confusion.
git push -u origin "$(git branch --show-current)"
Extract the issue number from the branch name and create the PR.
Use conventional commit style for the PR title — it should match the primary commit type:
<type>(<scope>): <imperative description>
feat, fix, refactor, chore, perf, docs, test — same as conventional commitsExamples:
feat(auth): add OAuth2 login with Google and GitHubfix(checkout): prevent double-charge on concurrent submissionsrefactor(api): migrate REST endpoints to GraphQL schemagh pr create \
--title "<type>(<scope>): <imperative description>" \
--body "## Summary
<1-2 sentence high-level description of what this PR does and why>
### What changed
- \`path/to/file\`: <what changed and why>
- \`path/to/file\`: <what changed and why>
### Change overview
\`\`\`mermaid
graph TD
A[Modified: component/module] -->|calls| B[Modified: component/module]
C[New: component/module] -->|depends on| A
\`\`\`
> Show how the changed/new components relate to each other.
> Use labels like 'New:', 'Modified:', 'Deleted:' to clarify the type of change.
> Omit this section if the change is trivial (e.g., single-file fix, config change).
## How to test
1. <step-by-step instructions to verify the change>
2. <include specific commands, URLs, or inputs>
3. Run \`<test command>\` — all tests pass
## Breaking changes
> _None_ — or describe what breaks and how consumers should migrate.
## References
Closes #<issue-number>"
Include the change overview diagram when it adds clarity:
| Include diagram when | Skip diagram when |
|---|---|
| PR touches 3+ files across modules | Single-file change |
| New component integrates with existing ones | Simple bug fix |
| Data flow or control flow changes | Config or docs change |
| Reviewer needs visual context for architecture | Straightforward refactor |
type(scope): descriptionLanguage rule: All commit messages, PR titles, and PR descriptions must be written in English, regardless of the language the user communicates in. This is non-negotiable — Git history and PRs are the shared record across teams and sessions.
Update the GitHub issue to reflect the final state of the shipped work. The issue was created before implementation — it must now match what was actually built.
gh issue view <issue-number>
gh issue edit:
- [x])gh issue edit <issue-number> --body "<updated body>"
Rules:
✓ Committed: <commit message first line>
✓ Pushed to: feat/<issue-number>-<name>
✓ PR created: <PR URL>
✓ Issue #<number>: description refreshed
The issue #<number> will be closed automatically when the PR is merged.
If additional commits are pushed to the branch after the PR was created (e.g., from review feedback, CI fixes, or follow-up changes), the PR description may become stale. In that case, update it:
gh pr view --json number,url,body,commits
gh pr edit:
Closes #<issue-number> in the References sectiongh pr edit <pr-number> --body "<updated body>"
Rules:
/ship template — update in place./ship is not terminal. The PR is a live artifact until merge — review feedback, CI fixes, and follow-up commits are expected. Still, the spec, plan, and tasks-summary produced earlier in this session are stable now and worth archiving to the repo-scoped wiki for future sessions to consult.
Ask the user:
"Ingest this session's spec/plan/tasks to
.wiki/for future consultation?"
/sdd:wiki-ingest --preliminary. That skill handles initialization, confirmation, collision, and file writes..wiki/ stays untouched..wiki/ directory and no explicit user consent, do nothing. Ingestion is always opt-in.Remember: the final wiki entry (review findings and lessons learned) is written post-merge via /sdd:wiki-close-loop, not here. Skipping Step 9 does not prevent that later step.
These are common failure modes when shipping. Watch for them:
git add . Despite the constraint, Claude defaults to this when there are many files. Always list files explicitly — this forces you to review what's being committed and catches accidental inclusions (.env, debug files, unrelated changes).fix(checkout): prevent double-charge when user clicks pay twice. The title should read like a changelog entry — type, scope, and a clear imperative description.Closes #issue in PR body. Without this, the issue stays open after merge and someone has to manually close it. Always extract the issue number from the branch name and include it.git remote get-url origin before pushing. A push to the wrong remote creates duplicate branches and confusion. Use absolute paths for all git operations when working across repos./ship as the end of the workflow. It is not. The PR still needs review, CI, and potentially post-review commits. After merge, run /sdd:wiki-close-loop to consolidate review findings and lessons into the wiki. See .claude/rules/sdd-workflow.md Phase 7.--no-verify to skip pre-commit hooks. Fix the issue instead.git add . or git add -A without reviewing what's being staged.This plugin includes a PreToolUse hook that automatically blocks dangerous git operations:
git push --forcegit reset --hardgit add . / git add -A--no-verifyThe hook is active whenever the plugin is enabled — no manual configuration needed.