Ensure every meaningful change has a proper docs/changelog.md entry. Use before every commit that changes behaviour, adds features, or fixes bugs.
Resources
1Install
npx skillscat add strikersam/autonomous-ai-agency/claude-skills-changelog-enforcer Install via the SkillsCat registry.
SKILL.md
Skill: changelog-enforcer
When to Use
Before EVERY commit that is not purely:
chore:— dependency bumps, tooling configdocs:— doc-only changes (unless the doc IS the changelog)style:— formatting onlyci:— CI/workflow-only changestest:— test-only additions with no behaviour change
If in doubt, add a changelog entry. Entries are cheap; missing them causes release confusion.
Changelog Location
docs/changelog.md — follows Keep a Changelog format.
Entry Format
Add under ## [Unreleased] at the top of the file:
## [Unreleased]
### Added
- Brief description of new feature or capability. (#PR or commit reference if known)
### Changed
- What existing behaviour changed and how.
### Fixed
- What bug was fixed and what the symptom was.
### Security
- Any change touching auth, API keys, secrets, or access control.
### Removed
- Features, endpoints, or options that were removed.Only include subsections that are relevant to the commit.
Instructions
- Read
docs/changelog.mdto find the[Unreleased]block. - Add a new entry under the appropriate subsection.
- Be specific: mention the module, the route, or the behaviour that changed.
- Include the reason if non-obvious.
- Stage
docs/changelog.mdalongside the code change.
Examples
Good entries:
### Added
- `router/registry.py` — `fast_response` category routes short streaming requests to `qwen3-coder:7b` (lightest model) to reduce latency.
### Fixed
- `agent/loop.py` — `_parse_execution_response` now handles Windows-style CRLF line endings without corrupting file content.
### Security
- `key_store.py` — API keys are now hashed with SHA-256 before storage; plain-text keys are no longer written to `keys.json`.Bad entries (too vague):
### Changed
- Updated some stuff.
- Fixed bug.Acceptance Checks
-
docs/changelog.mdhas at least one new entry under[Unreleased] - Entry uses correct subsection (
Added/Changed/Fixed/Security/Removed) - Entry names the specific file or feature that changed
-
git diff --cached -- docs/changelog.mdshows staged changes - CI
changelog-checkjob will pass (see.github/workflows/changelog-check.yml)
Hook Behaviour
The commit-msg hook in .claude/hooks/commit-msg will reject commits with
code changes but no docs/changelog.md staged update, unless the commit
subject starts with chore:, docs:, style:, ci:, or test:.