Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when turning commits into a changelog or release notes: emit Keep a Changelog sections and the Conventional-Commit semver bump, not GitHub-style notes.
.claude/skills/keepachangelog-conventions/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 2 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | +60% | +276% | 0% | 25 | 54d agov1 |
| gemini-3.5-flash | pending re-run | — | |||
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-20 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
| case-01 | ✗→✓ | ▲ Improved | — | — |
| case-17 | ✗→✓ | ▲ Improved | — | — |
When asked to turn commits into a changelog or release notes, render them in the Keep a Changelog format with a Conventional-Commit-derived semver bump — not GitHub "What's Changed" style, not free-form "Features / Bug Fixes / Improvements" headings, not emoji. Apply this whenever the task is "draft a changelog", "write release notes", or "summarize these commits for a release".
Use ONLY these section headings, and always in this order:
### Added### Changed### Deprecated### Removed### Fixed### Security### Added.### Fixed.Map each commit to a section by its type:
| Commit | Section | |---|---| | feat: | Added | | fix: (non-security) | Fixed | | perf: | Changed | | refactor: | Changed | | a deprecation (commit that deprecates something) | Deprecated | | a removal (commit that removes a feature/flag/API) | Removed | | fix(security) or any security-related fix | Security | | docs:, style:, test:, build:, ci:, chore:, revert: | OMIT (internal-only, never in the changelog body) |
fix:→Fixed rule: a security fix goes to Security, not Fixed.feat!: — the user-facing effect (removal) picks the section.refactor: or feat:.Pick exactly one bump level, highest-precedence first:
! after its type (feat!:, fix!:, …) OR a BREAKING CHANGE: footer. New version = (X+1).0.0.feat: is present. New version = X.(Y+1).0.fix/perf/refactor/etc.). New version = X.Y.(Z+1).0.x version: 0.9.4 + breaking → 1.0.0.3.1.4→3.2.0), MAJOR zeroes minor and patch (4.2.0→5.0.0).chore:+build: is a PATCH bump.## [X.Y.Z] - YYYY-MM-DD
- ), then an ISO date YYYY-MM-DD.## [Unreleased] section at the very top for merged-but-unreleased work.- ) per change.feat(auth): add SSO login renders as add SSO login, not feat(auth): add SSO login.- **auth:** add SSO login.**BREAKING:** lead inside its section: - **BREAKING:** rename userId to user_id.Commits: feat(auth): add SSO login, fix(api): handle null user id
## Features\n- add SSO login\n## Bug Fixes\n- handle null user id ### Added
### Fixed
Commits: perf(db): cache hot queries, refactor(core): split scheduler module
## Performance\n- cache hot queries\n## Refactoring\n- split scheduler module ### Changed
Commit: fix(security): patch XSS in comment rendering alongside fix(api): correct pagination cursor
### Fixed (security collapsed into the generic fix bucket). ### Fixed
### Security
Commits: feat(api): add /v2/search, docs(readme): fix typos, test(api): add coverage, chore(deps): update lockfile
### Added with - **api:** add /v2/search. The docs/test/chore lines do not appear anywhere in the body.Previous 1.4.2; commits include a feat: and a fix:, no breaking change.
## v1.4.3 (treats every release as a patch) or ## 2.0.0 (over-bumps).## [1.5.0] - 2026-06-26 (feat present → minor; patch resets to 0).Previous 0.9.4; commit feat(export)!: change CSV column order with BREAKING CHANGE: footer.
## 0.10.0 (treats ! as just another feat).## [1.0.0] - 2026-06-26 (the !/BREAKING footer forces a major bump, even from 0.x).## v1.0.0 (2026-06-26) or # Release 1.0.0.## [1.0.0] - 2026-06-26 — square brackets, - , ISO date.A new feat on top of an already-shipped version.
## Unreleased]
## 3.1.0] - 2026-06-26 ### Added
## 3.0.0] - 2026-06-10 ### Added
Commit: feat(billing): add proration support
- feat(billing): add proration support (prefix left in).- **billing:** add proration support (type stripped, scope bolded).Commit: feat(api)!: rename 'userId' to 'user_id' with BREAKING CHANGE: footer.
- rename userId to user_id (no breaking indicator).- **BREAKING:** **api:** rename userId to user_id under the relevant section, and a MAJOR version bump.feat(cli)!: remove the --legacy flag is a removal — put it under Removed (and bump MAJOR for the !). The effect, not the type token, picks the section.refactor(auth): deprecate password-only login goes under Deprecated, not Changed.chore:+build:+style: only → no body sections at all, but still a PATCH version bump with a version heading.revert: commits are omitted from the body (internal), even though they undo a prior feature.### Security section, one bullet each.1.0.0.### Added / Changed / Deprecated / Removed / Fixed / Security. DON'T use Features, Bug Fixes, Improvements, Performance, or What's Changed.docs/test/chore/build/ci/style/revert from the body. DON'T add a "Chores" or "Docs" section.## [X.Y.Z] - YYYY-MM-DD. DON'T write ## vX.Y.Z or ## X.Y.Z (date).feat:/fix: prefix and bold the scope. DON'T echo the raw commit line.perf: or refactor: under its own "Performance"/"Refactoring" heading instead of Changed.chore:/docs:/test: commits in the body instead of omitting them.!/BREAKING CHANGE: as a normal feat → under-bumping to minor instead of major.## v1.5.0 or ## 1.5.0 - June 26 instead of ## [1.5.0] - 2026-06-26.## [Unreleased] placeholder and/or ordering versions oldest-first.feat(scope): prefix in the bullet text instead of stripping it and bolding the scope.## [X.Y.Z] - YYYY-MM-DD, ## [Unreleased] on top, newest-first.**BREAKING:**.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-25 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-23 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-24 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of +60 percentage points is the difference between those two pass rates over the 25 comparable cases.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.5-flash | verified | 7/2/2026 | +83% |
Other measured skills in the registry, with their headline benchmark lift.