Development workflow for the Soushi + Tibi core team.
main ← production-stable, tagged releases only
└── dev ← integration branch, always deployable
└── feat/issue-N-short-slug ← feature work
└── fix/issue-N-short-slug ← bug fixes
└── refactor/short-slug ← refactoring
└── docs/short-slug ← documentation
└── chore/short-slug ← maintenance, deps, config
Rules:
main— no direct pushes. Only merges fromdevvia PR when cutting a release.dev— integration branch. Feature PRs land here first.- Feature branches — fork from
dev, PR back todev. Short-lived.
git checkout dev
git pull origin dev
git checkout -b feat/issue-N-short-slugBranch name format: {type}/issue-{N}-{slug} or {type}/{slug} when not tied to an issue.
| Type | When |
|---|---|
feat |
New capability |
fix |
Bug fix |
refactor |
Restructure without behavior change |
docs |
Documentation only |
chore |
Deps, config, CI, maintenance |
test |
Tests only |
Examples:
feat/issue-56-resource-lifecyclefix/issue-42-capability-grant-validationchore/bump-holochain-0-4docs/governance-zome-api
Conventional Commits format — already in use, keep it consistent.
{type}({scope}): imperative verb + specific object
Scopes: person, resource, governance, ui, tests, hrea, ci, nix, docs
feat(governance): add resource claim validation
fix(person): capability grant not persisting across conductor restart
refactor(resource): extract lifecycle state machine into module
docs(governance): add PPR system sequence diagram
chore(ci): extend build check to dev branch PRs
test(person): add multi-agent capability revocation scenario
Breaking changes: add ! after the scope, or add BREAKING CHANGE: footer.
feat(governance)!: rename EconomicEvent fields to match ValueFlows 2.0
- Push your branch:
git push -u origin feat/issue-N-slug - Open PR targeting
dev(notmain) - Fill the PR template (Intent, Changes, Decisions, How to test, Documentation, Related)
- Open as Draft while work is in progress
- Mark Ready for Review when complete and CI passes
Review: One approval required before merge. Soushi reviews Tibi's PRs, Tibi reviews Soushi's. Mexi is notified for visibility but doesn't block merges.
Merge method: Squash merge — keeps dev history clean, one commit per feature.
When dev is stable and ready for a release:
- Open a PR from
devtomain - PR title:
release: vX.Y.Z - Merge using merge commit (preserves the release boundary in history)
- Tag immediately after merge:
git tag vX.Y.Z && git push origin vX.Y.Z
Versioning: Semantic versioning. Increment:
MAJORfor breaking changes to zome APIs or DNA hashMINORfor new features (backward-compatible)PATCHfor bug fixes and docs
Delete feature branches after merge:
git branch -d feat/issue-N-slug # local
git push origin --delete feat/issue-N-slug # remoteGitHub's "Delete branch" button on the merged PR does both.
The build pipeline runs on:
- Push to
main - PRs targeting
main - PRs targeting
dev
Checks: Nix environment, bun install, build:happ (WASM compilation).
Tests are included but non-blocking while the test suite is being stabilized. Once stable, tests will be promoted to a required check.
Soushi uses git worktrees for feature branches (via PAI tooling). Worktrees live in
.worktrees/ (gitignored). If you see a .worktrees/ directory, that's normal.
Tibi: standard git checkout workflow works fine — worktrees are optional.
| Branch | Status | Action |
|---|---|---|
main |
Production-stable | Protected — PR only |
dev |
Integration | Active — base for new features |
feat/issues-51-52-53-55-hrea-person-bridge |
In-progress hREA Phase 1 | PR to dev when ready |
Open an issue or ping in the team channel.