skills/version-releases/SKILL.md
Use when preparing, reviewing, or documenting versioned app releases, changelogs, SemVer bumps, release commits, git tags, or tag-gated production deploys
npx skillsauth add michalvavra/agents version-releasesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Lightweight app release process: keep [Unreleased] in CHANGELOG.md, move entries to a SemVer version and date, and deploy prod from manually pushed git tags.
Core rule: the agent may prepare and validate a release. The human user creates and pushes the git tag manually. Read-only tag inspection is fine. Never create, delete, or push tags unless the user explicitly asks in this turn.
Use for private apps, deployed frontends, Workers, services, and internal tools that need readable release history without package-publishing automation. Prefer the repo's native version file and tooling. For JS/TS repos, use package.json first.
Do not use for public multi-package libraries that already have changesets, release PR automation, or package-specific release tooling.
Root app changelog. Include only subsection headings with entries. Do not carry empty headings into a released version.
# Changelog
## [Unreleased]
### Added
- ...
## [0.2.0] - 2026-04-24
### Added
- Added version-gated production deployment.
Use release headings in this form: ## [x.y.z] - YYYY-MM-DD. The bundled JS helper depends on that format.
Default subsection headings: Breaking Changes, Added, Changed, Fixed. Preserve existing subsection headings only when the changelog already has a clear style.
Follow SemVer for stable releases tagged vX.Y.Z:
| Change | Bump | | --- | --- | | Backwards-incompatible change to a public contract | major | | New backwards-compatible feature or behavior | minor | | Backwards-compatible bug fix | patch |
Pre-1.0 (0.x.y) is unstable per the spec. There is no fixed rule for breaking changes. Propose what the change actually is and let the user decide whether to bump minor or cut 1.0.0.
The first stable release is 1.0.0, not a "bump". Propose it explicitly when the public contract is declared stable.
Do not bump for formatting, local-only tooling, unrelated cleanup, or generated churn unless it affects deployable behavior.
If a repo uses prerelease or build-metadata tags, follow that repo's release tooling and update validation accordingly.
CHANGELOG.md: move relevant [Unreleased] entries to ## [x.y.z] - YYYY-MM-DD.x.y.z. For JS/TS repos, update package.json version.node scripts/validate-js-release.mjs --tag vX.Y.Z --cwd ..typecheck / test / build.chore(release): vX.Y.Z.git rev-parse HEAD, then show manual tag commands pinned to that SHA. Do not run them unless the user explicitly asks.Useful discovery commands:
git tag --merged HEAD --sort=-v:refname
git log vLAST_RELEASE..HEAD --oneline
git diff vLAST_RELEASE..HEAD
Use only release tags matching ^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$ unless the repo documents another release-tag pattern. If no release tag exists, inspect from the initial commit or from the first commit that should be included in the first documented release.
Manual lightweight tag commands to show as instructions only. The human user runs these outside the agent unless they explicitly ask the agent to run them.
git tag vX.Y.Z <release_commit_sha>
git push origin vX.Y.Z
Prod deploys must run from a release tag, not from main. Validation must check:
vX.Y.ZX.Y.Z, such as package.json for JS/TSCHANGELOG.md has ## [X.Y.Z] - YYYY-MM-DDFor GitHub Actions, keep CI, QA deploy, and prod deploy workflows separate. Use a production environment approval when prod should stay manually gated after tag push.
For Cloudflare Workers, expose build metadata that includes the deployed commit SHA. Keep it separate from the app version. See Cloudflare Workers.
The bundled scripts/validate-js-release.mjs helper is optional for JS/TS repos. It validates stable vX.Y.Z tags against package.json and CHANGELOG.md, and it does not create tags. Copy it only when the repo wants local validation. In CI, pass --tag "$GITHUB_REF_NAME". For non-JS repos, use an equivalent validator.
| Mistake | Correction |
| --- | --- |
| Agent creates, deletes, or pushes the tag | Stop. Tags are manual unless the user explicitly asks. |
| Runs npm version or equivalent to bump | Do not use it because it auto-creates a tag. Edit package.json directly. |
| Changelog version differs from the repo version source | Fix before release commit. |
| Uses dates without versions | Use versions because prod deploys are tag-gated. |
| Generates entries from commit subjects only | Inspect diffs when commit messages are vague. |
CHANGELOG.md has no section for the release version.main instead of a release tag.development
Staff-level codebase health review. Finds monolithic modules, silent failures, type safety gaps, test coverage holes, and LLM-friendliness issues.
documentation
Write AI-scannable technical documentation.
tools
CLI for Snowflake. Query data, manage warehouses, databases, schemas, tables, and stages. Use when working with Snowflake data platform.
development
Search HexDocs documentation for Elixir and Erlang packages. Use when looking up package APIs or guides.