Skip to content

Commit Conventions

Format

<type>(<scope>): <subject>

<body — optional, wrap at 72 chars>

<footer — optional: BREAKING CHANGE, refs>

Types

Type When to use
feat New feature or capability
fix Bug fix
refactor Code restructuring with no behaviour change
test Adding or fixing tests
docs Documentation changes (including this docs site)
chore Build scripts, CI, tooling, deps
perf Performance improvement
revert Reverts a previous commit

Scopes

Scope Area
scanner ScannerService, scanner hardware
bin BinService, bin state machine
bot BotService, robot control
session SessionService
infeed InfeedService
meesho Meesho layer (workers, HTTP client)
migrations EF Core migrations
docker Dockerfile, docker-compose
ci GitHub Actions workflows
docs Documentation site
makefile Makefile targets

Examples

feat(scanner): add recovery lifecycle for scanner reconnect

fix(meesho): prevent token expiry race in DataSyncWorker

refactor(bin): extract BinStateMachine from BinService

test(session): add concurrent session creation test

docs(branching): add sprint release train timeline

chore(ci): add docs build and deploy workflow

feat(manifest): add tenant manifest loader and validator

BREAKING CHANGE: manifest must be present at startup or app refuses to start

Subject line rules

  • Imperative mood: "add", "fix", "remove" — not "added", "fixes", "removed"
  • No capital letter at start
  • No period at end
  • Under 72 characters

Breaking changes

If the change breaks the tenant manifest schema or a client-facing API:

feat(manifest): rename features.awb_sync to features.data_sync

BREAKING CHANGE: tenant manifests using features.awb_sync must be regenerated.
All clients must receive updated signed manifests before upgrading.

Breaking changes bump the MAJOR version (see Branching Model → Versioning).


What not to include in commit messages

  • Reference to the current task ("for issue #123") — use PR description instead
  • Who wrote it — that's what git log --author is for
  • Explanation of what the code does — the code does that; explain why