Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when writing a git commit message: apply the Sentry conventions (abbreviated type ref, Capitalized subject, Refs/Fixes footer).
.claude/skills/sentry-commit-message/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 17 |
| Model | Lift | Δ tokens | Δ turns | Cases | Verified |
|---|---|---|---|---|---|
| gemini-3.6-flashbest | +35% | +151% | 0% | 23 | 54d ago |
| gemini-3.5-flash | pending re-run | — | |||
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-14 | ✗→✓ | ▲ Improved | — | — |
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
| case-09 | ✗→✓ | ▲ Improved | — | — |
| case-12 | ✗→✓ | ▲ Improved | — | — |
Format every git commit as <type>(<scope>): <Subject> with an optional body and footer, using Sentry's specific spellings and casing. Apply whenever you write or revise a commit message. These rules differ from plain Conventional Commits in three ways the base gets wrong: the type token ref (not refactor), a Capitalized subject (not lowercase), and the Refs/Fixes footer keywords.
<type>(<scope>): <Subject><scope> and the parentheses are optional.Pick exactly one type from this closed set. The spellings in bold are the ones that differ from the common Conventional-Commits vocabulary:
| Type | Use for | |------|---------| | feat | A new feature or user-visible capability | | fix | A bug fix | | ref | Refactoring with no behavior change (NOT refactor) | | perf | A performance improvement, no new behavior | | docs | Documentation only | | test | Adding or correcting tests | | build | Build system, dependencies, lockfiles, bundler config | | ci | CI configuration (e.g. GitHub Actions workflows) | | chore | Maintenance: dead-code removal, copyright bumps | | style | Formatting only — whitespace, quotes, no logic change | | meta | Repository metadata (CODEOWNERS, issue templates) | | license | License changes |
The type token is lowercase. There is no other valid type — do not invent improvement, update, misc, or wip.
fix(api):.
api,alerts, auth). No spaces inside the parentheses.
fix(api): Handle null response.This is the opposite of lowercase Conventional Commits and the single most common base mistake.
Add, Handle, Remove, Extract. Never past tense(Added, Fixed) and never gerund (Adding, Fixing).
behavior when it clarifies the change.
Put issue references in the footer, separated from the body by a blank line. The keyword choice is meaningful:
Fixes — closes the issue when the commit merges. Use when the change resolvesthe issue: Fixes SENTRY-1234, Fixes GH-1234, Fixes #1234.
Refs — links the issue without closing it. Use the exact keyword Refs,never See, Related, Ref, or References: Refs GH-1234, Refs LINEAR-ABC-123.
Issue identifier forms: #1234, GH-1234, SENTRY-1234, LINEAR-ABC-123.
A breaking change needs both signals:
! immediately after the type or scope and before the colon: feat(api)!: orfeat!:.
BREAKING CHANGE: describing the break.Format a revert as:
revert: <original header>
This reverts commit <full-sha>.
Reason: <why it was reverted>The header is revert: followed verbatim by the reverted commit's original header.
Each example shows the base model's wrong default (BEFORE) and the conforming form (AFTER).
ref, not refactorTask: you moved duplicate validation out of three handlers into one shared class; no behavior change.
BEFORE (base default):
refactor: extract validation logic into a shared moduleAFTER:
ref: Extract validation logic into a shared module
Move duplicate validation from three endpoints into one validator class.
No behavior change.Task: handle a null response in the user endpoint.
BEFORE (lowercase Conventional Commits default):
fix(api): handle null response in user endpoint.AFTER (capitalized first letter, no trailing period):
fix(api): Handle null response in user endpointTask: add CSV export to the reports page.
BEFORE (past/gerund tense):
feat: Added CSV export to reports pageAFTER:
feat: Add CSV export to the reports pageRefs links without closingTask: alerts now post Slack thread replies; link GH-1234 but do not close it.
BEFORE (base reaches for Closes/Fixes):
feat: add slack thread replies for alerts
Closes GH-1234AFTER:
feat(alerts): Add Slack thread replies for alert updates
Post a reply to the original Slack thread instead of a new message, keeping
related notifications grouped.
Refs GH-1234Fixes closes the issueTask: add a null check that resolves SENTRY-5678.
BEFORE:
fix: null check for deleted accounts (SENTRY-5678)AFTER:
fix(api): Handle null response for deleted accounts
The user API returned null for deleted accounts and crashed the dashboard.
Add a null check before reading user properties.
Fixes SENTRY-5678! AND footerTask: remove the deprecated v1 endpoints; closes SENTRY-9999.
BEFORE (one signal only):
feat: Remove deprecated v1 endpoints
Fixes SENTRY-9999AFTER:
feat(api)!: Remove deprecated v1 endpoints
Remove all v1 API endpoints deprecated in 23.1. Clients migrate to v2.
BREAKING CHANGE: v1 endpoints are no longer available
Fixes SENTRY-9999BEFORE:
Revert "Add new endpoint" — broke prodAFTER:
revert: feat(api): Add new endpoint
This reverts commit abc123def456.
Reason: Caused a performance regression in production.ref vs perf: if the change keeps behavior the same but improves speed, useperf. If it restructures code with no perf or behavior change, use ref.
build vs ci: dependency/lockfile/bundler changes are build; the CI pipelineconfig (workflow YAML) is ci.
chore vs style vs ref: pure formatting/whitespace is style; dead-coderemoval and housekeeping is chore; reorganizing live code is ref.
meta vs docs: repository metadata files (CODEOWNERS, issue templates) aremeta; human-readable documentation (README, guides) is docs.
Fixesone issue and Refs another. Each reference goes on its own line.
! and the BREAKING CHANGE:footer; the issue footer is just absent.
refactor: — always ref:.Added, Adding) — always imperative (Add).See / Related / Closes to link without closing — always Refs.! alone for a breaking change — always add the BREAKING CHANGE:footer too.
update, improvement, wip) — always use a token from thetable.
refactor (the universal Conventional-Commits token) instead of ref.Closes/Resolves when the intent is to link (should be Refs), or Seewhen the intent is to close (should be Fixes).
! or only the BREAKING CHANGE: footer.refactor-flavored types like cleanup or improvement not in the set.ref not refactor).Fixes to close, Refs to link.! AND BREAKING CHANGE: footer.revert: + This reverts commit <sha>. + Reason:.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-23 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
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 +35 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 | 7/2/2026 | +92% |
Other measured skills in the registry, with their headline benchmark lift.