Expert knowledge for detecting the optimal conventional commit type.
Detection Algorithm
Step 1: Gather Data
# Get modified files
git diff --name-only
git diff --staged --name-only
Get change statistics
git diff --stat git diff --staged --stat
Check for keywords in diffgit diff | grep -i "fix|bug|error" | head -5
### Step 2: Categorize Files
| Category | File Patterns |
|----------|---------------|
| docs | `*.md`, `*.txt`, `*.rst`, `README*`, `CHANGELOG*` |
| test | `*.test.*`, `*.spec.*`, `__tests__/*`, `test/*` |
| config | `*.json`, `*.yml`, `*.yaml`, `*.toml`, `.*rc` |
| ci | `.github/*`, `.gitlab-ci.yml`, `Jenkinsfile` |
| build | `package.json`, `Makefile`, `webpack.*`, `vite.*` |
| style | Only whitespace, formatting changes |
| src | `*.ts`, `*.js`, `*.py`, `*.go`, `*.rs`, etc. |
### Step 3: Apply Rules
IF only docs files changed: → docs
IF only test files changed: → test
IF only config/build files changed: → chore
IF only CI files changed: → ci
IF diff contains "fix", "bug", "error", "issue", "resolve": → fix
IF new files added with business logic: → feat
IF files renamed/moved without logic change: → refactor
IF performance keywords ("optimize", "perf", "speed", "cache"): → perf
IF formatting only (whitespace, semicolons): → style
DEFAULT: → Use /commit-pro:commit for smart analysis
### Step 4: Determine Scope
Extract scope from primary directory:
src/components/Button.tsx → ui or button src/api/auth.ts → auth lib/utils/date.ts → utils server/routes/user.ts → user
## Quick Reference
| Type | When | Version Bump |
|------|------|-------------|
| `feat` | New functionality | PATCH |
| `fix` | Bug correction | PATCH |
| `docs` | Documentation only | PATCH |
| `style` | Formatting only | PATCH |
| `refactor` | Code restructure | PATCH |
| `perf` | Performance | PATCH |
| `test` | Tests only | PATCH |
| `build` | Build/deps | PATCH |
| `ci` | CI/CD config | PATCH |
| `chore` | Maintenance | PATCH |
> MINOR/MAJOR bumps are **manual user decisions**, never automatic.
## Post-Commit Actions
See the `post-commit` skill for universal CHANGELOG, version bump, and tag logic (works for all repos).
## Examples
**Example 1: Only README changed**
Files: README.md → /commit-pro:docs
**Example 2: New component + test**
Files: src/Button.tsx, src/Button.test.tsx → /commit-pro:feat (primary is new feature)
**Example 3: Fix in existing file**
Files: src/api/auth.ts Diff contains: "fix login bug" → /commit-pro:fix