Changelog Design
Purpose
Create structured changelog entries and migration guides that enable consumers to understand changes, assess impact, and upgrade safely. Produces versioned changelogs following Keep a Changelog format with step-by-step migration instructions for breaking changes.
Inputs
- List of changes (commits, PRs, or feature descriptions)
- Current version number
- Consumer types (library users, API consumers, internal teams)
- Previous changelog entries (for format consistency)
Process
Step 1: Categorize All Changes
Classify each change by impact:
- Breaking: Requires consumer action to upgrade — API changes, removed features, changed behavior
- Feature: New capability with no impact on existing behavior — additive APIs, new options
- Fix: Bug resolution — corrected behavior, error handling improvements
- Deprecation: Future removal warning — still works but will be removed in a future version
- Internal: No consumer impact — refactoring, dependency updates, test improvements
- Flag any change where the category is ambiguous and err toward higher impact classification
Step 2: Describe Each Change with Full Context
Write each changelog entry with:
- What changed: Precise description of the change (not the PR title — the user-facing impact)
- Why: Motivation for the change — what problem it solves or what improvement it brings
- Who is affected: Which consumers or use cases are impacted
- Before/After: For behavior changes, show what the old behavior was and what the new behavior is
- Link to relevant PR, issue, or discussion for additional context
Step 3: Write Migration Steps for Breaking Changes
For each breaking change, provide a complete migration guide:
- Step-by-step instructions: Numbered steps from old code to new code
- Before/after code examples: Show the exact code change needed (not just description)
- Automated migration: Codemod or find-and-replace pattern if applicable
- Partial migration support: Can consumers upgrade incrementally, or is it all-or-nothing?
- Testing the migration: How to verify the upgrade was successful
- Estimated effort: Time estimate for migrating (minutes, hours, or days)
Step 4: Define Version Strategy
Determine version bump based on changes:
- Major (X.0.0): Breaking changes present — any consumer code may need modification
- Minor (0.X.0): New features, no breaking changes — upgrade is safe, new capabilities available
- Patch (0.0.X): Bug fixes only — upgrade is safe, existing behavior corrected
- If multiple change categories exist, the highest impact category determines the version bump
- Consider pre-release versions (alpha, beta, rc) for high-risk changes needing early feedback
Step 5: Plan Communication
Design the release communication:
- Changelog entry: Formatted entry for CHANGELOG.md (Keep a Changelog format)
- Migration guide: Standalone document for breaking changes (linked from changelog)
- Upgrade notification: How consumers are informed — release notes, email, in-app notification
- Deprecation timeline: For deprecated features, when will they be removed? (Minimum 1 major version)
- Support period: How long will the previous version receive bug fixes?
Step 6: Validate Migration Path
Verify the upgrade experience:
- Incremental upgrade: Can consumers upgrade from any previous version, or only from N-1?
- Breaking change clusters: Are multiple breaking changes better released together or separately?
- Dependency conflicts: Does this upgrade force consumers to update other dependencies?
- Rollback safety: Can consumers downgrade if the upgrade causes issues?
- CI verification: Run consumer-perspective tests against the new version to catch missed breaking changes
Output Format
# Changelog: v[X.Y.Z]
**Release date**: [YYYY-MM-DD]
**Version bump**: [Major | Minor | Patch] — [one-line reason]
## Breaking Changes
### [Change title]
[Description of what changed and why]
**Who is affected**: [which consumers/use cases]
**Before**:
```[language]
// old code
After:
// new code
Migration steps:
- [Step 1]
- [Step 2]
- [Verify by running ...]
Features
- [Feature name]: [Description] (#PR)
Fixes
- [Fix description]: [What was wrong, what's corrected] (#PR)
Deprecations
- [Deprecated item]: Use [replacement] instead. Will be removed in v[X+1].0.0. (#PR)
Migration Guide
Prerequisites
- [Required version of dependencies]
- [Backup/snapshot recommendation]
Step-by-Step Upgrade
- Update dependency:
[package manager command]
- [Breaking change 1 migration steps with code]
- [Breaking change 2 migration steps with code]
- Run tests:
[test command]
- Verify: [smoke test or manual check]
Estimated Migration Effort
- Small projects: [time estimate]
- Large projects: [time estimate]
Communication Plan
| Channel |
Content |
Timing |
| CHANGELOG.md |
Full changelog |
On release |
| GitHub Release |
Highlights + migration link |
On release |
| [notification channel] |
Breaking change summary |
1 week before release |
## Quality Checks
- [ ] Every change is categorized (breaking, feature, fix, deprecation, internal)
- [ ] Breaking changes have before/after code examples
- [ ] Migration guide provides step-by-step instructions with verification
- [ ] Version bump follows semver correctly based on change categories
- [ ] Deprecations include replacement guidance and removal timeline
- [ ] Communication plan covers all consumer notification channels
- [ ] Migration path is validated — consumers can upgrade incrementally
- [ ] Changelog follows Keep a Changelog format consistently
## Evolution Notes
<!-- Observations appended after each use -->
1---2name: changelog-design3department: "chronicler"4description: "Changelog entries and migration guides for breaking changes with version strategy"5version: 16triggers:7 - "changelog"8 - "migration guide"9 - "upgrade"10 - "breaking change"11 - "release notes"12 - "deprecation"13 - "semver"14---1516# Changelog Design1718## Purpose1920Create structured changelog entries and migration guides that enable consumers to understand changes, assess impact, and upgrade safely. Produces versioned changelogs following Keep a Changelog format with step-by-step migration instructions for breaking changes.2122## Inputs2324- List of changes (commits, PRs, or feature descriptions)25- Current version number26- Consumer types (library users, API consumers, internal teams)27- Previous changelog entries (for format consistency)2829## Process3031### Step 1: Categorize All Changes3233Classify each change by impact:34- **Breaking**: Requires consumer action to upgrade — API changes, removed features, changed behavior35- **Feature**: New capability with no impact on existing behavior — additive APIs, new options36- **Fix**: Bug resolution — corrected behavior, error handling improvements37- **Deprecation**: Future removal warning — still works but will be removed in a future version38- **Internal**: No consumer impact — refactoring, dependency updates, test improvements39- Flag any change where the category is ambiguous and err toward higher impact classification4041### Step 2: Describe Each Change with Full Context4243Write each changelog entry with:44- **What changed**: Precise description of the change (not the PR title — the user-facing impact)45- **Why**: Motivation for the change — what problem it solves or what improvement it brings46- **Who is affected**: Which consumers or use cases are impacted47- **Before/After**: For behavior changes, show what the old behavior was and what the new behavior is48- Link to relevant PR, issue, or discussion for additional context4950### Step 3: Write Migration Steps for Breaking Changes5152For each breaking change, provide a complete migration guide:53- **Step-by-step instructions**: Numbered steps from old code to new code54- **Before/after code examples**: Show the exact code change needed (not just description)55- **Automated migration**: Codemod or find-and-replace pattern if applicable56- **Partial migration support**: Can consumers upgrade incrementally, or is it all-or-nothing?57- **Testing the migration**: How to verify the upgrade was successful58- **Estimated effort**: Time estimate for migrating (minutes, hours, or days)5960### Step 4: Define Version Strategy6162Determine version bump based on changes:63- **Major (X.0.0)**: Breaking changes present — any consumer code may need modification64- **Minor (0.X.0)**: New features, no breaking changes — upgrade is safe, new capabilities available65- **Patch (0.0.X)**: Bug fixes only — upgrade is safe, existing behavior corrected66- If multiple change categories exist, the highest impact category determines the version bump67- Consider pre-release versions (alpha, beta, rc) for high-risk changes needing early feedback6869### Step 5: Plan Communication7071Design the release communication:72- **Changelog entry**: Formatted entry for CHANGELOG.md (Keep a Changelog format)73- **Migration guide**: Standalone document for breaking changes (linked from changelog)74- **Upgrade notification**: How consumers are informed — release notes, email, in-app notification75- **Deprecation timeline**: For deprecated features, when will they be removed? (Minimum 1 major version)76- **Support period**: How long will the previous version receive bug fixes?7778### Step 6: Validate Migration Path7980Verify the upgrade experience:81- **Incremental upgrade**: Can consumers upgrade from any previous version, or only from N-1?82- **Breaking change clusters**: Are multiple breaking changes better released together or separately?83- **Dependency conflicts**: Does this upgrade force consumers to update other dependencies?84- **Rollback safety**: Can consumers downgrade if the upgrade causes issues?85- **CI verification**: Run consumer-perspective tests against the new version to catch missed breaking changes8687## Output Format8889```markdown90# Changelog: v[X.Y.Z]9192**Release date**: [YYYY-MM-DD]93**Version bump**: [Major | Minor | Patch] — [one-line reason]9495## Breaking Changes9697### [Change title]9899[Description of what changed and why]100101**Who is affected**: [which consumers/use cases]102103**Before**:104```[language]105// old code106```107108**After**:109```[language]110// new code111```112113**Migration steps**:1141. [Step 1]1152. [Step 2]1163. [Verify by running ...]117118---119120## Features121122- **[Feature name]**: [Description] ([#PR](link))123124## Fixes125126- **[Fix description]**: [What was wrong, what's corrected] ([#PR](link))127128## Deprecations129130- **[Deprecated item]**: Use [replacement] instead. Will be removed in v[X+1].0.0. ([#PR](link))131132---133134## Migration Guide135136### Prerequisites137- [Required version of dependencies]138- [Backup/snapshot recommendation]139140### Step-by-Step Upgrade1411421. Update dependency: `[package manager command]`1432. [Breaking change 1 migration steps with code]1443. [Breaking change 2 migration steps with code]1454. Run tests: `[test command]`1465. Verify: [smoke test or manual check]147148### Estimated Migration Effort149- **Small projects**: [time estimate]150- **Large projects**: [time estimate]151152## Communication Plan153154| Channel | Content | Timing |155|---------|---------|--------|156| CHANGELOG.md | Full changelog | On release |157| GitHub Release | Highlights + migration link | On release |158| [notification channel] | Breaking change summary | 1 week before release |159```160161## Quality Checks162163- [ ] Every change is categorized (breaking, feature, fix, deprecation, internal)164- [ ] Breaking changes have before/after code examples165- [ ] Migration guide provides step-by-step instructions with verification166- [ ] Version bump follows semver correctly based on change categories167- [ ] Deprecations include replacement guidance and removal timeline168- [ ] Communication plan covers all consumer notification channels169- [ ] Migration path is validated — consumers can upgrade incrementally170- [ ] Changelog follows Keep a Changelog format consistently171172## Evolution Notes173<!-- Observations appended after each use -->