
Release Checklist
- 118 installs
- 213 repo stars
- Updated August 4, 2026
- yonatangross/orchestkit
Run pre-release checklists covering versioning, changelogs, rollbacks, monitoring alerts, and stakeholder comms before pushing production deployments live.
About
Provides a structured release checklist for orchestkit projects covering version tagging, changelog review, deployment verification, rollback plans, monitoring setup, and launch communications before production go-live.
- Version and changelog gates
- Rollback readiness checks
- Monitoring and alert setup
- Feature flag verification
- Stakeholder comms template
Release Checklist by the numbers
- 118 all-time installs (skills.sh)
- Ranked #104 of 248 Release Management skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/yonatangross/orchestkit --skill release-checklistAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 118 |
|---|---|
| repo stars | ★ 213 |
| Last updated | August 4, 2026 |
| Repository | yonatangross/orchestkit ↗ |
What it does
Run pre-release checklists covering versioning, changelogs, rollbacks, monitoring alerts, and stakeholder comms before pushing production deployments live.
Files
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.
Load details: Read("${CLAUDE_SKILL_DIR}/references/release-flow.md") for why the order matters and hotfix guidance.
CC ≥ 2.1.118 (M122): Pre-release gate now includesclaude plugin tag <version> --dry-runto validate the manifest hierarchy. Add to the gate sequence after manifest count checks. Seesrc/skills/chain-patterns/references/plugin-tag.md.
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
1. Running npm test before npm run build — tests run against stale dist 2. Using git add -A — accidentally stages secrets or unrelated in-progress work 3. Forgetting to bump CLAUDE.md version alongside package.json 4. Pushing without explicit user confirmation — irreversible on shared remotes 5. Skipping security tests — non-negotiable, even for patch releases
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
Plugin Consistency
OrchestKit ships as a single plugin:
| Plugin | Skills | Agents | Description |
|---|---|---|---|
ork | 69 | 38 | Full toolkit |
The /validate-counts step catches drift between src/ and manifests/ork.json.
Hotfix vs. Normal Release
For a hotfix (urgent patch from main): 1. Branch from the release tag: git checkout -b hotfix/vX.Y.Z vX.Y.Z 2. Apply the fix, run the full checklist 3. Bump patch version only 4. Merge back to main and dev
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 |
Rule Categories
1. Build and Test Gates (gates-build) — CRITICAL — 1 rule
All four pre-release checks — build, full test suite, security tests, TypeScript — must pass in order before any staging or tagging.
gate-build-and-test.md— Gate sequence, pass/fail criteria, recovery steps for each check
2. Count Validation and Diff Review (gates-counts) — HIGH — 1 rule
After gates pass, verify hook/skill/agent counts are consistent across the ork plugin, then review the full diff for secrets, no-op edits, and forbidden direct edits to plugins/.
gate-counts-and-diff.md— Count validation command, diff review checklist, forbidden file patterns
3. Release Staging Rules (staging) — HIGH — 1 rule
How to stage exactly the right files for a release commit: version consistency checks, why git add -A is forbidden, and the expected file list.
commit-staging.md— Version consistency checks, explicit staging commands, expected files table
4. Commit, Tag, and Push (commit-push) — HIGH — 1 rule
Conventional commit format for release commits, annotated tag naming, and the rule that git push --follow-tags always requires explicit user confirmation.
commit-tag-push.md— Commit format with Co-Authored-By, tag naming, push confirmation requirement
[Rule Name]
[Brief description — 1-2 sentences.]
Incorrect:
// Bad patternCorrect:
// Good patternKey rules:
- [Rule 1]
- [Rule 2]
- [Rule 3]
Reference: [link]
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
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
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
Count Validation and Diff Review
Validate Counts
Run /validate-counts — verifies that hook/skill/agent counts in manifests/ork.json match actual files.
- Pass: counts consistent in
ork - 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
#!/usr/bin/env bash
# Generated by OrchestKit Claude Plugin
# Created: 2026-02-19
# pre-push-confirm.sh — Show what will be pushed and prompt for confirmation
#
# Usage: ./scripts/pre-push-confirm.sh
#
# Options:
# --help Show this help message
# --dry-run Show summary without prompting
set -euo pipefail
if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then
echo "pre-push-confirm.sh — Summarize and confirm before git push --follow-tags"
echo ""
echo "Usage: ./scripts/pre-push-confirm.sh [--dry-run]"
echo ""
echo "Options:"
echo " --dry-run Print summary without prompting"
echo " --help Show this message"
exit 0
fi
DRY_RUN=false
if [[ "${1:-}" == "--dry-run" ]]; then
DRY_RUN=true
fi
# Gather info
BRANCH=$(git branch --show-current)
REMOTE="origin"
REMOTE_URL=$(git remote get-url "$REMOTE" 2>/dev/null || echo "(no remote)")
# Commits not yet pushed
UNPUSHED=$(git log "${REMOTE}/${BRANCH}"..HEAD --oneline 2>/dev/null || git log HEAD --oneline -5)
# Tags not yet pushed
UNPUSHED_TAGS=$(git tag --list | while read -r tag; do
if ! git ls-remote --tags "$REMOTE" "$tag" 2>/dev/null | grep -q "$tag"; then
echo " $tag"
fi
done)
echo "============================="
echo " Pre-Push Summary"
echo "============================="
echo "Branch : $BRANCH"
echo "Remote : $REMOTE ($REMOTE_URL)"
echo ""
echo "Commits to push:"
echo "$UNPUSHED" | sed 's/^/ /'
echo ""
echo "Tags to push:"
if [[ -z "$UNPUSHED_TAGS" ]]; then
echo " (none)"
else
echo "$UNPUSHED_TAGS"
fi
echo "============================="
if [[ "$DRY_RUN" == "true" ]]; then
echo "(dry-run — no push executed)"
exit 0
fi
echo ""
read -r -p "Push commits and tags to $REMOTE/$BRANCH? [y/N] " CONFIRM
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
git push --follow-tags
echo "[DONE] Pushed to $REMOTE/$BRANCH"
else
echo "[CANCELLED] Push aborted."
exit 1
fi
{
"skill": "release-checklist",
"version": "2.0.0",
"testCases": [
{
"id": "clean-release",
"rule": null,
"query": "Walk me through releasing version 6.1.0",
"expectedBehavior": [
"Runs all pre-release gates sequentially: build, tests, security, TypeScript, validate-counts, diff review",
"Reports [PASS] for each gate step before proceeding to the next",
"Verifies changelog entry and version bump in package.json and CLAUDE.md",
"Stages specific files, commits with 'release: v6.1.0' format, tags, and confirms before push"
]
},
{
"id": "build-fails",
"rule": "gate-build-and-test",
"query": "Start the release checklist for v6.1.0",
"expectedBehavior": [
"Runs npm run build as step 1 and detects failure",
"Reports [FAIL] for the build step and stops the release sequence",
"Suggests a fix (e.g., check TypeScript errors, run cd src/hooks && npm run build)",
"Does not proceed to tests or further gates until user confirms the build is fixed"
]
},
{
"id": "tests-fail",
"rule": "gate-build-and-test",
"query": "Run the release checklist \u2014 build passed but tests are failing",
"expectedBehavior": [
"Skips build step if user confirms it already passed",
"Runs npm test and detects test failures",
"Reports [FAIL] for tests and stops before security or later gates",
"Refuses to continue with release until tests pass \u2014 security tests are non-negotiable"
]
},
{
"id": "version-not-bumped",
"rule": "commit-staging",
"query": "Checklist says version bump \u2014 I updated package.json but forgot CLAUDE.md",
"expectedBehavior": [
"Checks both package.json and CLAUDE.md for version field",
"Detects that CLAUDE.md version does not match package.json version",
"Reports [FAIL] for the version bump step and stops the commit staging sequence",
"Instructs the user to update the Version line in CLAUDE.md to match package.json"
]
},
{
"id": "changelog-missing",
"rule": "commit-staging",
"query": "I'm ready to cut the release but haven't written the changelog entry yet",
"expectedBehavior": [
"Checks CHANGELOG.md for an entry matching the target version",
"Reports [FAIL] for the changelog step when no matching entry is found",
"Stops before staging files or writing the release commit",
"Prompts the user to add a changelog entry before continuing"
]
},
{
"id": "commit-tag-push",
"rule": "commit-tag-push",
"query": "What is the correct format for release commits, tags, and push to avoid breaking CI?",
"expectedBehavior": [
"Uses conventional commit format: release: vX.Y.Z as the commit message subject line",
"Creates annotated git tag matching the version number in the release commit message",
"Requires user confirmation before pushing to the shared remote repository",
"Includes Co-Authored-By trailer in the release commit following project conventions"
]
},
{
"id": "gate-counts-and-diff",
"rule": "gate-counts-and-diff",
"query": "Before staging the release, how do I verify the counts and diff are clean?",
"expectedBehavior": [
"Runs validate-counts to verify hook, skill, and agent counts match actual files",
"Reviews the full git diff before staging to catch stale or no-op edits in the release",
"Verifies that manifest counts in ork.json are consistent with source file counts",
"Blocks staging if counts are inconsistent until manifests are updated or build is rerun"
]
}
]
}