From documentation-review
Generate, update, review, and maintain changelogs using Keep a Changelog format, semantic-release, and conventional commits. Use this skill whenever the user wants to add a changelog entry, prepare release notes, document version changes, generate a changelog from git history, configure semantic-release, understand conventional commit mappings, review changelog format, create migration guides for breaking changes, or troubleshoot semantic-release issues. Also applies when discussing version bumps, release automation, CHANGELOG.md formatting, or any task involving documenting what changed between software versions. If the user mentions "changelog", "release notes", "version history", "what changed", "semantic-release", or "conventional commits", this skill likely applies. Also covers "what's new", "upgrade guide", and "release history" queries.
How this skill is triggered — by the user, by Claude, or both
Slash command
/documentation-review:changelogThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Changelogs are the primary way users understand what changed between versions. A good changelog builds trust, reduces support tickets, and makes upgrade decisions easier. This skill covers the full lifecycle: format, generation, automation, and maintenance.
Changelogs are the primary way users understand what changed between versions. A good changelog builds trust, reduces support tickets, and makes upgrade decisions easier. This skill covers the full lifecycle: format, generation, automation, and maintenance.
Every version entry in a Keep a Changelog file requires a comparison link at the bottom of the file. This is the most commonly forgotten element and breaks the linkability that makes changelogs useful. Always include them:
[Unreleased]: https://github.com/org/repo/compare/v1.2.0...HEAD
[1.2.0]: https://github.com/org/repo/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/org/repo/releases/tag/v1.1.0
When adding a new version entry, update both the new version's link AND the [Unreleased] link to point to the new tag.
The recommended approach combines Keep a Changelog format with semantic-release for automation. This pairing works because Keep a Changelog is human-readable and widely recognized, while semantic-release eliminates manual version management:
The project follows Keep a Changelog format:
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- New feature description
### Changed
- Change description
### Deprecated
- Deprecated feature notice
### Removed
- Removed feature notice
### Fixed
- Bug fix description
### Security
- Security fix description
## [1.2.0] - 2024-01-15
### Added
- Add blog post generation with Gemini AI
- Add social media integration (Discord, LinkedIn, Telegram, Twitter)
### Changed
- Update Next.js to v16
- Migrate to Cache Components mode
### Fixed
- Fix database connection timeout issue
- Fix chart rendering on mobile devices
## [1.1.0] - 2024-01-01
### Added
- Add COE bidding results endpoint
- Add interactive charts with Recharts
### Fixed
- Fix pagination in car makes endpoint
## [1.0.0] - 2023-12-15
### Added
- Initial release
- Car registration data API
- Next.js web application
- PostgreSQL database with Drizzle ORM
- Redis caching
- SST v3 infrastructure
[Unreleased]: https://github.com/username/repo/compare/v1.2.0...HEAD
[1.2.0]: https://github.com/username/repo/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/username/repo/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/username/repo/releases/tag/v1.0.0
The release rules below separate user-visible changes (feat, fix, perf, revert → trigger releases) from internal changes (docs, style, chore, refactor, test, build, ci → no release). This prevents version noise from changes that don't affect consumers.
{
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/github",
"@semantic-release/git"
],
"preset": "conventionalcommits",
"releaseRules": [
{ "type": "feat", "release": "minor" },
{ "type": "fix", "release": "patch" },
{ "type": "perf", "release": "patch" },
{ "type": "revert", "release": "patch" },
{ "type": "docs", "release": false },
{ "type": "style", "release": false },
{ "type": "chore", "release": false },
{ "type": "refactor", "release": false },
{ "type": "test", "release": false },
{ "type": "build", "release": false },
{ "type": "ci", "release": false }
],
"parserOpts": {
"noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES"]
}
}
# .github/workflows/release.yml
name: Release
on:
push:
branches:
- main
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
issues: write
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false
- uses: pnpm/action-setup@v2
- uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
- run: pnpm install
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npx semantic-release
Add entries under the [Unreleased] section as work is merged. This keeps the changelog current without waiting for release time.
## [1.3.0] - 2024-02-01
### Added
- Add user authentication
- Add admin panel
### Changed
- Upgrade Next.js to v16.1.0
- Update database schema
### Fixed
- Fix memory leak in cache
- Fix broken links in documentation
### Security
- Update vulnerable dependencies
| Commit Type | Changelog Section | Version Bump |
|---|---|---|
feat: | Added | Minor (0.x.0) |
fix: | Fixed | Patch (0.0.x) |
perf: | Performance | Patch |
refactor: | Changed | None |
docs: | Documentation | None |
style: | Changed | None |
test: | None | None |
chore: | None | None |
build: | None | None |
ci: | None | None |
revert: | Fixed | Patch |
BREAKING CHANGE | Breaking Changes | Major (x.0.0) |
## [1.2.0] - 2024-01-15
### Added
- **Blog Generation**: Automatically generate blog posts from car registration data using Google Gemini AI
- Configurable prompts for different content styles
- Automatic SEO optimization
- Support for custom topics
- **Social Media Integration**: Post updates to Discord, LinkedIn, Telegram, and Twitter
- Automated posting when new data is available
- Customizable message templates
- Rate limiting support
### Fixed
- **Database**: Fix connection timeout issue when processing large datasets
- Increased connection pool size
- Added connection retry logic
- Improved error handling
- **Charts**: Fix chart rendering on mobile devices
- Updated responsive breakpoints
- Fixed touch event handling
- Improved performance on low-end devices
## [2.0.0] - 2024-03-01
### BREAKING CHANGES
- **API**: Changed authentication method from API keys to JWT tokens
- Migration guide: https://docs.sgcarstrends.com/migration/v2
- API keys deprecated and will be removed in v2.1.0
- Update clients to use new authentication flow
- **Database**: Renamed `cars` table to `vehicle_registrations`
- Run migration: `pnpm db:migrate`
- Update queries to use new table name
- Backward compatibility maintained until v2.1.0
### Added
- New authentication system with JWT tokens
- Support for refresh tokens
The goal is entries that help users decide whether to upgrade and what to watch out for. Vague entries ("fixed bugs") are worse than no entries — they signal carelessness.
Write for users, not developers. Include what changed and why it matters:
Keep all features under Added, all fixes under Fixed. Don't interleave types.
For significant changes, add sub-bullets with impact, root cause, or performance data. Users making upgrade decisions need this context.
Reference the PR or issue number for traceability: ([#123](url))
# Preview without releasing
npx semantic-release --dry-run
# Lint CHANGELOG.md format
pnpm markdownlint CHANGELOG.md
For detailed generation commands, validation scripts, and local viewing tips, see references/semantic-release-config.md.
When creating breaking changes, include a migration guide:
## [2.0.0] - 2024-03-01
### BREAKING CHANGES
#### Authentication Method Changed
**What changed:**
- API authentication now uses JWT tokens instead of API keys
**Migration steps:**
1. **Update client code** to use new authentication:
```javascript
// Before
headers: { 'X-API-Key': 'your-key' }
// After
headers: { 'Authorization': 'Bearer your-jwt-token' }
\```
2. **Obtain JWT token** from new `/auth/login` endpoint:
```bash
curl -X POST https://api.sgcarstrends.com/auth/login \
-H 'Content-Type: application/json' \
-d '{"username":"user","password":"pass"}'
\```
3. **Update environment variables**:
```bash
# Remove
API_KEY=your-old-key
# Add
JWT_SECRET=your-jwt-secret
\```
**Timeline:**
- API keys supported until: **April 1, 2024**
- Must migrate by: **March 31, 2024**
**Support:**
- Questions: [GitHub Discussions](https://github.com/username/repo/discussions)
- Issues: [GitHub Issues](https://github.com/username/repo/issues)
Common causes: no conventional commits since last release, wrong branch, or missing GITHUB_TOKEN. Check git log --oneline to verify commit format and git branch to verify you're on the release branch.
Clean up manually, then commit: git commit -m "docs: remove duplicate changelog entries"
For detailed guidance, consult:
references/semantic-release-config.md - Advanced semantic-release configuration patternsreferences/conventional-commits-mapping.md - Mapping from commit types to changelog sectionsWorking examples in examples/:
sample-changelog.md - Complete changelog following Keep a Changelog formatCHANGELOG.md - Project changelog.releaserc.json - Semantic release configAutomate generation with semantic-release, write clear user-focused entries, group by change type, highlight breaking changes prominently with migration guides, and link to issues/PRs for traceability.
npx claudepluginhub zircote-plugins/documentation-reviewAutomates changelog generation from Git commits, PRs, and releases in Keep a Changelog format using Conventional Commits and Semantic Versioning for release workflows.
Automate changelog generation from commits, PRs, and releases following Keep a Changelog format. Use when setting up release workflows or standardizing commit conventions.
Automates changelog generation from commits, PRs, and releases following Keep a Changelog format. Use for release workflows, release notes, or commit conventions.