release-prep — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited release-prep (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
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 /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 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.
| 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 |
No-surface verdicts ("no auditable UI surface", "no localization surface", "no personal-data surface") pass their gate.
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.
The repository merges by squash only, with the PR title as the squash commit title (gh api repos/{owner}/{repo} → squash_merge_commit_title: PR_TITLE), so release-please reads the PR title, not the branch's commit subjects. Auto-merge is the exception: it squashes with the commit headline captured when auto-merge was enabled, and a later retitle does not update it. The types, from highest impact to lowest:
feat!: or a BREAKING CHANGE: footer — major bumpfeat: — minor bumpfix: — patch bumpchore:, docs:, refactor:, ci: — no bumpgit log main..HEAD --format='%s%n%b'
gh pr view --json title --jq .title
gh pr view --json number,autoMergeRequest --jq '[.number, .autoMergeRequest.commitHeadline]'Find the highest-impact type among the branch's commits (subjects and BREAKING CHANGE: footers). The PR title must be a conventional commit carrying that type. A title with a lower type, or no conventional type: stop; instruct the user to retitle the PR (gh pr edit --title "<type>: <summary>"). With no PR open yet, report the type the title must carry.
When autoMergeRequest is non-null, its commitHeadline is the subject that lands on main. It must equal the PR title, or the title followed by (#<number>). Any other headline: stop and report it as blocking; instruct the user to disable and re-enable auto-merge (gh pr merge --disable-auto, then gh pr merge --auto --squash) so it captures the current title. Do not require a manual CHANGELOG.md entry — release-please manages the changelog.
Check .github/workflows/validate-skills.yml passed on the current commit. Failing CI: stop and report which checks failed.
After all steps pass, present:
✅ All release gates passed.
[✓] validate-skills — no skill errors; all version files in sync at vX.Y.Z
[✓] all audit gates — no open Critical/High findings (see INDEX.md)
[✓] /nitpicker release-gate — PASS (threshold High)
[✓] PR title — carries the highest-impact type among the branch's commits
[✓] 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.Then ask:
Create a PR for these changes? (y/n) [default: n]
n or no answer: stop; inform the user no PR was created. y: open a PR titled with the highest-impact type found in Step 4 and described from the branch's commit messages. Do not bump versions, create tags, or push beyond what is staged.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.