Changelog Rules

Source: docs/rules/changelog.md Enforcement: Pre-commit (advisory) + CI (changelog:check) Owner: docs-librarian

Core Principle

Every commit that changes functionality must include a changelog entry.

The changelog is how we communicate changes to users and maintain a historical record of the project's evolution. Keeping it up-to-date at commit time (rather than retroactively) ensures accuracy and reduces release overhead.


Rules

IDRuleDescription
CHG-001Update on commitCommits changing functionality must update the current month's changelog (docs/changelog/MM-YYYY.md)
CHG-002Category matchingEntries must use correct category (Features, Bug Fixes, etc.)
CHG-003Scope prefixEntries should include scope in bold (e.g., Admin Dashboard:)
CHG-004Date groupingNew entries go under today's date section
CHG-005Imperative moodUse imperative verbs (Add, Fix, Update, Remove, Refactor)

What Requires a Changelog Entry

Change TypeRequires Entry?Category
New feature✅ YesFeatures
Bug fix✅ YesBug Fixes
Breaking change✅ YesBreaking Changes
Deprecation✅ YesDeprecations
Performance improvement✅ YesPerformance
Security fix✅ YesSecurity
Refactoring (user-visible)✅ YesRefactoring
Documentation updates⚠️ If significantDocumentation
Internal refactoring❌ No
Test additions only❌ No
CI/CD changes⚠️ If user-affectingCI/CD
Dependency updates⚠️ If notableMaintenance

What Does NOT Require a Changelog Entry

  • Internal code cleanup with no behavior change
  • Adding/updating tests only
  • Fixing typos in code comments
  • Updating development tooling
  • Changes to .gitignore, editor configs, etc.
  • Draft documentation not yet published

Entry Format

Entries follow this structure:

## {Date in Month Day, Year format}

### {Category}

- **{Scope}**: {Description in imperative mood}

Example

## January 31, 2026

### Features

- **UI Components**: Add password visibility toggle to auth forms
- **Admin Dashboard**: Add bulk user export functionality

### Bug Fixes

- **Database**: Fix race condition in queue processing

Categories

Use these standard categories (in order of appearance):

  1. Breaking Changes — Changes that break backward compatibility
  2. Features — New functionality
  3. Bug Fixes — Corrections to existing functionality
  4. Performance — Speed or efficiency improvements
  5. Security — Security-related changes
  6. Deprecations — Features marked for removal
  7. Refactoring — User-visible code restructuring
  8. Documentation — Significant doc changes
  9. CI/CD — Pipeline and automation changes
  10. Maintenance — Dependencies, housekeeping

Scopes

Use existing scope names or add new ones as needed:

ScopeDescription
UI Componentspackages/ui changes
Admin Dashboardapps/admin changes
Web Appapps/web changes
DatabaseSchema, migrations, queries
APIAPI endpoints and contracts
WorkersBackground job processors
Claude Agents.claude/agents changes
Documentationdocs/ changes
ScriptsBuild and utility scripts
Public Siteapps/public changes

Workflow

  1. Before committing, check if your changes require a changelog entry
  2. Open the current month's file (e.g. docs/changelog/02-2026.md)
  3. Find or create today's date section
  4. Add entry under the appropriate category
  5. Commit both your changes and the changelog update

Generating Changelog

# Auto-generate from recent commits (fills gaps)
bun run changelog:generate

# This is a helper, not a replacement for manual entries

Pre-commit Reminder

When Claude Code commits changes that require a changelog entry, it should:

  1. Check if the current month's changelog file is already staged
  2. If not, remind about the changelog requirement
  3. Add the changelog entry before completing the commit

This is enforced as an advisory rule — Claude should proactively update the changelog rather than waiting to be reminded.


Release Process

When releasing:

Changelogs are organized by month (MM-YYYY.md). At the start of each month, changelog:generate automatically locks the previous month's file (status: locked) and creates the new month's file. For versioned releases, create a {version}.md file and reference the relevant monthly files.

See release-manager agent for full release workflow.