Branching Strategy and Conventions
Overview
P0 Foundational - Applies by default. Establishes branching model, commit conventions, and merge strategy.
REQUIRED: superpowers:verification-before-completion
When to Use
- •Any repository (default)
- •New repository creation
- •Existing repo without documented branching policy
- •User requests Git branching or commit conventions
- •Release management or versioning strategy needed
Core Workflow
- •Announce skill (default for all repos)
- •Define branching strategy (Trunk-Based, GitHub Flow, or Git Flow)
- •Set default branch as
main - •Define branch naming:
feature/*,fix/*,docs/*,hotfix/*,release/* - •Configure Conventional Commits (Commit Conventions)
- •Set up commitlint + pre-commit hooks
- •Define merge strategy: disable merge commits, prefer
--ff-onlyor squash - •Document squash merge SemVer preservation (Squash Merge Guide)
- •Configure branch protection rules
- •Document in CONTRIBUTING.md
- •Brownfield: baseline existing history, enforce on new commits
Quick Reference
| Element | Standard | Enforcement |
|---|---|---|
| Default Branch | main | Repository |
| Branch Naming | feature/*, fix/*, docs/* | CI validation |
| Commit Format | Conventional Commits | commitlint |
| Commit Types | feat, fix, docs, chore, refactor, test, ci | Pre-commit + CI |
| Merge Strategy | Squash (multi-commit) or FF-only (single) | Branch rules |
| Breaking Change | feat!: or BREAKING CHANGE footer | SemVer MAJOR |
See Branching Models for strategy comparison.
Red Flags - STOP
- •"Can define strategy later"
- •"Just use main for now"
- •"Team knows commits"
- •"History is messy anyway"
- •"Commit format not important"
- •"Can parse freeform messages"
- •"Too restrictive for developers"
All mean: Apply skill or document explicit opt-out in exclusions.md.
Rationalizations
| Excuse | Reality |
|---|---|
| "Can define strategy later" | Later never comes. Strategy takes 15 minutes, prevents project-long confusion. |
| "Just use main branch for now" | No strategy = accidental commits to main, no review process, deployment chaos. |
| "Team knows how to write commits" | Inconsistent messages break automation, make history unreadable, prevent SemVer. |
| "History is already messy" | Enforce on new commits. Baseline existing history, don't rewrite it. |
| "Commit format not critical" | Conventional Commits enable changelogs, SemVer, release notes. Critical for automation. |
Evidence Checklist
- • Branching strategy defined (Trunk-Based, GitHub Flow, or Git Flow)
- • Default branch is
main - • Branch naming conventions documented
- • Conventional Commits configured (commitlint)
- • Pre-commit hooks configured
- • Merge strategy defined (squash or FF-only)
- • CONTRIBUTING.md updated