| Status | Active |
|---|---|
| Owner | HyperFleet Platform Team |
| Last Updated | 2026-03-19 |
Defines the commit message format for all HyperFleet repositories, extending the Conventional Commits specification with a JIRA ticket prefix (
HYPERFLEET-XXX - <type>: <subject>). Covers commit types, character limits, breaking change notation, and enforcement via CI linting. All HyperFleet repos — services, adapters, infrastructure, and this architecture repo — must follow this standard.
This guide defines the commit message format and conventions for all HyperFleet repositories.
- Overview
- Commit Message Format
- Commit Types
- Body
- Footer
- Breaking Changes
- Examples
- Enforcement
- References
This standard is based on the Conventional Commits specification. Following these conventions ensures:
- Consistent git history across all repositories
- Automated changelog generation capability
- Clear context for code reviewers
- Easy navigation through commit history
This standard applies to:
- All HyperFleet service repositories
- All adapter repositories
- Infrastructure and tooling repositories
- Architecture documentation repository
HyperFleet extends Conventional Commits with two additional types:
style- Go formatting and linting tool changes (gofmt, goimports)perf- Performance-only improvements with no functional changes
Every commit message consists of a header, an optional body, and an optional footer:
HYPERFLEET-XXX - <type>: <subject>
[optional body]
[optional footer(s)]
When there is no associated JIRA ticket:
<type>: <subject>
[optional body]
[optional footer(s)]
The header is mandatory.
Subject line: The <type>: <subject> portion (excluding JIRA ticket prefix) MUST NOT exceed 72 characters.
Body: No hard line length limit. Use natural paragraph formatting with complete sentences.
Examples:
Good - <type>: <subject> is less than 72 characters:
HYPERFLEET-123 - feat: add comprehensive cluster validation with adapters
Bad - <type>: <subject> exceeds 72 characters:
HYPERFLEET-123 - feat: add comprehensive cluster validation logic for all cloud providers globally
Use the following types to categorize your commits:
| Type | Description | Example |
|---|---|---|
feat |
A new feature | Adding a new API endpoint |
fix |
A bug fix | Fixing a null pointer exception |
docs |
Documentation only changes | Updating README or API docs |
style |
Code style changes (formatting, semicolons, etc.) | Running gofmt |
refactor |
Code change that neither fixes a bug nor adds a feature | Restructuring code without changing behavior |
perf |
Performance improvements | Optimizing database queries |
test |
Adding or correcting tests | Adding unit tests for a function |
build |
Changes to build system or dependencies | Updating Makefile or go.mod |
ci |
Changes to CI configuration | Updating GitHub Actions workflow |
chore |
Other changes that don't modify src or test files | Updating .gitignore |
revert |
Reverting a previous commit | Reverting a problematic change |
- Use
featonly for user-facing features or significant new capabilities - Use
fixfor bug fixes, not for fixing typos in code (usestyleorchore) - Use
refactorwhen restructuring code without changing external behavior - Use
chorefor maintenance tasks that don't fit other categories
The body is optional. Use it only when the commit message alone isn't clear enough and the JIRA ticket doesn't provide sufficient context.
The footer might be used for:
- Breaking change notices
- Co-authored-by credits
- Additional references (when commit relates to multiple tickets)
When a commit relates to multiple tickets, the primary ticket goes in the header and additional references go in the footer:
HYPERFLEET-123 - feat: add cluster validation
Refs: HYPERFLEET-456
Breaking changes must be clearly indicated in the commit message using BREAKING CHANGE: in the footer.
The breaking change message must include:
- What changed - the specific API, field, or behavior that changed
- Impact - what will break for consumers
- Migration - what consumers need to do to adapt
HYPERFLEET-249 - feat: add generation-based reconciliation trigger
HYPERFLEET-401 - fix: handle nil pointer when cluster is deleted
HYPERFLEET-425 - docs: add commit message standard
HYPERFLEET-312 - refactor: extract validation logic to separate package
HYPERFLEET-376 - ci: add golangci-lint to GitHub Actions workflow
build: upgrade go version to 1.23
chore: update .gitignore to exclude coverage files
HYPERFLEET-567 - feat: rename cluster phase to status
BREAKING CHANGE: ClusterStatus.phase field renamed to ClusterStatus.status.
API clients reading cluster status will receive errors on the old field.
Update all references from .phase to .status in your code.
This standard will be enforced through automated tooling:
- GitHub Actions with commitlint to validate commit messages on pull requests
- PR titles must also follow this format for squash merges
- See HYPERFLEET-432 for implementation status
Developers may optionally configure local commit hooks using husky for immediate feedback during development.