Branching Strategy
SeedTrust uses a two-branch model: dev as the integration branch and main as the production branch.
Branches
| Branch | Purpose |
|---|---|
main | Production. Only receives merges at sprint release or via hotfix. |
dev | Integration. All feature work merges here first. |
Feature Development
- Branch from
dev:Terminal window git checkout devgit pullgit checkout -b feat/ST-xxxx - Do your work, open a PR targeting
dev. - After review and merge, the feature is in
devand will go out with the next sprint release.
At the end of each sprint, dev is merged into main and a release is cut.
Hotfixes
For urgent fixes that can’t wait for the next sprint:
- Branch from
main:Terminal window git checkout maingit pullgit checkout -b hotfix/ST-xxxx - Fix.
- Merge into
devto validate in the testing environment (safe — the fix came frommain):Terminal window git checkout devgit merge hotfix/ST-xxxx - Once validated, open a PR targeting
main. - After merge, release from
main. - Merge
mainback intodevto keep branches in sync:Terminal window git checkout devgit merge main
Highest-Priority Tickets
If a Jira ticket has Highest priority, treat it exactly like a hotfix regardless of ticket type — branch from main so it can reach production without waiting for dev to stabilize.
Environments:
testingmirrorsdev;productionmirrorsmain. There is no dedicated staging environment that mirrorsmain, so validate intestingby merging your branch intodevfirst (safe — the fix came frommainso it carries no unrelateddevchanges).
- Branch from
main:Terminal window git checkout maingit pullgit checkout -b hotfix/ST-xxxx - Fix.
- Merge into
devto validate in the testing environment:Terminal window git checkout devgit merge hotfix/ST-xxxx - Once validated, open a PR targeting
main. - After merge, release from
main. - Merge
mainback intodevto keep branches in sync:Terminal window git checkout devgit merge main
Do not branch from
devfor these tickets, even if related work is already there — that would tie the release to untested changes.
Flow at a Glance
feat/my-feature ────► dev ──► main (sprint release)hotfix/my-fix ──────────► main ──► dev (sync back)ST-XXXX (Highest prio) ──────────► main ──► dev (treated as hotfix)Branch Naming
| Type | Pattern | Example |
|---|---|---|
| Feature | feat/<ticket-number> | feat/ST-1234 |
| Hotfix | hotfix/<ticket-number> | hotfix/ST-2345 |
Commit Messages
Every commit must include the Jira ticket number and follow Conventional Commits format so changes can be traced and changelogs can be generated automatically.
Format: ST-XXXX type(scope): description
| Part | Description |
|---|---|
ST-XXXX | Jira ticket number — required on all commits |
type | What kind of change (see table below) |
(scope) | Area of the codebase affected — optional but recommended |
description | Short, lowercase, no period at the end |
Commit types:
| Type | Use for |
|---|---|
feat | New feature |
fix | Bug fix |
refactor | Code change that is neither a feature nor a fix |
docs | Documentation only |
test | Adding or updating tests |
chore | Maintenance, dependency bumps, config |
style | Formatting, whitespace (no logic change) |
perf | Performance improvement |
Examples:
ST-1234 feat(disbursements): add surrogate payment approval stepST-2345 fix(banking): fix ACH form validation on case creationST-3675 fix(funding): fix total remainder and estimated to fundST-3644 feat(banking): add huntington balance summary endpointST-3763 fix(nacha): atomize comp and transaction writes in batchCommits without a ticket (merge fixes, chores, docs):
fix(case): restore css and js lost in bad merge with mainchore(deps): bump lodash to 4.17.21docs(branching): add conventional commits guidance- Use the same ticket number as your branch
- Keep the description lowercase, present tense
- No period at the end