Changelog Format Specification
Detailed specification of the Keep a Changelog format used in the repository.
Overview
All changelogs in this repository follow the Keep a Changelog 1.1.0 format, which provides a standardized structure for documenting changes.
Standard URL: https://keepachangelog.com/en/1.1.0/
Format Standard
Keep a Changelog is based on these principles:
- Human-readable - Written for humans, not machines
- Chronological - Newest changes first
- Categorized - Changes grouped by type
- Versioned - Each release has a version entry
- Linked - Versions link to diffs in version control
Changelog Structure
Header
# Changelog
All notable changes to **{project/module name}** 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).
Components:
- Title:
# Changelog - Scope statement: What the changelog covers
- Format attribution: Links to Keep a Changelog
- Versioning statement: Links to Semantic Versioning
Unreleased Section
Purpose: Tracks work in progress not yet in a release
Usage:
- Add changes here as they're developed
- Move to versioned section when releasing
- Helps draft release notes
Content: Same categories as version sections (Added, Changed, etc.)
Version Sections
Format:
- Version number in brackets:
[x.y.z] - Release date: ISO 8601 format (
YYYY-MM-DD) - Sorted newest first
Example:
Change Type Categories
Each version section contains categorized changes:
Added
New features or functionality.
Examples:
- New commands or tools
- New API endpoints
- New configuration options
- New documentation sections
Changed
Changes to existing functionality.
Examples:
- API changes (breaking or non-breaking)
- Configuration format changes
- Dependency updates
- Performance improvements
- Behavior modifications
Deprecated
Features marked for removal in future versions.
Examples:
- Features scheduled for removal
- APIs being phased out
- Configuration options being replaced
Removed
Features removed in this version.
Examples:
- Deleted features
- Removed APIs
- Eliminated configuration options
Fixed
Bug fixes.
Examples:
- Bug fixes
- Crash fixes
- Error handling improvements
- Incorrect behavior corrections
Security
Security improvements and vulnerability fixes.
Examples:
- Vulnerability patches
- Security enhancements
- Dependency security updates
Footer Links
[Unreleased]: https://github.com/owner/repo/compare/v1.2.0...HEAD
[1.2.0]: https://github.com/owner/repo/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/owner/repo/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/owner/repo/releases/tag/v1.0.0
Format:
- Links version headers to GitHub compare URLs
- Unreleased links to diff from latest version to HEAD
- Version links to diff from previous version
- First version links to release tag
Complete Example
# Changelog
All notable changes to **r2r-cli** 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).
## [Unreleased]
### Added
- feat(cli): add version command for displaying build information
## [1.1.0] - 2025-12-01
### Added
- feat(commands): add build command for cross-platform compilation
- feat(commands): add test command with suite support
### Changed
- refactor(core): improve module dependency resolution
- chore(deps): update Go to 1.21
### Fixed
- fix(build): correct artifact path resolution on Windows
## [1.0.0] - 2025-11-15
### Added
- feat(cli): initial release with basic command structure
- feat(commands): implement get and show commands
- docs: add comprehensive user guide
[Unreleased]: https://github.com/owner/repo/compare/r2r-cli/1.1.0...HEAD
[1.1.0]: https://github.com/owner/repo/compare/r2r-cli/1.0.0...r2r-cli/1.1.0
[1.0.0]: https://github.com/owner/repo/releases/tag/r2r-cli/1.0.0
Commit Message Conventions
Changes are derived from commit messages using conventional commit format:
Conventional Commit Format
Components:
type- Change type (feat, fix, docs, etc.)scope- Module or component affecteddescription- Brief description of change
Type Mapping
| Commit Type | Changelog Category |
|---|---|
feat |
Added |
fix |
Fixed |
refactor |
Changed |
perf |
Changed |
docs |
Changed (or omitted if doc-only) |
test |
Changed (or omitted) |
chore |
Changed |
ci |
Changed (or omitted) |
build |
Changed |
revert |
Changed or Removed |
security |
Security |
Commit Examples
# Maps to Added
git commit -m "feat(commands): add build command with cross-platform support"
# Maps to Fixed
git commit -m "fix(parser): correct error handling in YAML parser"
# Maps to Changed
git commit -m "refactor(core): simplify module dependency resolution"
# Maps to Changed
git commit -m "chore(deps): update dependencies to latest versions"
# Maps to Security
git commit -m "security(auth): patch authentication bypass vulnerability"
Changelog Generation
Changelogs can be generated automatically from commit history:
# Generate changelog for a module
r2r eac release changelog <moniker>
# Update existing changelog with new commits
r2r eac release changelog <moniker> --update
Process:
- Reads commit history since last version
- Parses conventional commit messages
- Groups commits by type
- Formats entries according to Keep a Changelog
- Updates CHANGELOG.md file
Best Practices
Writing Good Changelog Entries
Good:
- Added support for cross-platform binary builds
- Fixed crash when processing empty configuration files
- Improved module dependency resolution performance by 40%
Bad:
Entry Guidelines
- Be specific - Describe what changed, not how
- Be concise - One line per change
- Use present tense - "Add" not "Added"
- Lead with verb - Start with action word
- Reference issues - Link to issue numbers when applicable
- Group related changes - Combine similar changes
What to Include
Include:
- New features
- Breaking changes
- Bug fixes
- Security fixes
- Deprecations
- Major dependency updates
Exclude:
- Code style changes
- Internal refactoring (unless user-visible)
- Test updates (unless affecting behavior)
- Documentation typos
- Build script changes
Breaking Changes
Highlight breaking changes prominently:
### Changed
- **BREAKING:** Renamed config field `oldName` to `newName`
- **BREAKING:** Changed API endpoint from `/old` to `/new`
Prefix with BREAKING: to make them immediately visible
Yanked Releases
Mark pulled releases as yanked:
## [1.1.0] - 2025-12-01 [YANKED]
### Security
- Fixed critical security vulnerability
*This version was yanked due to a regression in the build system.*
Validation
Validate changelog format:
# Validate changelog structure
r2r eac validate release
# Check version format
r2r eac validate release-version <version>
Validation checks:
- Follows Keep a Changelog format
- Versions are valid semver
- Dates are ISO 8601 format
- Links are properly formatted
- Unreleased section exists
References
- Keep a Changelog - Format specification
- Semantic Versioning - Version numbering
- Repository Changelog - Repository-level conventions
- Module Changelogs - Module-level conventions
Tutorials | How-to Guides | Explanation | Reference
You are here: Reference — information-oriented technical descriptions of the system.