# Git Commit Formatter

> **Purpose:** Analyze staged changes and generate a properly formatted conventional commit message.

---

## Invocation

```
/commit
```

Runs `git diff --cached --stat` and `git diff --cached` to analyze staged changes.

---

## Conventional Commit Format

```
<type>(<scope>): <description>

[optional body]

[optional footer]
```

### Types

| Type | When to use |
|------|-------------|
| `feat` | New feature or capability |
| `fix` | Bug fix |
| `refactor` | Code restructuring without behavior change |
| `test` | Adding or updating tests |
| `docs` | Documentation only |
| `style` | Formatting, whitespace, semicolons |
| `perf` | Performance improvement |
| `ci` | CI/CD configuration |
| `chore` | Dependencies, tooling, config |
| `build` | Build system or external dependency changes |

### Scope Detection

Infer scope from the changed files:
- `components/auth/*` → `auth`
- `api/skills/*` → `skills-api`
- `lib/utils/*` → `utils`
- Multiple unrelated areas → omit scope

### Description Rules

- Imperative mood: "add" not "added" or "adds"
- No period at the end
- Under 72 characters
- Focus on **why**, not **what** (the diff shows what)

---

## Body Guidelines

Include a body when:
- The change is not obvious from the description
- Multiple files are modified for different reasons
- Breaking changes need explanation

Format:
- Wrap at 72 characters
- Separate from subject with blank line
- Use bullet points for multiple changes

---

## Footer

- `BREAKING CHANGE: <description>` — for breaking API changes
- `Closes #123` — for issue references
- `Co-Authored-By: Name <email>` — for pair programming

---

## Examples

**Simple feature:**
```
feat(auth): add GitHub OAuth login flow
```

**Bug fix with context:**
```
fix(api): prevent duplicate skill submissions

The content checksum was computed before sanitization,
allowing whitespace-only differences to bypass dedup.

Closes #47
```

**Breaking change:**
```
refactor(skills)!: rename focus_pool to engagement_score

BREAKING CHANGE: focus_pool column renamed to engagement_score.
Run migration 20260301 before deploying.
```