-
Format: type(scope): subject — types: feat, fix, refactor, chore, docs, test, ci, perf
-
Breaking changes: append ! (e.g., fix!: remove deprecated endpoint)
-
Subject: under 72 chars, imperative mood. Must reference what changed specifically — generic subjects like "initial commit", "fix bug", "update code" are never acceptable.
-
Body: always use the reasoning framework with ## markdown headings. Required: Problem + Solution. Optional (include only when they add non-obvious context): Goal, Background, Alternatives.
## Problem
<what was wrong or missing>
## Goal (optional)
<what this change aims to achieve, if not obvious>
## Background (optional)
<context needed to understand why, if non-obvious>
## Solution
<what was done and why this approach>
## Alternatives considered (optional)
<what else was evaluated and why not>
-
One logical change per commit. If you need "and" in the subject, split it.