Git Workflow
Seraph uses a two-step integration flow:
- feature and fix branches merge into
develop developmerges intomainonly when a human explicitly requests it
Branching Model
feat/my-feature → develop → main
fix/broken-thing → develop → main
docs/update-docs → develop → main
chore/cleanup → develop → main
All active work happens on short-lived topic branches created from develop.
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
develop:git checkout -b feat/my-feature develop - Make your changes, commit with clear messages
- Push and open a PR targeting
develop - CI runs tests automatically
- After review, merge to
develop - Delete the feature branch
Only merge develop into main when a human explicitly asks for it.
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 on main after the requested develop to main merge.
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.
Pull Request Format
PR titles should stay short and concrete:
Add provider run controlsTrace observer time source runtime boundariesRefresh failed-session retry readiness
PR bodies should use the shared checklist format:
## Done on develop
- [x] <already shipped baseline>
## Working in this PR
- [ ] <what this branch changes>
## Still to do after this PR
- [ ] <real remaining work after merge>
## Validation
- <command>
Keep the Done on develop section factual against develop. Do not mark branch-only work as already done.
CI/CD
- Tests: Run on every PR and protected-branch update (
test.yml) - Docs deploy: Triggered on push to
mainwhendocs/**files change (deploy-docs.yml) - Releases: Tagged on
mainafter a requested promotion fromdevelop
What NOT to Do
- Don't push directly to
mainordevelop— always use a PR - Don't create long-lived feature branches — keep them short and focused
- Don't open feature PRs against
mainunless a human explicitly asks for that