mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-08-06 09:26:52 +01:00
2.3 KiB
2.3 KiB
| name | title | category | severity |
|---|---|---|---|
| feature-branch-must-merge-to-track-branch | Feature branches must merge into the project's declared track branch | architecture | required |
Feature branches must merge into the project's declared track branch
Rule
When a project declares a track branch in CLAUDE.md, all feature branches
MUST merge into that track branch — not into main directly. main is
reserved for releases and hotfixes.
Track branch declaration
The track branch is declared once in CLAUDE.md:
# Declares the integration target for this development sprint/module
trackBranch: purchase
If no trackBranch is declared, main is the default and feature branches
merge there directly.
Why
In multi-module or multi-sprint projects, a named track branch acts as an integration buffer:
| Without track branch | With track branch |
|---|---|
Every feature branch merges to main |
Features collect on track branch |
main accumulates partial, in-flight work |
main stays clean for hotfixes |
| A hotfix requires reverting or cherry-picking | A hotfix branches from main unaffected |
The rule protects the invariant: main is deployable at any moment.
Merge requirements
- Feature branch must compile and pass before merge
- Merge uses
--no-ffto preserve branch history in the log - After merge: BC dev status is set to
Done(see[[git-lifecycle-must-sync-bc-status]])
The branching model
main
└── <track-branch> (e.g. "purchase" — lives for one sprint/module)
└── feature/<name> ← development happens here
└── feature/<name>
└── bugfix/<name>
└── hotfix/<name> ← branches from main, merges back to main
At release: track-branch → main (via PR, after full QA).
Non-compliant
# Merging a feature directly to main when a track branch is declared in CLAUDE.md
git checkout main
git merge feature/my-feature # violates rule
Compliant
# Read track branch from CLAUDE.md → merge there
git checkout purchase
git merge --no-ff feature/my-feature
# Then sync BC: gitHubDevStatus = "Done"
Scope
Applies to every CURABIS project with a trackBranch declaration in CLAUDE.md.
Projects without a declaration use main as the track branch — no change needed.