From skillry-documentation-and-tech-writing
Use when you need to write or audit a CHANGELOG and human-facing release notes — applying Keep a Changelog structure, deriving entries from conventional commits, choosing the correct semver bump, and writing clear breaking-change and migration notes.
How this skill is triggered — by the user, by Claude, or both
Slash command
/skillry-documentation-and-tech-writing:303-changelog-and-release-notesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Maintain a trustworthy CHANGELOG and produce human-readable release notes for each version. Use the Keep a Changelog format for the structured file, derive draft entries from conventional commit messages, select the correct Semantic Versioning bump (major/minor/patch) from the nature of the changes, and write explicit breaking-change and migration sections so upgraders are never surprised. The ...
Maintain a trustworthy CHANGELOG and produce human-readable release notes for each version. Use the Keep a Changelog format for the structured file, derive draft entries from conventional commit messages, select the correct Semantic Versioning bump (major/minor/patch) from the nature of the changes, and write explicit breaking-change and migration sections so upgraders are never surprised. The CHANGELOG is the durable record; release notes are the friendly announcement built from it.
Unreleased section.# Last released tag and the commit range since
git describe --tags --abbrev=0 2>/dev/null
LAST=$(git describe --tags --abbrev=0 2>/dev/null)
git log "${LAST}..HEAD" --pretty=format:'%h %s' --no-merges
# Group commits by conventional-commit type
git log "${LAST}..HEAD" --pretty=format:'%s' --no-merges \
| grep -oE '^(feat|fix|docs|perf|refactor|build|chore|test)(\([^)]+\))?(!)?:' \
| sort | uniq -c | sort -rn
feat: present, no breaking change → minor (1.4.0 → 1.5.0).fix: / perf: / internal → patch (1.4.0 → 1.4.1).! marker or BREAKING CHANGE: footer → major (1.4.0 → 2.0.0).# Surface breaking changes explicitly
git log "${LAST}..HEAD" --pretty=format:'%h %s%n%b' --no-merges \
| grep -iE 'BREAKING CHANGE|!:' -B1
feat: → Added/Changed; fix: → Fixed; security patches → Security; deprecations → Deprecated; removals → Removed. Rewrite each terse commit subject into a user-facing sentence ("what changed for you"), not the internal mechanics.
Promote Unreleased to a versioned, dated section and open a fresh Unreleased.
For every breaking change: state what broke, why, and the exact before/after steps to migrate. Include the minimum diff a consumer applies.
# Create the annotated tag and a GitHub release using the CHANGELOG section
git tag -a v1.5.0 -m "v1.5.0"
gh release create v1.5.0 --notes-file <(sed -n '/## \[1.5.0\]/,/## \[/p' CHANGELOG.md)
Unreleased section exists at the top for in-flight work.YYYY-MM-DD).# Changelog
All notable changes to this project are documented here.
Format: Keep a Changelog. Versioning: Semantic Versioning.
## [Unreleased]
## [1.5.0] - 2026-06-01
### Added
- Bulk export endpoint `POST /v1/exports`.
### Changed
- **BREAKING:** `GET /v1/items` now paginates by default (max 100/page).
### Fixed
- Timezone offset miscalculated for `created_at` near DST boundaries.
### Security
- Upgraded `lib-x` to patch CVE-2026-0001.
### Migration (1.4 → 1.5)
`GET /v1/items` returns at most 100 items. To restore full lists, page through results:
# before
GET /v1/items
# after
GET /v1/items?page=1&per_page=100 # repeat until `next` is null
[Unreleased]: https://example.com/compare/v1.5.0...HEAD
[1.5.0]: https://example.com/compare/v1.4.0...v1.5.0
# Conventional commit shape that feeds the above
feat(api): add bulk export endpoint
fix(time): correct created_at offset around DST
refactor(items)!: paginate list endpoint by default
BREAKING CHANGE: GET /v1/items now returns at most 100 items per page.
git log subjects as the changelog (mechanism, not user effect).Unreleased section that no one updates per PR.Produce: (1) the recommended semver bump with the reason; (2) the new dated CHANGELOG section in Keep a Changelog format; (3) explicit breaking-change + migration notes if any; (4) the human release-notes text derived from that section; (5) the exact tag/release commands; (6) a list of commits that were intentionally excluded as internal-only.
Unreleased and add new versions.npx claudepluginhub fluxonlab/skillry --plugin skillry-documentation-and-tech-writingProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.