git-commitlisted
Install: claude install-skill pivoshenko/pivoshenko.ai
# Commit
Conventional commit. No confirm. No dry-run.
## Flow
1. Parallel: `git status` + `git diff --staged`.
2. Nothing staged -> stage relevant. Paths > `-A`. Never `.env` / creds / secrets.
3. Parallel: `git diff --staged` (if just staged) + `git log --oneline -5`.
4. Read diff -> one commit or many (see **Atomic**) -> write msg.
5. Commit now. Many groups + already mass-staged -> `git restore --staged .` to unstage (modern idiom; `git reset HEAD` also fine), then stage+commit per group. Loop til clean.
6. Print hash + one-liner per commit.
## Atomic
Mixed concerns -> split. No mega-commit.
Group by:
- **type** — `feat` / `fix` / `docs` / `refactor` / `test` never share
- **scope** — diff modules/pkgs = diff commits
- **logical unit** — one thing per commit. Each builds + tests alone.
Split signals:
- > 1 unrelated area
- behavior + format/rename mixed (format separate)
- summary needs "and" / "also" / "+"
- unsure -> ask user how to group
## Msg format
```
<header>
<body>
<footer>
```
`header` required. `body` required except `docs`; min 20 chars. `footer` optional.
### Header
```
<type>(<scope>): <short summary>
```
- type: `build|chore|ci|docs|feat|fix|perf|refactor|test`
- scope: optional. Affected area/module/pkg. Lowercase, kebab/short noun. One scope only — pick the dominant one, else omit.
- summary: imperative present ("add" not "added"/"adds"), lowercase, no trailing `.`
- whole header ≤ 72 chars. Tighter is better; aim ≤ 50 for the summary itse