Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when writing a changelog or commit message: follow the exact Keep a Changelog + Conventional Commits vocabulary, not free-form section names.
.claude/skills/changelog-conventions/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 15 |
| gemini-3.1-pro-preview | 100% | 3 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | +30% | +267% | 0% | 23 | 54d ago |
| gemini-3.5-flash | +29% | — | 0% | 24 | 86d ago |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | — | — |
| case-15 | ✗→✓ | ▲ Improved | — | — |
| case-20 | ✗→✓ | ▲ Improved | — | — |
| case-11 | ✗→✓ | ▲ Improved | — | — |
| case-06 | ✗→✓ | ▲ Improved | — | — |
Write changelogs in Keep a Changelog 1.1.0 and commit messages in Conventional Commits 1.0.0, using the exact vocabulary, headings, and ordering below. Apply whenever producing a CHANGELOG.md entry, release notes, or a git commit subject — substitute none of the fixed names for synonyms.
# Changelog, immediately followed by the boilerplateline All notable changes to this project will be documented in this file.
## [Unreleased] heading sits above every released version, as alanding spot for un-shipped work.
## [X.Y.Z] - YYYY-MM-DD: theversion in square brackets, an ISO 8601 date, joined by a space-hyphen-space - . Never ## v1.2.0, never ## Version 1.2.0, never a human date like (January 5, 2024).
## [2.0.0] appears above## [1.9.0], which appears above ## [1.0.0].
order when more than one is present: ### Added, ### Changed, ### Deprecated, ### Removed, ### Fixed, ### Security.
### Added (never "New Features", "Features", "Highlights").### Changed (never"Improvements", "Performance", "Enhancements").
### Deprecated.### Removed.### Fixed (never "Bug Fixes", "Fixes").### Security (never "Security Fixes", and not ### Fixed).- bullet line under its heading.token [YANKED] after the date: ## [X.Y.Z] - YYYY-MM-DD [YANKED].
<type>(<optional scope>): <description> — type, an optional parenthesizedscope, a colon, a space, then the description.
feat, fix, docs, style, refactor,perf, test, build, ci, chore, revert. Nothing else. A new capability is feat, never add/update/feature; a code-cleanup with no behavior change is refactor; a whitespace/format pass is style, not chore or refactor; a speedup is perf, not feat/fix; a dependency or pipeline bump is build or ci, not chore/deps.
add, not added/adds/adding), with notrailing period.
! immediately before the colon (e.g. feat(api)!:) and/or add afooter line beginning BREAKING CHANGE: <text>. Either signals a major-version break; using both is fine.
fix → bump PATCH (the Z in X.Y.Z); feat → bump MINOR (the Y); any breakingchange → bump MAJOR (the X), and resets MINOR and PATCH to 0.
Closes #123 (or Fixes #456), placedafter a blank line below the body.
Each is BEFORE (the free-form default a model reaches for) → AFTER (the conforming form).
Version heading.
## Version 1.2.0 (January 5, 2024)## [1.2.0] - 2024-01-05New feature → Added.
markdown ### New Features
markdown ### Added
Performance change → Changed (not "Improvements").
markdown ### Improvements
markdown ### Changed
Bug fix → Fixed (not "Bug Fixes").
markdown ### Bug Fixes
markdown ### Fixed
Vulnerability → Security (not Fixed).
markdown ### Bug Fixes
markdown ### Security
Removal vs. deprecation, in order.
markdown ### Removed
### Deprecated
markdown ### Deprecated
/v2 API; migrate to /v3 before the next major### Removed
/v1 APIUnreleased + reverse order, a full skeleton.
markdown # Change Log ## 1.0.0
## 1.1.0
markdown # Changelog
All notable changes to this project will be documented in this file.
## Unreleased]
## 1.1.0] - 2024-03-02 ### Added
## 1.0.0] - 2024-01-10 ### Added
Yanked release.
## 3.2.1 (pulled — broken migration)## [3.2.1] - 2024-05-09 [YANKED]Commit: feature.
Added Google OAuth login.feat(auth): add google oauth2 loginCommit: bug fix.
Fixed race condition in paymentsfix(payments): resolve race condition in payment processingCommit: docs / style / refactor / perf / build, the easily-confused types.
Update README with install steps → AFTER: docs(readme): document new install stepsRan prettier → AFTER: style: reformat with prettierCleaned up helpers → AFTER: refactor(utils): restructure helper functionsMade image resize faster → AFTER: perf(images): cache resize resultsBump webpack → AFTER: build(deps): upgrade webpack to 5.90Commit: breaking change.
Changed user endpoint to return userId instead of id (breaks clients) feat(api)!: return userId instead of id
BREAKING CHANGE: the user endpoint now returns userId instead of id. Update all consumers to read the new field.
Commit + semver call-out.
Fixed a typo in an error message — patch releasefix(errors): correct typo in timeout message and "this bumps the PATCH (third) number".## [Unreleased]; do not invent adate. Move them under a dated version heading only when the release is cut.
the canonical order (Added → Changed → Deprecated → Removed → Fixed → Security). Omit headings with no entries — don't print empty sections.
### Security, not ### Fixed.
### Changed, not ### Added — Added isfor net-new surface only.
docs: fix changelog typo is valid; dropthe parentheses entirely rather than inventing a placeholder scope.
revert type: revert: feat(auth): add google oauth2 login.fix(api)!: drop the legacy id field plusthe BREAKING CHANGE: footer bumps MAJOR regardless of base type.
## [1.2.0] - 2024-01-05. Don't write ## v1.2.0 or ## Version 1.2.0.### Added. Never use ### New Features or ### Highlights.### Fixed. Never use ### Bug Fixes.### Changed for perf/behavior. Never use ### Improvements or ### Performance.### Security. Don't bury them in ### Fixed.## [Unreleased] on top. Don't omit it on a fresh file.like Add/Update.
..! and/or a BREAKING CHANGE: footer. Don't rely on prose alone.six fixed headings.
v1.2.0 or with a human-readable date instead of [X.Y.Z] - YYYY-MM-DD.### Fixed.## [Unreleased] section and the boilerplate header line.Feat), using past tense (added oauth), or ending with a period.update, add, feature, deps) instead of using feat/build.! and/or BREAKING CHANGE: footer on a breaking change, or mis-mapping the semverbump (a feat is MINOR, a fix is PATCH, a break is MAJOR).
# Changelog + boilerplate line; ## [Unreleased] on top; newest version first.## [X.Y.Z] - YYYY-MM-DD (brackets + ISO date); [YANKED] appended if pulled.- bullets.type(scope): description; type from the closed set; lowercase imperative, no period.! and/or BREAKING CHANGE: footer; semver bump matches.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-07 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-23 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | 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. 23 cases were attempted. The headline lift of +30 percentage points is the difference between those two pass rates over the 23 comparable cases.
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 | 6/26/2026 | +29% |
Other measured skills in the registry, with their headline benchmark lift.