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
- Branch linked to an issue -> add the closing trailer. Read the link with `git config --get branch.$(git branch --show-current).issue`; `git-issue-start` records it there. Why -> the branch name carries no ticket id by default, so this is the only durable link between the work and the tracker
- Many commits from one issue -> the trailer goes on the **last** one only. Why -> every commit carrying `Closes #42` is noise on the issue timeline, and GitHub closes on the first merged one regardless
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>
<foote