From Darkroom Engineering
Verifies and publishes changes—pushes, opens PRs, watches CI until green. Runs typecheck, build, test, lint, a web quality gate, review, and a bisectable commit pipeline.
How this skill is triggered — by the user, by Claude, or both
Slash command
/darkroom:shipThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Before starting work, create a marker: `mkdir -p ~/.claude/tmp && echo "ship" > ~/.claude/tmp/heavy-skill-active && date -u +"%Y-%m-%dT%H:%M:%SZ" >> ~/.claude/tmp/heavy-skill-active`
Before starting work, create a marker: mkdir -p ~/.claude/tmp && echo "ship" > ~/.claude/tmp/heavy-skill-active && date -u +"%Y-%m-%dT%H:%M:%SZ" >> ~/.claude/tmp/heavy-skill-active
You are in Maestro orchestration mode. Execute the shipping checklist in order.
git branch --show-current 2>/dev/null || echo "unknown"git status --porcelain 2>/dev/null | head -20git log --oneline -5 2>/dev/null || echo "no commits"ssh-add -l
If no identities loaded: Unlock 1Password and retry — git signing will fail otherwise. Agent drops mid-flow are a recurring cause of failed pushes; catch it now, not after the commit.
Do not commit until Steps 1–4 (typecheck/build/test/lint) are green. Skipping ahead is where amend churn comes from — --amend to fix a lint error you would have caught in 30 seconds invalidates signatures and CI runs.
bunx tsc --noEmit
If errors: fix them. Do not proceed until clean.
bun run build
If errors: fix them. Do not proceed until clean.
3a. Affected tests first (when tldr is available). Run only the tests touched by your changes, before the full suite. Fast feedback if you broke something obvious:
tldr change-impact --project . 2>/dev/null
If TLDR returns a list, run those tests first (bun test <file> or vitest run <file>). If they fail, fix before the full run — don't waste cycles on the rest.
3b. Full suite.
bun test || vitest run
If test runner is not configured, skip this step. If tests fail: fix them. Do not proceed until green.
biome check .
If errors: fix or justify.
Quick sanity check before review:
loading="lazy" on above-fold/LCP imagesfill propconsole.log left in production codetitle, description, canonical)If issues found: fix them before proceeding to review.
Spawn reviewer agent:
Agent(reviewer, "Review all staged changes for quality, TypeScript strictness, a11y, and performance issues.")
Analyze the diff to decide commit strategy:
git diff --cached --stat | tail -1
Small diff (<50 lines changed across <4 files): Single commit.
git add <relevant files>
git commit -m "<type>: <description>"
Larger diff: Split into ordered commits by dependency layer. Each commit must be independently valid — no broken imports, no forward references.
Commit order (skip layers with no changes):
Per-commit validation: Each commit must independently pass:
npx tsc --noEmit && biome check .
If a commit would break either check in isolation, merge it with the next commit in the sequence.
Commit messages: Each gets a conventional prefix (feat:, fix:, refactor:, test:, chore:, docs:). Keep them descriptive of what that specific commit contains.
No AI attribution on any commit.
git push origin HEAD
If gh is not available, provide the push command and instruct the user to create the PR manually.
Author the PR body — do NOT use --fill. --fill dumps the commit messages
into the description, which reads as technical and over-engineered. Lead with a
plain-English "What this does" (see rules/git.md "Signal, not spam"):
gh pr create --title "<type>: <concise, plain-English title>" --body "$(cat <<'EOF'
## What this does
<2–3 plain sentences: what changed and why it matters — the real-world effect,
not the mechanism. A teammate who didn't write it should get it on one read.>
## Summary
- <technical bullet — the how>
## Test Plan
- [ ] <how it was verified>
EOF
)"
Write "What this does" from the diff and its purpose, not by pasting commit subjects. If you can't explain it plainly, the change is unclear — say so, don't reach for bigger words.
After gh pr create, watch the PR-attached checks until all pass. Use gh pr checks as the source of truth — it covers all PR checks, not just GitHub Actions runs (which gh run list would miss).
gh pr checks --json name,bucket,state,workflow,link
gh pr checks --watch --fail-fast
If a check fails:
gh run view RUN_ID --log-failed for GHA; follow the link for external services).fix skill's "Variant: Failing PR CI" if the failure is non-trivial.gh pr checks — the check set can change between runs.Guardrails:
feat:, fix:, refactor:, etc.)tsc --noEmit AND biome check independentlyReturn:
npx claudepluginhub darkroomengineering/cc-settings --plugin darkroomAutomates code shipping: merges base branch, runs detected tests, performs multi-review with auto-fixes, commits, pushes, creates PR. Use /ship or say 'ship it'.
Runs preflight checks (typecheck, lint, tests), auto-fixes issues, commits changes with styled message, pushes branch, creates PR. Pauses if fixes needed for review; prompts for branch/PR target.
Automates end-to-end branch shipping: merge base, run tests with failure triage, audit coverage, review diffs, bump version, commit, push, create PR. Use for 'ship', 'push to main', or 'create PR' requests.