Use one of:
feature/<TICKET-ID>-short-description— new functionalityfix/<TICKET-ID>-short-description— bug fixes off mainhotfix/<TICKET-ID>-short-description— production hotfixes off the latest prod tag
<TICKET-ID> is uppercase letters + digits, e.g. MTM-1234. PRs from
non-conforming branches fail the Branch name check and cannot merge.
Conventional Commits. Format:
<type>: <imperative summary>
[optional body]
[optional footer, e.g. BREAKING CHANGE: ...]
Types we use:
feat:— new feature → minor version bumpfix:— bug fix → patch version bumpchore:— tooling, deps, no behavior changeci:— pipeline / workflow changesdocs:— docs onlyrefactor:— no behavior change, code restructuringtest:— tests only
A BREAKING CHANGE: footer (or ! after type, e.g. feat!:) bumps the
major version.
Squash-merge only. One commit per feature lands on main. The PR title
becomes the squash commit subject — write it as a Conventional Commit
(feat: add retry logic to agent matcher).
- Branch matches naming convention
- At least one approval
- All required status checks pass
- Branch is up to date with
main(the protection rule enforces this) - Branch is deleted on merge (automatic)
Releases are cut by tagging main with vMAJOR.MINOR.PATCH. Tag triggers
the build pipeline. Don't tag from feature branches.