commit-craftlisted
Install: claude install-skill moses607/skillforge
# Commit Craft
Produce commit messages that are greppable, machine-parseable (Conventional Commits), and honest about scope. A good commit tells a future maintainer *why*, not just *what*.
## Conventional Commit format
```
<type>(<scope>): <subject>
<body>
<footer>
```
- **type** (required): `feat`, `fix`, `refactor`, `perf`, `docs`, `test`, `build`, `ci`, `chore`, `style`, `revert`.
- **scope** (optional): the module/area touched, lowercase (`auth`, `api`, `parser`).
- **subject**: imperative mood, no trailing period, ≤50 chars. "add" not "added"/"adds".
- **body** (optional): wrap at 72 cols. Explain motivation and contrast with previous behavior. Omit for trivial changes.
- **footer**: `BREAKING CHANGE: <desc>` and/or issue refs (`Closes #123`).
## Rules for choosing type
- Bug in existing behavior → `fix`. New capability → `feat`. Neither, and no behavior change → `refactor`/`chore`.
- A change that alters an API contract → append `!` after type/scope AND a `BREAKING CHANGE:` footer.
- If a diff mixes concerns (a feat + an unrelated fix), **recommend splitting** into separate commits and draft both — do not bury a fix inside a feature commit.
## Subject line examples
Input: rewrote the token refresh so it retries on 401
Output: `fix(auth): retry token refresh on 401 response`
Input: added a config flag to disable telemetry
Output: `feat(config): add flag to disable telemetry`
Input: renamed variables and reformatted the parser, no logic change
Output: `refacto