Git Workflow
Seraph uses trunk-based development with main as the single integration branch.
Branching Model
main (default, protected)
├── feat/my-feature → PR → main
├── fix/broken-thing → PR → main
├── docs/update-readme → PR → main
└── chore/cleanup → PR → main
All work happens on short-lived topic branches created from main. There are no develop, release/*, or hotfix/* branches.
Branch Prefixes
| Prefix | Use for |
|---|---|
feat/ | New features |
fix/ | Bug fixes |
docs/ | Documentation changes |
chore/ | Maintenance, CI, dependencies |
refactor/ | Code restructuring without behavior change |
Workflow
- Create a branch from
main:git checkout -b feat/my-feature main - Make your changes, commit with clear messages
- Push and open a PR targeting
main - CI runs tests automatically
- After review, merge to
main - Delete the feature branch
Versioning
Seraph uses CalVer (Calendar Versioning):
vYYYY.M.D[-patch]
Examples:
v2026.2.10— release on Feb 10, 2026v2026.2.10-1— first patch on the same dayv2026.3.5— release on Mar 5, 2026
Releases are tagged directly on main.
Commit Messages
Use conventional-style prefixes:
feat: add morning briefing scheduler
fix: prevent duplicate memory consolidation
docs: update roadmap with Phase 3 progress
chore: upgrade FastAPI to 0.115
refactor: extract tool registry from agent factory
Keep the first line under 72 characters. Add a blank line and description body for complex changes.
CI/CD
- Tests: Run on every push to
mainand on all PRs (test.yml) - Docs deploy: Triggered on push to
mainwhendocs/**files change (deploy-docs.yml) - Releases: Tagged on
main, no separate release branches
What NOT to Do
- Don't push directly to
main— always use a PR - Don't create long-lived feature branches — keep them short and focused
- Don't use
developorrelease/*branches — we use trunk-based development