# Release

Cut a brooks-lint release: set the version in package.json, propagate it across all...

- Repository: https://github.com/hyhmrright/brooks-lint (1554 stars)
- Category: Git and review
- License: MIT
- Last updated: 2026-10-26
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add hyhmrright/brooks-lint --skill release -g -a claude-code -y`
Codex: `npx skills add hyhmrright/brooks-lint --skill release -g -a codex -y`
Cursor: `npx skills add hyhmrright/brooks-lint --skill release -g -a cursor -y`
Gemini CLI: `npx skills add hyhmrright/brooks-lint --skill release -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add hyhmrright/brooks-lint`

## Description

Cut a brooks-lint release: set the version in package.json, propagate it across all four plugin manifests and every version-bearing text file (README badges, docs site metadata), write the CHANGELOG entry, validate, then commit, push, tag, and publish the GitHub release. Triggers when the maintainer asks to "release", "cut a release", "ship a new version", or "bump and publish" brooks-lint. Do NOT trigger for: propagating an already-decided version without releasing (use `npm run bump` directly), CHANGELOG edits alone, or questions about the release process that don't ask to perform it.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# brooks-lint, Release

Target version comes from the user request (e.g. `1.4.0`). If empty, ask the maintainer
for the semver bump before doing anything.

**Before accepting that version, read the backlog.** Run
`npm run changelog:audit` and look at what is actually unreleased, the bump is decided by the whole range, not by the change
that prompted the release. If the range contains a feature or a new platform and
the maintainer asked for a patch, stop and say so: v1.5.1 was published, then
deleted and re-cut as v1.6.0 because twenty unreleased commits (including a new
platform) had been swept into a patch.

Execute these steps in order. `bump-version.mjs` reads the version FROM
`package.json` and does NOT touch the changelog, so the version edit and the
CHANGELOG entry are manual; the script only fans the version out to the manifests
and every version-bearing text file.

1. **Set the source of truth.** `npm version <version> --no-git-tag-version`
   (the `--no-git-tag-version` flag is required, plain `npm version` would create
   its own commit + tag and collide with the manual commit in step 5).
2. **Propagate.** `npm run bump`, writes the version into
   `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`,
   `.codex-plugin/plugin.json`, `gemini-extension.json`, and every version-bearing
   text file discovered by `scripts/version-refs.mjs` (all six README badges and action `uses:` pins,
   the JSON-LD `softwareVersion` on the docs landing page, and
   `docs/github-action-example.yml`). Do not maintain a list
   here, the script's is authoritative.
3. **Write the changelog.** Add a new section at the top of `CHANGELOG.md` with
   categorized notes (Added / Fixed / Changed) summarizing the commits since the
   last release tag. The heading MUST be `## [<version>] - YYYY-MM-DD`, `npm run validate` parses that exact shape and fails on a bare `## <version>`.
3a. **Audit the range, every commit, no sampling.** Run:

The rest: https://github.com/hyhmrright/brooks-lint/blob/HEAD/.agents/skills/release/SKILL.md
