release-prep · diff
git:20260706.679e74c to git:20260710.dc3c074
70 added, 210 removed. Audit A to A.
---
name: release-prep
description: Use when validating that all changes in the current branch are ready to be included in a release PR managed by release-please automation.
disable-model-invocation: true
---
# Release Prep Checklist
- Validates that the repository is in a clean, releasable state. Does **not** create
- tags, bump versions, or push commits — release-please automation manages all of that
- from `main`. The only action this skill takes beyond validation is offering to open a
- PR, and only after every gate passes and the user explicitly approves.
-
- Run these steps in order. **Stop immediately and report findings to the user if any
- step fails.** Do not proceed to the next step.
-
- ## Step 1 — Validate All Skills and Version Sync
-
- Run `/validate-skills`. This validates both public skills (`skills/*/SKILL.md`) and
- internal skills (`.claude/skills/*/SKILL.md`), and also runs the version-sync check
- (`scripts/check-version-sync.py`).
-
- If any **errors** are reported from skill validation: stop. Report the list of errors
- to the user. Do not proceed until they are resolved.
-
- Warnings must be reviewed; fix any that relate to skills being changed in this branch.
-
- If version sync fails: stop. Report which files differ and what their versions are.
- Do not proceed.
-
- ## Step 2 — Security Scan
-
- Run `/security-auditor`. If any Critical or High finding remains open after the scan:
- stop. Report the findings to the user. Do not proceed.
-
- ## Step 3 — Documentation Accuracy
-
- Run `/doc-auditor`. If any Critical finding remains open: stop. Report the findings.
- High findings (missing API/boundary docs) must also be resolved before proceeding.
- Medium and below may be deferred but must be tracked in `docs/audit/doc-findings.md`.
-
- ## Step 4 — Architecture Integrity
-
- If `docs/audit/arch-profile.md` does not exist or is stale for the current branch,
- run `/arch-detector` first to refresh it. Determine staleness from Git metadata, not
- filesystem mtime (which git checkouts do not preserve): the profile is stale when
- the most recent commit touching it
- (`git log -1 --format=%ct -- docs/audit/arch-profile.md`) is older than the branch's
- oldest commit (`git log --format=%ct main..HEAD | tail -1`), or — if git has no
- record of the file — when the `Generated:` date inside it predates that commit.
- Then run `/arch-auditor`. If any Critical or High finding remains open: stop. Report
- the findings. Do not proceed.
-
- ## Step 5 — Exhaustive Code Review
-
- Run `/nitpicker` in `release-gate` mode (threshold: High). If any Critical or High
- finding remains open after fixes are applied: stop. Report the findings. Do not
- proceed.
-
- ## Step 6 — Enforcement Surface Loopholes
-
- Run `/loophole-hunter`. This audits the repository's own Claude Code enforcement surface
- (`.claude/rules/`, hook scripts, `.claude/settings.json` wiring, permissions, and every
- `SKILL.md`) for bypassable or unenforced constraints. If any Critical or High finding
- remains open after fixes are applied: stop. Report the findings. Do not proceed.
-
- ## Step 7 — Hook Coverage
-
- Run `/hooks-enforcer`. This audits hook *coverage* against the repository's evidence base
- (current hook wiring, the `docs/audit/*-findings.md` history, git history, and project
- memory) for recurring failures no hook guards and context-discipline gaps where large-output
- work bypasses a context-saving tool. If any Critical or High finding remains open after fixes
- are applied: stop. Report the findings. Do not proceed.
-
- ## Step 8 — Performance
-
- Run `/perf-auditor`. This hunts N+1 queries, O(n²)+ hotspots on real data paths, sync-blocking
- calls in async contexts, unbounded caches/queues/retries, missing pagination, and chatty
- per-item I/O. If any Critical or High finding remains open after fixes are applied: stop. Report
- the findings. Do not proceed.
-
- ## Step 9 — Test-Suite Strength
-
- Run `/test-auditor`. This audits the test suite itself for assertion-free and tautological tests,
- mocks of the unit under test, severed code paths, flaky patterns, untracked skips, and coverage
- holes on money/security/data-loss paths. If any Critical or High finding remains open after fixes
- are applied: stop. Report the findings. Do not proceed.
-
- ## Step 10 — Dependency Health
-
- Run `/dep-auditor`. This audits dependency health beyond CVEs — unused, phantom, duplicate,
- heavyweight, unmaintained, license-conflicting, drifted, and misclassified dependencies. If any
- Critical or High finding remains open after fixes are applied: stop. Report the findings. Do not
- proceed.
-
- ## Step 11 — Error Handling
-
- Run `/silent-failure-hunter`. This audits application error handling for swallowed exceptions,
- fail-open defaults, overbroad catches, ignored error signals, masking fallbacks, silent retries,
- and cause-destroying rethrows. If any Critical or High finding remains open after fixes are
- applied: stop. Report the findings. Do not proceed.
-
- ## Step 12 — Migration Safety
-
- Run `/migration-auditor`. This audits database schema and data migrations for destructive ops
- with no rollout story, irreversible downs, long-lock operations, missing FK indexes, schema-model
- drift, unbatched data migrations, and deploy-order breaks. If any Critical or High finding remains
- open after fixes are applied: stop. Report the findings. Do not proceed.
-
- ## Step 13 — Observability
-
- Run `/observability-auditor`. This audits the emitted signal surface for dark paths, missing
- correlation IDs, level misuse, unfireable alerts, cardinality bombs, PII in logs, silent jobs, and
- context-free errors. If any Critical or High finding remains open after fixes are applied: stop.
- Report the findings. Do not proceed.
-
- ## Step 14 — API Contract
-
- Run `/api-contract-auditor`. This audits the declared public contract surface (OpenAPI/GraphQL
- specs, package exports, published types, CLI flags) against the implementation, and every surface
- change since the last release tag against the semver bump the commits declare. If any Critical or
- High finding remains open after fixes are applied: stop. Report the findings. Do not proceed.
-
- ## Step 15 — Accessibility
-
- Run `/a11y-auditor`. This audits the UI layer against WCAG 2.2 AA — missing alternatives,
- unlabeled controls, keyboard-unreachable handlers, focus loss, ARIA misuse, contrast violations,
- structure breaks, and motion hazards. A repo with no UI surface returns the explicit verdict "no
- auditable UI surface". If any Critical or High finding remains open after fixes are applied: stop.
- Report the findings. Do not proceed.
-
- ## Step 16 — CI/CD Pipeline
-
- Run `/ci-auditor`. This audits CI/CD pipeline definitions for unpinned actions, over-broad token
- permissions, script injection via untrusted interpolation, privileged-trigger misuse, secrets
- leakage, non-gating checks, masked failures, missing concurrency, cache poisoning, and self-hosted
- runner exposure. If any Critical or High finding remains open after fixes are applied: stop. Report
- the findings. Do not proceed.
-
- ## Step 17 — Commit Discipline
-
- Run `/commit-auditor`. This audits every commit message on the branch against its actual diff for
- type-understatement, type-overstatement, unmarked and spurious breaking changes, squash-title
- scope-lies, and malformed convention that mis-version a release-please release. If any Critical or
- High finding remains open after fixes are applied: stop. Report the findings. Do not proceed.
-
- ## Step 18 — Concurrency Safety
-
- Run `/concurrency-auditor`. This hunts data races, non-atomic check-then-act, deadlock-ordering, lost updates, unsafe publication, and shared-state-across-await. If any Critical or High finding remains open after fixes are applied: stop. Report the findings. Do not proceed.
+ Validates that the repository is in a clean, releasable state. Does **not**
+ create tags, bump versions, or push commits — release-please automation
+ manages all of that from `main`. The only action beyond validation is
+ offering to open a PR, and only after every gate passes and the user
+ explicitly approves.
- ## Step 19 — Internationalization
+ Run the steps in order. **Stop immediately and report findings to the user
+ if any step fails.** Do not proceed to the next step.
- Run `/i18n-auditor`. This audits the localization surface for hardcoded user-facing strings, locale-unsafe number/currency/date formatting, timezone-naive datetimes, mistranslating concatenation, and missing plural rules; a repo with no localization surface returns the explicit no-surface verdict. If any Critical or High finding remains open after fixes are applied: stop. Report the findings. Do not proceed.
+ ## Step 1 — Validate Skills and Version Sync
- ## Step 20 — Resource Lifecycle
+ Run `/validate-skills`. It validates the public skill (router + command
+ files) and internal skills, plus the version-sync check
+ (`scripts/check-version-sync.py`). Any error: stop and report. Warnings
+ touching files changed in this branch must be fixed.
- Run `/resource-leak-auditor`. This hunts acquire-without-guaranteed-release on failure paths — unclosed handles, pool connections not returned on error, listener/subscription leaks, orphaned tasks, and temp-artifact leaks. If any Critical or High finding remains open after fixes are applied: stop. Report the findings. Do not proceed.
+ ## Step 2 — Audit Gates
- ## Step 21 — Configuration
+ Run each gate command in this order. A gate passes when no Critical or High
+ finding remains open in the findings store after fixes are applied
+ (`python3 skills/nitpicker/scripts/findings.py list --status open`).
+ Any gate with an open Critical/High finding: stop and report.
- Run `/config-auditor`. This audits application/runtime configuration for undocumented vars, missing startup validation, unsafe production defaults, config drift, committed secrets, and string coercion traps. If any Critical or High finding remains open after fixes are applied: stop. Report the findings. Do not proceed.
+ | Gate | Command |
+ | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
+ | Security | `/nitpicker security` |
+ | Documentation accuracy | `/nitpicker docs` (Critical and High must be resolved; Medium and below may be deferred as open findings) |
+ | Architecture | `/nitpicker arch` (refreshes the profile via `/nitpicker arch-profile` when missing or stale — staleness per that command's git-metadata rule) |
+ | Exhaustive review | `/nitpicker audit` |
+ | Enforcement loopholes | `/nitpicker agent-loopholes` |
+ | Hook coverage | `/nitpicker agent-hooks` |
+ | Performance | `/nitpicker perf` |
+ | Test-suite strength | `/nitpicker tests` |
+ | Dependency health | `/nitpicker deps` |
+ | Error handling | `/nitpicker errors` |
+ | Migration safety | `/nitpicker migrations` |
+ | Observability | `/nitpicker observability` |
+ | API contract | `/nitpicker contract` |
+ | Accessibility | `/nitpicker a11y` |
+ | CI/CD pipeline | `/nitpicker ci` |
+ | Commit discipline | `/nitpicker commits` |
+ | Concurrency safety | `/nitpicker concurrency` |
+ | Internationalization | `/nitpicker i18n` |
+ | Resource lifecycle | `/nitpicker leaks` |
+ | Configuration | `/nitpicker config` |
+ | Data privacy | `/nitpicker privacy` |
+ | Unwired implementations | `/nitpicker unwired` |
- ## Step 22 — Data Privacy
+ No-surface verdicts ("no auditable UI surface", "no localization surface",
+ "no personal-data surface") pass their gate.
- Run `/data-privacy-auditor`. This audits the personal-data surface for unprotected PII at rest, flows to uncontrolled sinks, over-collection, missing retention/consent, and weak anonymization; a repo handling no personal data returns the explicit no-surface verdict. If any Critical or High finding remains open after fixes are applied: stop. Report the findings. Do not proceed.
+ ## Step 3 — Release Gate
- ## Step 23 — Verify Conventional Commits
+ Run `/nitpicker release-gate`. It fails on any open finding at High or above
+ across all auditors — this is the aggregate backstop after the per-gate
+ fixes. If it fails: stop and report.
- Confirm every commit on this branch follows the conventional commits format that
- release-please uses to determine the version bump and generate release notes:
+ ## Step 4 — Verify Conventional Commits
- - `feat:` — new feature (minor bump)
- - `fix:` — bug fix (patch bump)
- - `feat!:` or `BREAKING CHANGE:` footer — breaking change (major bump)
- - `chore:`, `docs:`, `refactor:` — no version bump
+ Confirm every commit on this branch follows the conventional commits format
+ release-please uses for version bumps and release notes:
- Check the commit log with:
+ - `feat:` — minor bump; `fix:` — patch bump
+ - `feat!:` or `BREAKING CHANGE:` footer — major bump
+ - `chore:`, `docs:`, `refactor:` — no bump
```bash
git log main..HEAD --oneline
```
- If any commit message does not follow conventional commits format: stop. Instruct the user to fix all non-conforming messages using:
-
- ```bash
- git rebase -i main
- # Mark each bad commit as 'reword' to rename it.
- ```
-
- Do not proceed until all commit messages are valid — release-please generates
- `CHANGELOG.md` and the version bump automatically from these messages when the PR
- merges to `main`.
-
- Do **not** require or check for a manually-written `CHANGELOG.md` entry; release-please
- manages the changelog.
+ Any non-conforming message: stop; instruct the user to reword via
+ `git rebase -i main`. Do **not** require a manual `CHANGELOG.md` entry —
+ release-please manages the changelog.
- ## Step 24 — Confirm CI Is Green
+ ## Step 5 — Confirm CI Is Green
- Check `.github/workflows/validate-skills.yml` passed on the current commit. If CI is
- failing: stop. Report which checks failed. Do not proceed.
+ Check `.github/workflows/validate-skills.yml` passed on the current commit.
+ Failing CI: stop and report which checks failed.
## Gate Summary
- After all steps pass, present this summary to the user:
+ After all steps pass, present:
- ```
+ ```text
✅ All release gates passed.
- Steps completed:
[✓] validate-skills — no skill errors; all 5 version files in sync at vX.Y.Z
- [✓] security-auditor — no Critical/High findings
- [✓] doc-auditor — no Critical/High findings
- [✓] arch-auditor — no Critical/High findings
- [✓] nitpicker release-gate — no Critical/High findings
- [✓] loophole-hunter — no Critical/High enforcement-surface findings
- [✓] hooks-enforcer — no Critical/High hook-coverage findings
- [✓] perf-auditor — no Critical/High findings
- [✓] test-auditor — no Critical/High findings
- [✓] dep-auditor — no Critical/High findings
- [✓] silent-failure-hunter — no Critical/High findings
- [✓] migration-auditor — no Critical/High findings
- [✓] observability-auditor — no Critical/High findings
- [✓] api-contract-auditor — no Critical/High findings
- [✓] a11y-auditor — no Critical/High findings
- [✓] ci-auditor — no Critical/High findings
- [✓] commit-auditor — no Critical/High findings
- [✓] concurrency-auditor — no Critical/High findings
- [✓] i18n-auditor — no Critical/High findings
- [✓] resource-leak-auditor — no Critical/High findings
- [✓] config-auditor — no Critical/High findings
- [✓] data-privacy-auditor — no Critical/High findings
+ [✓] all audit gates — no open Critical/High findings (see INDEX.md)
+ [✓] /nitpicker release-gate — PASS (threshold High)
[✓] conventional commits — all commits on branch use valid format
[✓] CI — validate-skills.yml passing
- Release-please automation will create the Release PR when these changes are merged
- to main. No manual version bump or tagging is needed.
+ Release-please automation will create the Release PR when these changes are
+ merged to main. No manual version bump or tagging is needed.
```
Then ask:
> **Create a PR for these changes? (y/n) [default: n]**
- If the user answers `n` or gives no answer: stop. Inform the user that no PR was
- created and the branch is ready whenever they choose to open one.
-
- If the user answers `y`: open a PR using the conventional commit messages on the
- branch to populate the title and description. Do **not** bump versions, create tags,
- or push commits beyond what is already staged.
+ `n` or no answer: stop; inform the user no PR was created. `y`: open a PR
+ using the branch's conventional commit messages for title and description.
+ Do **not** bump versions, create tags, or push beyond what is staged.
## What This Skill Does NOT Do
- - Does not bump version numbers (release-please reads conventional commits and bumps
- automatically when the release PR is merged)
- - Does not create git tags (release-please creates the tag when the Release PR merges)
- - Does not push commits or tags
- - Does not create a GitHub Release (release-please creates it after the tag)
+ - Does not bump version numbers, create git tags, or push commits/tags
+ - Does not create a GitHub Release (release-please does, after the tag)