The changelog has two stages, owned by different skills:
- This skill — write one working-log entry per change under
## [Unreleased], before committing. The entry captures what landed, for the upgrader who will read it at release time. - The
releaseskill — distill the accumulated## [Unreleased]entries into a version section at release time (group by theme, collapse related entries, drop noise). That is not this skill's job; do not try to pre-distill.
Steps
- Read the change you're about to commit. Run both
git diff(unstaged) andgit diff --cached(staged) so neither half of the work is missed, andgit logto see what landed since the last entry. The entry describes the noteworthy difference — what an upgrader or reviewer needs to know — not the commit message or the process of making the change. - Pick the category. Use the Keep a Changelog buckets:
Added— new features.Changed— changes to existing functionality.Deprecated— soon-to-be-removed features.Removed— features removed now.Fixed— bug fixes.Security— vulnerabilities. If the## [Unreleased]section is missing a category sub-heading it needs, add it. Place categories in that order.
- Write one bullet. Lead with the thing that changed (a file, a component, a behaviour), then the noteworthy difference. Cite file paths so the entry is navigable. One entry per logical change — if you made two unrelated changes, write two bullets. Match the voice of the existing entries (the repo's entries are factual, specific, and cite paths and symbols).
- Place it under
## [Unreleased]. Append to the appropriate category sub-heading. Never edit a released version section — those are frozen. - Stop when the entry is written. Do not reorganize, re-distill, or rewrite other entries. The release skill handles consolidation.
What stays out of the working log
Not every change earns a bullet. Skip pure noise with no user-facing or developer-facing impact: whitespace, formatting, dead-code removal with no behaviour change. If in doubt, include it — the release skill will drop it during distillation if it truly doesn't belong.
Reference
- Format:
## [X.Y.Z] - YYYY-MM-DDfor released sections;## [Unreleased]for the working log. Dates are ISOYYYY-MM-DD(largest-to-smallest units, unambiguous across locales). - Comparison links live at the bottom of the file, one per version:
[X.Y.Z]: https://github.com/<owner>/<repo>/compare/vPREV...vX.Y.Z. The release skill manages these. - Full convention: keepachangelog.com.