conventional-commits · v1 · 2026-10-16 · sha256 329f52fc56a114a0
conventional-commits v1A
Immutable. This exact content never changes and is served at /api/v1/blob/329f52fc56a114a0.
--- name: conventional-commits description: Create, classify, validate, and explain commit messages using Conventional Commits v1.0.0, with repository-aware type, scope, footer, and breaking-change guidance. Use when drafting or reviewing a commit message. license: MIT metadata: author: Andrew G. Brown (https://github.com/brownag) version: 1.0 source_repo: aigb-skills source_path: skills/conventional-commits/SKILL.md source_url: https://github.com/AndrewBrown-USDA/aigb-skills.git --- # Conventional Commits Use this skill to draft or review one commit message. Apply Conventional Commits v1.0.0 first, then report repository-specific style concerns separately. ## When to Use Use this skill when you need to: - draft a commit message from a change description; - classify a change by its primary purpose; - review a proposed commit message; - explain a type, scope, footer, or breaking-change marker; - suggest a corrected message without inventing technical details. Do not use this skill for commit-history intervals, churn metrics, architectural convergence, release automation, or changelog generation. Use `git-history-interval-study` for history analysis and `adr-distillation` for enduring architectural decisions. ## Message Format ```text <type>[optional scope][!]: <description> [optional body] [optional footer(s)] ``` The header requires a type, the `: ` separator, and a non-empty description. A scope is optional and normally names the affected area. A body and footers are optional and follow a blank line. Examples: ```text feat(export): add GeoJSON output fix(auth)!: reject expired sessions docs: clarify installation steps fix(parser): handle empty input Refs: #123 Reviewed-by: Example User Change-Id: Iabc123 BREAKING CHANGE: callers must pass an explicit format ``` Do not require a scope, body, or footer when the message is otherwise valid. ## Default Type Taxonomy Use the change's primary purpose. Recommend separate commits when independent changes can be separated. | Type | Use for | |---|---| | `feat` | A new user- or system-facing capability | | `fix` | Incorrect, unintended, or failing behavior | | `perf` | A performance or resource-use improvement | | `refactor` | Behavior-preserving restructuring | | `docs` | Documentation-only changes | | `test` | Test-only changes | | `build` | Build tools, dependencies, or packaging | | `ci` | Continuous-integration or delivery configuration | | `style` | Non-functional formatting or style | | `chore` | Maintenance not covered by a more specific type | | `revert` | Reversal of an earlier commit | Conventional Commits gives normative meaning to `feat` and `fix`. The remaining types are an allowed project taxonomy and may be overridden by repository guidance. When categories overlap, choose the primary purpose: - use `perf` when performance is the main objective, otherwise `refactor`; - use `fix` when correcting runtime behavior is the main objective, otherwise `build` for dependency or packaging work; - use `ci` for delivery automation and `test` for tests or test behavior; - use `docs` for documentation content and `build` or `ci` when documentation automation is the main change. ## Breaking Changes A breaking change may be marked in the header: ```text refactor(api)!: replace the response contract ``` or in a footer: ```text refactor(api): replace the response contract BREAKING CHANGE: clients must use the new response fields ``` Both forms may be used together. Recognize `BREAKING CHANGE:` and `BREAKING-CHANGE:`. A breaking change may accompany any type. Treat the breaking-change token as the uppercase special footer form. General type casing may be accepted by a standards-oriented review, but lowercase types remain the repository style recommendation. ## Bodies and Footers Use a body when context, motivation, or consequences need explanation. Use footers for issue references, acknowledgments, metadata, or breaking-change details. Valid footer shapes include: ```text Token: value Token #value ``` Ordinary footer tokens must not contain whitespace. Use a hyphen for multiword tokens, such as `Reviewed-by`. `BREAKING CHANGE` is the special exception. Do not claim that `Fixes`, `Refs`, `Closes`, or other issue-reference tokens are required by Conventional Commits. Preserve repository-specific footer conventions when they exist. ## Drafting Workflow 1. Identify the change's primary purpose. 2. Select the most specific applicable type. 3. Add a useful scope when the affected area is known. 4. Mark a breaking change with `!`, a breaking footer, or both. 5. Write a concise description after `: `. 6. Add a body or footer only when it adds necessary context. 7. Ask for clarification instead of inventing technical details. Prefer a single-sentence subject. Do not put orchestration, wave, or phase numbers in the subject; record those in planning artifacts instead. ## Review Workflow 1. Parse the type, optional scope, optional `!`, and description. 2. Verify the `type: description` structure and exact colon-plus-space separator. 3. Check blank-line separation before bodies and footers. 4. Check footer token syntax. 5. Identify breaking changes from either supported indicator. 6. Apply the primary-purpose taxonomy. 7. Check repository-specific types, scopes, casing, and footer conventions. 8. Report concrete findings and a corrected message when useful. Return this shape: ```text Status: Valid | Invalid | Valid with project-specific concerns Findings: - ... Suggested message: <suggested type>[optional scope][!]: <suggested description> ``` Use `Invalid` for malformed or incomplete Conventional Commit syntax. Use `Valid with project-specific concerns` when the standard is satisfied but local style or policy should be improved. ## Repository Boundaries - `git-history-interval-study` owns commit-range analysis, churn, type distributions, and architectural convergence. - `adr-distillation` may use commit messages as evidence, but a message alone does not prove an enduring architectural decision. - `plan-wave` and `wave-orchestration` own planning state, task reports, dependencies, and execution metadata. - Repository-specific types and scopes take precedence as policy, but optional standard elements must not be made mandatory without explicit local guidance. Reference: [Conventional Commits v1.0.0](https://www.conventionalcommits.org/en/v1.0.0/).