Release Notes
When to use this skill
Activate when the user wants to:
- Generate release notes from recent git history
- Update or create a CHANGELOG.md following Keep a Changelog format
- Draft a GitHub release body from merged PRs
- Track framework development phase transitions (alpha, beta, RC, GA)
- Summarize what changed between two git tags or commits
Instructions
Generating a changelog entry
- Identify the version range — ask the user or infer from
git describe --tags - Run the changelog generator script:
node scripts/generate-changelog.js --from <tag-or-sha> --to HEAD - Review the grouped output (Added, Changed, Fixed, Removed)
- Insert the new entry at the top of CHANGELOG.md, below the
## [Unreleased]section - If CHANGELOG.md doesn't exist, create it from the template in
references/CHANGELOG-TEMPLATE.md
Drafting release notes
- Run the same script with
--format github:node scripts/generate-changelog.js --from <tag> --to HEAD --format github - The output is markdown suitable for a GitHub release body
- Add a one-sentence summary at the top highlighting the most impactful change
Tracking phase updates
- Read the current phase from the project's package.json
versionfield or aPHASE.mdfile - Phase progression follows:
alpha->beta->rc->stable - When updating phase, also:
- Update the version field in package.json (e.g.,
1.0.0-beta.1) - Add a CHANGELOG entry noting the phase transition
- List any breaking changes that landed since the last phase
- Update the version field in package.json (e.g.,
Commit classification
The script classifies commits by conventional commit prefixes:
| Prefix | Section |
|---|---|
feat: |
Added |
fix: |
Fixed |
refactor: |
Changed |
docs: |
Documentation |
chore: |
Maintenance |
BREAKING CHANGE |
Breaking |
| Other | Other |
Output format
The script outputs structured JSON or markdown:
{
"version": "0.9.1",
"date": "2026-04-06",
"sections": {
"added": ["New gallery page with search and filters"],
"fixed": ["Corrected nav links on specification page"],
"changed": ["Updated CI to skip empty test packages"]
}
}
Gotchas
- Always verify the
--fromtag exists before running — usegit tag -lto list - Merge commits are skipped by default; only first-parent commits are classified
- If the repo uses squash merges, PR titles become the commit messages — ensure they follow conventional commits
- The
--format githubflag adds emoji prefixes and contributor @mentions - Phase transitions should always bump the pre-release segment, never the major/minor/patch