Enforces Conventional Commits format and branch naming conventions, validating commit message structure (type/scope/description header), suggesting branch name patterns (feature/*, fix/*, hotfix/*), and enforcing breaking change notation. Use when the user is about to commit, creating a branch, reviewing commit history, preparing a pull request, setting up commit linting, or asking about commit message format, branch naming, or Conventional Commits.
97
97%
Does it follow best practices?
Impact
97%
1.03xAverage score across 3 eval scenarios
Passed
No known issues
{
"context": "Tests whether the agent splits unrelated changes into separate atomic commits, stages files individually rather than using git add -A or git add ., uses the correct Conventional Commits format for each commit message, includes a body for non-obvious changes, and validates the result.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Atomic commits",
"description": "The auth middleware fix and the dashboard loading spinner are in two separate commits, not combined into one",
"max_score": 12
},
{
"name": "No bulk staging",
"description": "The commit-log-full.txt or any shell history / script does NOT show 'git add .' or 'git add -A'; files are staged individually",
"max_score": 10
},
{
"name": "Commit type: fix",
"description": "The auth-related commit uses the 'fix' type prefix (e.g. fix(auth): ...)",
"max_score": 8
},
{
"name": "Commit type: feat",
"description": "The dashboard loading spinner commit uses the 'feat' type prefix (e.g. feat(dashboard): ...)",
"max_score": 8
},
{
"name": "Imperative mood",
"description": "Both commit message headers use imperative mood (e.g. 'add', 'fix', 'handle') not past tense (e.g. 'added', 'fixed')",
"max_score": 8
},
{
"name": "Lowercase header start",
"description": "The description portion of both commit headers starts with a lowercase letter",
"max_score": 6
},
{
"name": "No trailing period",
"description": "Neither commit header ends with a period",
"max_score": 6
},
{
"name": "Header length <= 72",
"description": "Both commit headers are at most 72 characters in total length",
"max_score": 8
},
{
"name": "Body for fix commit",
"description": "The auth fix commit includes a body explaining the non-obvious reasoning (e.g. describes the timing issue, race condition, or why the fix was needed)",
"max_score": 12
},
{
"name": "Blank line before body",
"description": "The fix commit's body is separated from the header by exactly one blank line",
"max_score": 6
},
{
"name": "Validation step",
"description": "commit-log.txt or commit-log-full.txt exists and contains output from git log, showing at least 2 commits",
"max_score": 8
},
{
"name": "No WIP commits",
"description": "None of the commit messages contain 'WIP', 'wip', 'temp', or 'Temp'",
"max_score": 8
}
]
}