Release Checklist
Validates release readiness with gated checklist — build, test, count validation, changelog, version bump. Use when preparing a release.
Release Checklist
Sequential release gate for OrchestKit. Each step reports [PASS] or [FAIL]. Stop on first failure, suggest a fix, then continue after user confirmation.
See references/release-flow.md for why the order matters and hotfix guidance.
Quick Reference
| Category | Rules | Impact | When to Use |
|---|---|---|---|
| Pre-Release Gates | 2 | CRITICAL | Before every release commit |
| Release Commit | 2 | HIGH | Staging, committing, tagging, pushing |
Total: 4 rules across 2 categories
Quick Start
# Run all pre-release gates in order (stop on first failure)
npm run build && npm test && npm run test:security && npm run typecheck
bash src/skills/validate-counts/scripts/validate-counts.sh
git diff # review before stagingPre-Release Gates
Must all pass before writing any release commit. See rules/gate-build-and-test.md and rules/gate-counts-and-diff.md.
| Step | Command | Rule File |
|---|---|---|
| 1. Build | npm run build | rules/gate-build-and-test.md |
| 2. Tests | npm test | rules/gate-build-and-test.md |
| 3. Security | npm run test:security | rules/gate-build-and-test.md |
| 4. TypeScript | npm run typecheck | rules/gate-build-and-test.md |
| 5. Validate counts | /validate-counts | rules/gate-counts-and-diff.md |
| 6. Diff review | git diff | rules/gate-counts-and-diff.md |
Release Commit
Steps after all gates pass. See rules/commit-staging.md and rules/commit-tag-push.md.
| Step | Action | Rule File |
|---|---|---|
| 7. Changelog | Entry exists in CHANGELOG.md | rules/commit-staging.md |
| 8. Version bump | package.json + CLAUDE.md both updated | rules/commit-staging.md |
| 9. Stage files | git add <specific files> — never -A | rules/commit-staging.md |
| 10. Commit | release: vX.Y.Z conventional format | rules/commit-tag-push.md |
| 11. Tag | git tag vX.Y.Z | rules/commit-tag-push.md |
| 12. Push | Run scripts/pre-push-confirm.sh — confirm first | rules/commit-tag-push.md |
Related Skills
validate-counts— Count consistency check (step 5 of this checklist)audit-skills— Broader skill quality audit (run before major releases)checkpoint-resume— Rate-limit-resilient pipelines for long release sessions
Common Mistakes
- Running
npm testbeforenpm run build— tests run against stale dist - Using
git add -A— accidentally stages secrets or unrelated in-progress work - Forgetting to bump
CLAUDE.mdversion alongsidepackage.json - Pushing without explicit user confirmation — irreversible on shared remotes
- Skipping security tests — non-negotiable, even for patch releases
Rules (4)
Stage release files carefully to avoid accidentally committing secrets or debug artifacts — HIGH
Release Staging Rules
Version Consistency
Before staging, verify both version locations match the release version:
# Check package.json version
grep '"version"' package.json
# Check CLAUDE.md version line
grep 'Current' CLAUDE.mdBoth must show the same version (e.g., 6.0.21). If either is missing or wrong, update before staging.
Also check CHANGELOG.md has an entry for this version with a date and summary.
Staging — Never git add -A
Incorrect:
git add -A # Stages everything including secrets, temp files, unrelated changes
git add . # Same problem — too broadCorrect:
git add src/hooks/src/my-changed-hook.ts \
src/hooks/dist/ \
plugins/ \
CHANGELOG.md \
package.json \
CLAUDE.md \
manifests/Expected Files to Stage for a Release
| File/Dir | Why |
|---|---|
src/ changed files | Source of the actual change |
src/hooks/dist/ | Compiled TypeScript |
plugins/ | Generated by npm run build |
manifests/ | If counts changed |
CHANGELOG.md | Release entry |
package.json | Version bump |
CLAUDE.md | Version bump |
Key rules:
- Always
git add <specific files>— name every file explicitly - Never stage
.env,*.secret, or anything not listed in the diff review - Version in
package.jsonandCLAUDE.mdmust match before staging
Format release commits, tags, and pushes correctly for CI changelog and semver automation — HIGH
Release Commit, Tag, and Push
Commit Format
Incorrect:
git commit -m "version bump" # Not conventional format
git commit -m "Release 6.0.21" # Missing type prefix
git commit -m "release v6.0.21" # Inconsistent — v prefix in message but not tagCorrect:
git commit -m "$(cat <<'EOF'
release: v6.0.21
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
EOF
)"- Type:
release - No scope needed
- Include Co-Authored-By when working with Claude
Tag
git tag v6.0.21- Tag must exactly match
"version"inpackage.jsonwith avprefix - Use annotated tags for public releases:
git tag -a v6.0.21 -m "Release v6.0.21"
Push — Confirm With User First
Always ask the user before running:
git push --follow-tagsThis pushes commits AND the version tag. On a shared remote this is effectively irreversible.
Script available: Run scripts/pre-push-confirm.sh to show the user a summary of what will be pushed and prompt for explicit confirmation before executing the push.
Key rules:
- Use
release:type, notchore:orversion:for release commits - Tag with
vprefix matchingpackage.jsonversion exactly - NEVER push without explicit user confirmation — even if user said "go ahead" earlier in the conversation
Pass build and test gates before release to prevent shipping broken artifacts — CRITICAL
Build and Test Gates
All four checks must pass in order. Stop on first failure and suggest a fix before continuing.
1. Build
npm run build- Pass:
plugins/is populated, no errors printed - Fail: check edits in
src/, re-run. If interrupted mid-build,plugins/is left empty — re-run before retrying
2. Full Test Suite
npm test- Pass: all test suites green
- Fail: fix failing tests; do not proceed
3. Security Tests
npm run test:securityMUST pass. No exceptions. Security failures block the release unconditionally.
4. TypeScript
npm run typecheck- Pass: zero type errors in hooks TypeScript
- Fail: fix errors in
src/hooks/src/then rebuild withcd src/hooks && npm run build
Incorrect:
# Running tests before building — tests validate stale plugins/
npm test
npm run buildCorrect:
# Build first, then test against fresh output
npm run build
npm test
npm run test:security
npm run typecheckKey rules:
- Run in order: build → test → security → typecheck
- Any single failure stops the checklist
- Do not skip security tests under any circumstance
- A failed build leaves
plugins/empty — re-runnpm run buildbefore retrying count validation
Validate counts and review diffs before release to catch manifest errors and stale edits — HIGH
Count Validation and Diff Review
Validate Counts
Run /validate-counts — verifies that hook/skill/agent counts in manifests match actual files across all three plugins.
- Pass: counts consistent in
ork,orkl,ork-creative - Fail: update manifests or re-run
npm run build, then retry
Diff Review
git diffScan the full diff before staging anything. Verify:
Correct:
src/hooks/src/my-hook.ts ← intended source edit
src/hooks/dist/hooks.mjs ← regenerated dist
plugins/ork/hooks/dist/hooks.mjs ← regenerated plugin dist
CHANGELOG.md ← new entry
package.json ← version bump
CLAUDE.md ← version bumpIncorrect:
src/hooks/src/my-hook.ts ← whitespace-only edit (no-op)
.env ← secret accidentally staged
plugins/ork/something.md ← direct edit to plugins/ (forbidden)Key rules:
- No edits directly to
plugins/— it is generated; changes there indicate an accidental direct edit - No secrets, credentials, or
.envfiles in the diff - No no-op whitespace-only edits — revert them before committing
plugins/dist files are expected ifnpm run buildwas run
References (1)
Release Flow
Release Flow Overview
What Constitutes a Release
A release is a version-tagged commit pushed to the remote main branch. It triggers:
- Automated changelog parsing (reads
CHANGELOG.md) - GitHub Release creation (if CI is configured)
- Plugin distribution (consumers pull the tagged version)
Every release must be reproducible: another developer should be able to check out the tag and get a working, tested plugin set.
Why the Checklist Order Matters
Build → Test → Security → Typecheck → Validate Counts → Changelog/Version → Diff → Stage → Commit → Tag → PushEach step depends on the previous:
- Tests are meaningless if run against a stale build
- Count validation reads
plugins/— must build first - Diff review happens after version bumps so the bump is included in what you stage
- Tag is created after commit so it points to the right SHA
- Push is last and irreversible — everything else must be confirmed first
Three-Plugin Consistency
OrchestKit ships three plugins from one source:
| Plugin | Skills | Agents | Description |
|---|---|---|---|
orkl | 46 | 36 | Universal toolkit |
ork-creative | 2 | 1 | Video production add-on |
ork | 63 | 36 | Full stack |
All three must have consistent counts in their manifests. The /validate-counts step catches drift between src/ and manifests/.
Hotfix vs. Normal Release
For a hotfix (urgent patch from main):
- Branch from the release tag:
git checkout -b hotfix/vX.Y.Z vX.Y.Z - Apply the fix, run the full checklist
- Bump patch version only
- Merge back to
mainanddev
The checklist steps are identical — never skip them for hotfixes.
Common Release Failures
| Symptom | Cause | Fix |
|---|---|---|
| Count mismatch | Added skill/hook but didn't update manifest | Edit manifest, re-build |
plugins/ empty | Build interrupted or not run | npm run build |
| Security test fails | New hook introduced vulnerable pattern | Fix hook, do not bypass |
| Version mismatch | Bumped package.json but forgot CLAUDE.md | Update CLAUDE.md |
| Tag already exists | Ran git tag twice | git tag -d vX.Y.Z then re-tag |
React Server Components Framework
Use when building Next.js 16+ apps with React Server Components. Covers App Router, Cache Components (replacing experimental_ppr), streaming SSR, Server Actions, and React 19 patterns for server-first architecture.
Release Management
GitHub release workflow with semantic versioning, changelogs, and release automation using gh CLI. Use when creating releases, tagging versions, or publishing changelogs.
Last updated on