
Commit message, která sedí na diff — benchmark
Commit message je tvrzení o diffu. „add rate limiting to login" tvrdí, že diff přidal rate limiting k loginu — a buď to je pravda, nebo se dotkl i tří dalších souborů, které zpráva vůbec nezmiňuje, nebo „zlepšuje výkon", který nikdo nezměřil. Podle zprávy to nepoznáte. Musíte přečíst diff, a skoro nikdo to nedělá. Provozujeme katalog, který testuje Claude skilly na reálných datech, takže jsme udělali tu nudnou věc: nechali jsme Clauda napsat commit messages pro 15 reálných open-source diffů, dvakrát pro každý, a každou zprávu jsme porovnali se skutečnými stagovanými změnami.
Výsledkem je commit-discipline a přichází s čísly před/po: pokrytí diffu vyskočilo z 83 % na 97 %, předmět se vešel do 50 znaků na 15 z 15 diffů (dřív 6 z 15) a vymyšlená tvrzení klesla z 1 na 0. Je zdarma pod licencí MIT: github.com/Skillproofdev/commit-discipline.
Propast: formát kontroluje každý, pravdu nikdo
Než jsme napsali řádek, prošli jsme 80 skillů zaměřených na commity v našem indexu 16 682 skillů plus samostatné commit skilly publikované pro Claude Code. Vrstva formátu je přeplněný, vyřešený prostor. Shoda s Conventional Commits je univerzální. Rozkazovací způsob, předměty do 50 znaků, patičky BREAKING CHANGE: — běžné, dobře zdokumentované, samozřejmost. Pokud chcete jen type(scope): předmět ve správném tvaru, desítky skillů to už umí.
Co nikdo nevymáhá, je vrstva pod tím: jestli je zpráva pravdivá vůči diffu. Zohledňuje každou logickou změnu, která je stagovaná? Nevymýšlí si nic — žádný odhadnutý motiv, žádné neměřené „zlepšuje výkon", žádnou popsanou změnu, která tam ve skutečnosti není? To je vrstva poctivosti a v oboru byla neobsazená. Každý konkurent buď spouští git diff --cached jako nevymáhané doporučení, nebo otevřeně pracuje ze seznamů souborů — názvů, které řeknou, kde se něco změnilo, ale nikdy co nebo proč. commit-discipline dělá z přečtení celého diffu pravidlo číslo jedna a zkratku přes názvy souborů úplně zakazuje.
Osm pravidel, čtyři z nich nikdo jiný nekodifikuje
Skill je sada přísných pravidel (celý SKILL.md). Známé části jsou dotažené: typ odvozený z toho, co diff dělá s chováním, scope odvoditelný z cest (nikdy vymyšlený), předmět v rozkazovacím způsobu do 50 znaků, breaking changes v patičce. Části, které nikdo jiný nevymáhá:
- Úplnost pokrytí diffu. Po napsání konceptu projít diff proti zprávě: každá logická změna zohledněná, nic popsaného, co není stagované. Kontrola halucinací pro commit messages.
- Číst celý stagovaný diff, nikdy jen názvy souborů. Pravidlo 1, se zakázanou zkratkou. Zpráva popisuje diff, takže diff — celý — je vstup.
- Konkrétní seznam zakázané vágnosti.
update,fix stuff,improve,misc,cleanupbez objektu,wip,address feedback— zablokovaná jako nosná slova, každé s náhradním vzorem (update deps→bump axios 1.6→1.7). - Výstupní smlouva. Výstupem je jen samotná zpráva v jednom bloku kódu — žádný úvod, žádné převyprávění diffu, žádná překvapivá patička
Co-Authored-By.
Plus tělo, které vysvětluje proč a jaký dopad místo převyprávění diffu (s testem smazání: dá se řádek zrekonstruovat čtením diffu, škrtne se), a doporučení rozdělit vícetematické diffy — konkrétní hranice souborů a návrh předmětu na commit — místo jedné zastřešující zprávy zametající dvě změny pod koberec.
Benchmark: 15 reálných diffů, originální zprávy odstraněné
Vytáhli jsme 15 fixture z curl, redis, express, fastapi, eslint, django, rust-analyzer a astro na zamčených SHA: featury, opravy chyb, refaktory, dvě reálné breaking changes, dva nastražené vícetematické diffy, docs a CI chores a commity s víc než 400 řádky napříč mnoha soubory. Každý diff šel ke dvěma agentům Claude Sonnet s identickými promty. Jediný rozdíl: jeden nejdřív četl tenhle SKILL.md, druhý ne. Skórovali jsme třemi způsoby — mechanická shoda s Conventional Commits skriptem, pokrytí diffu proti předem zapsanému zlatému seznamu změn a slepé A/B hodnocení preference.
| Metrika | Baseline | Se skillem |
|---|---|---|
| Shoda se specifikací (7 mechanických kontrol, průměr) | 91,4 % | 98,1 % |
| — předmět ≤ 50 znaků | 40 % (6/15) | 100 % (15/15) |
| Pokrytí diffu (vs. zlaté seznamy změn, průměr) | 83,2 % | 96,7 % |
| Vymyšlená tvrzení (celkem napříč 15) | 1 | 0 |
| Recall breaking change (2 fixtures) | 2/2 | 2/2 |
| Detekce rozdělení (2 nastražené vícetematické diffy) | 0/2 | 2/2 |
| Slepá A/B preference (skill vs. baseline) | — | 9 výher / 4 prohry / 2 remízy |
Vyčnívají dvě věci. Za prvé, mechanická shoda byla už na baseline silná — správné typy, rozkazovací způsob, breaking patičky a nevágní slovesa fungovaly rovnou. Celá mezera ve formátu byla délka předmětu: baseline přetáhla 50 znaků na 9 z 15 diffů; skill nikdy. Za druhé, skutečné oddělení je v pokrytí. Baseline běžně vynechávala vedlejší změny — přidané testy, záznam do changelogu, druhé téma schované v „jednom" diffu — zatímco skill je zohlednil. Právě ten skok 83 %→97 % je odkud přišla většina výher v preferenci, a je to věc, kterou vám žádný formátovací kontrolor nedá.
Detekce rozdělení je nejčistší ukázka. Na dvou nastražených vícetematických diffech (t05, t12) napsala baseline pokaždé jednu zastřešující zprávu; skill navrhl rozdělení v obou případech. U t07 — commit z curl odstraňující TLS-SRP — skill dokonce zachytil nesouvisející šest-setopt hunk, který baseline potichu vstřebala do své zprávy, což byl baseline jediný výmysl v celém běhu: vymyšlené zdůvodnění odstranění („skoro nepoužívané"), které diff nepodporoval. Skill ten hunk místo hádání označil jako otázku pro uživatele.
Kde skill prohrál — a přesto to zveřejňujeme
Naše metodika vyžaduje ztráty vedle výher, a tohle nebylo čisté vítězství.
Baseline porazila skill na třech fixture. Na t03 (redis), t13 (rust-analyzer) a t15 (fastapi) — všechno úzce zaměřené diffy — baseline zachytila konkrétní detail, který skill přešel: rozšířenou vazbu traitu &mut dyn SourceDatabase (t13), extrakci deduplikace _build_dependant (t15) a jeden ze dvou algoritmů počítání diffu (t03). Tlak skillu na úplnost je reálný, ale ne absolutní; na malých jednosouborových diffech se baseline skillu vyrovná nebo ho porazí.
Disciplína rozdělení skillu jednou vystřelila naprázdno. Na t14 rozdělila dvouřádkový commit CI-plus-závislost — přidání Node 26 do matice, bump mocha — na dva; hájitelné podle litery „jeden commit, jedno téma", ale většina reviewerů by to nechala jako jeden ci: commit. Tři správná rozdělení, jedno přerozdělení. Počítá se jako prohra v preferenci a je to takhle označené.
A výhrada, na které nejvíc záleží: n=15 je orientační, ne statisticky významné, a hodnocení pokrytí a preference dělal soudce ze stejné rodiny modelů — na testovacím stroji nebyl nastavený křížový soudce třídy GPT. Preference nese riziko sebeupřednostňování: autor i soudce sdílejí rodinu modelů. Popletli jsme štítky s předem registrovaným seedem a odblokovali po skórování, ale nebudeme předstírat, že 9-4-2 preference od soudce ze stejné rodiny je verdikt. Je to signál. Celý protokol, skóre po fixtures a přiznání metody hodnocení jsou v bench/results/verdict.md.
GET THE SKILL
commit-discipline je zdarma a pod licencí MIT. Jeden příkaz ho nainstaluje, repo je skill a každé číslo výše je reprodukovatelné ze složky bench.
Získat commit-discipline na GitHubuInstalace
git clone https://github.com/Skillproofdev/commit-discipline ~/.claude/skills/commit-discipline
Restartujte Claude Code. Spouští se na „commitni tohle", „napiš commit message", commitování stagovaných změn a žádosti o revizi nebo úklid zprávy — a nezasahuje do git operací, které se netýkají zpráv: větvení, rebase, řešení konfliktů. Patří do naší disciplinární série vedle token-discipline, který snižuje, co sezení stojí, a research-discipline, který snižuje, co si odpověď splete. Tenhle snižuje, co commit message přehlédne.
FREE STARTER PACK
Chcete naše nejlépe hodnocené skilly plus instalační checklist, který používáme před každým testem? Pošleme vám ho e-mailem zdarma.
Získat free starter packFAQ
Nepíše Claude commit messages už teď slušně? Co se týče formátu, ano — to bylo v benchmarku překvapení. Baseline zvládla typ, způsob i breaking patičky rovnou. Kde selhávala, bylo pokrytí: vynechala vedlejší změny na víc než polovině vícetematických a vícesouborových diffů a přetáhla 50znakový limit předmětu na 9 z 15. Práce skillu je právě tahle mezera, ne formát, který už všichni umí.
Je to jen linter pro Conventional Commits? Ne, a to je smysl. Shoda s Conventional Commits je přeplněný, vyřešený prostor — desítky skillů to umí. commit-discipline vymáhá vrstvu pod tím: že zpráva zohledňuje každou logickou změnu v diffu a nic si nevymýšlí. Formát je tu samozřejmost; poctivost vůči diffu je produkt.
Udělá za mě commit nebo push?
Ne. Napsat zprávu je práce; spustit git commit je samostatný pokyn, který skill sám od sebe nepřevezme. Taky nepřidá Co-Authored-By ani „Generated with" patičky, pokud to nenaznačuje log vašeho projektu nebo vaše vlastní instrukce.
Mám věřit číslu preference 9-4-2? Berte ho jako orientační, ne jako verdikt. Hodnotil ho agent ze stejné rodiny modelů se zaslepenými štítky, protože na testovacím stroji nebyl dostupný křížový soudce, takže neslo riziko sebeupřednostňování a n=15 není statisticky významné. Čísla pokrytí (83 %→97 %) stojí na předem zapsaném zlatém seznamu změn a jsou nosnějším výsledkem; tři fixtures, na kterých skill prohrál, jsou pojmenované výše.
★ 9.6/10 × 3
Startovací balíček zdarma
3 skills s nejvyšším skóre z našich testů plus instalační checklist — sestava, kterou bychom nasadili na čistý stroj. Zdarma, e-mailem.