changelog-generatorlisted
Install: claude install-skill tmj-90/gaffer
# Generate consistent, auditable release notes
Conventional Commits → semantic bump → Keep a Changelog. Three steps, always in order.
## Conventional Commit → Semantic Bump
| Commit type | Bump |
|-------------|------|
| `feat:` | MINOR |
| `fix:`, `perf:` | PATCH |
| `BREAKING CHANGE:` footer or `!` suffix | MAJOR |
| `refactor:`, `docs:`, `chore:`, `ci:`, `test:` | No version bump |
Multiple commits in a release: take the highest-ranking bump. One `feat:` in a release of ten `fix:` commits → MINOR bump.
## Keep a Changelog sections
```markdown
## [1.4.0] — 2026-06-28
### Added
- feat commits
### Changed
- refactor commits; BREAKING CHANGE goes here with migration note
### Deprecated
### Removed
### Fixed
- fix commits
### Security
- security commits
```
Use ISO 8601 dates (`YYYY-MM-DD`). Link version headers to the git tag diff URL.
## Git range commands
```bash
# Commits between two tags
git log v1.3.0..v1.4.0 --pretty=format:'%s'
# Commits since last tag to HEAD
git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:'%s'
# With author and hash (for detailed notes)
git log v1.3.0..v1.4.0 --pretty=format:'%h %an %s'
```
## CI integration pattern
```yaml
# .github/workflows/release.yml (excerpt)
- name: Generate changelog
run: |
git log ${{ env.PREV_TAG }}..HEAD --pretty=format:'%s' \
| python scripts/generate_changelog.py \
--next-version ${{ env.NEXT_VERSION }} \
--format markdown >> CHANGELOG.md
```
Block the pipel