Updating Changelog
Updating Changelog
Maintains a CHANGELOG.md following Keep a Changelog format. Combines git history analysis with a short Q&A to produce accurate, human-readable release notes — not just a copy of commit messages.
- Detect the new version (from
package.json,git tag, or ask the user). - Run
git diff <last_tag>..HEADandgit log <last_tag>..HEAD --onelineto gather raw changes. - Ask the user clarifying questions (see Workflow).
- Categorize changes into:
Added,Changed,Fixed,Deprecated,Removed,Security. - Insert a new version block at the top of
CHANGELOG.md(below[Unreleased]if present).
Progress:
- Step 1: Identify current version and previous release tag/commit
- Step 2: Gather git evidence (diff + log)
- Step 3: Ask the user targeted questions
- Step 4: Draft categorized entries
- Step 5: Write/update
CHANGELOG.md - Step 6: Show the diff of the changelog file to the user for approval
Step 1: Identify version
- Look for a version file (
package.json,pyproject.toml,VERSION) or ask: "What version are you publishing? (e.g. 1.3.0)" - Find the previous tag:
git describe --tags --abbrev=0(fallback: ask user or use first commit).
Step 2: Gather git evidence
Run and read, don't just summarize blindly:
git log <prev_tag>..HEAD --oneline
git diff <prev_tag>..HEAD --stat
git diff <prev_tag>..HEAD
Use the diff to understand what actually changed (files, functions, logic), not just commit message text — commit messages are often vague or wrong.
Step 3: Ask the user
Ask concise, specific questions based on what the diff shows. Don't ask generic questions — reference the actual changes found. Examples:
- "I see changes in
cart.jsand a newCartmodel — is this the new 'persistent shopping cart' feature? How would you describe it to a user?" - "I see a price calculation change in
products.js— was this a bug fix? What was wrong (e.g., wrong price for an item)?" - "Any breaking changes, deprecations, or security fixes I should highlight?"
- "Is this release public-facing (customers see it) or internal-only?"
Keep it to 3-5 questions max. Infer as much as possible from the diff first so you don't ask about things you can already tell.
Step 4: Draft categorized entries
Map to standard categories:
- Added — new features
- Changed — changes to existing functionality
- Fixed — bug fixes
- Deprecated — soon-to-be removed features
- Removed — removed features
- Security — vulnerability fixes
Write entries in plain, user-facing language, one line per change, imperative or past tense, consistent across the file. Reference issue/PR numbers if available in commits.
Step 5: Write CHANGELOG.md
If the file doesn't exist, create it with this header:
Markdown# 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.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
Insert the new version block right after the header (or after [Unreleased] if present):
Markdownundefined
Added
- Persistent shopping cart: items saved to a user's cart now remain even after they leave the site.
Fixed
- Corrected incorrect price display for cucumbers in the product catalog.
Use today's date (`YYYY-MM-DD`) unless told otherwise. Keep newest version at top.
### Step 6: Confirm
Show the added block (or a diff) and ask for confirmation before considering the task done.
Example 1:
Input: Version 1.3.0. Git diff shows new Cart model + cart.js routes, and a fixed unit price constant in products.js (cucumber price corrected from wrong value).
Output:
Markdownundefined
Added
- Persistent shopping cart: items saved to a user's cart now remain even after they leave the site.
Fixed
- Corrected incorrect price for cucumbers in the product catalog.
**Example 2:**
Input: Version 2.0.0. Diff shows removed legacy `/api/v1` endpoints and a new auth middleware.
Output:
```markdown
Added
- New authentication middleware for all API routes.
Removed
- Legacy
/api/v1endpoints (use/api/v2instead).
- Write for humans reading the release, not for developers reading the diff — avoid raw function/variable names unless relevant.
- One bullet per distinct change; don't merge unrelated changes into one line.
- Keep tense and style consistent throughout the file (recommend past tense: "Fixed", "Added").
- Always link to real evidence (diff/commits) before asking questions — don't guess.
- If unsure whether something is "Added" vs "Changed", ask the user rather than assume.
- Preserve any existing
[Unreleased]section structure; move its contents into the new version block if applicable.
- Don't paste raw git commit messages verbatim — they're often too technical or vague ("fix bug", "wip").
- Don't skip reading the actual diff and rely only on commit messages — messages can be misleading.
- Don't invent changes that aren't in the diff, even if the user's description hints at more.
- Don't create duplicate version entries — check if the version already exists in the file first.
- Don't forget the date, or use an inconsistent date format.