docs: add branch management workflow guide (TODO-088)
Document branch naming conventions, git worktree setup, PR stacking patterns, and local CI mirroring recommendations.
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
# Branch Management Workflow
|
||||
|
||||
**Document status:** Active reference
|
||||
**Date:** 2026-06-11
|
||||
|
||||
## Branch Naming Convention
|
||||
|
||||
Branches use `<type>/<short-description>`:
|
||||
|
||||
| Prefix | Purpose | Examples |
|
||||
|--------|---------|---------|
|
||||
| `feat/` | New feature | `feat/file-transfer`, `feat/poke-notifications` |
|
||||
| `fix/` | Bug fix | `fix/ios-audio-playback-capture`, `fix/cross-platform-audio-route` |
|
||||
| `docs/` | Documentation only | `docs/codebase-analysis-v2`, `docs/export-compliance-closed-source` |
|
||||
| `refactor/` | Code restructuring | `refactor/remove-ios-raw-unit` |
|
||||
| `chore/` | Tooling, CI, maintenance | `chore/gitignore-macos-framework-binary`, `chore/upgrade-android-toolchain` |
|
||||
| `review-pr-<N>` | Review-specific branch | `review-pr-21`, `review-pr-22` |
|
||||
| `pr-<N>` | PR checkout | `pr-34`, `pr-35` |
|
||||
| `product/` | Long-lived product milestone | `product/scaffold-v0`, `product/desktop-ui-ux-redesign` |
|
||||
|
||||
Scopes in commit messages should match the branch type. Both follow the Conventional Commits convention defined in `docs/governance/git-commit-message-convention.md`.
|
||||
|
||||
## Merging Strategy
|
||||
|
||||
All PRs merge into the default branch (`main` via GitHub merge commits). Squash merges are not used — branch topology is preserved via `git log --graph`.
|
||||
|
||||
## Git Worktree for Parallel Development
|
||||
|
||||
This project already uses git worktrees for PR review. Three are currently active:
|
||||
|
||||
```
|
||||
/chanora → docs/codebase-analysis-v2
|
||||
/tmp/opencode/chanora-pr34-review → simplify-project-review
|
||||
/tmp/opencode/chanora-pr35-review → (detached HEAD)
|
||||
/tmp/opencode/chanora-pr36-review → pr-36-review
|
||||
```
|
||||
|
||||
### Why Worktrees
|
||||
|
||||
- Review PRs without stashing or losing your working tree state
|
||||
- Run long CI builds in one tree while editing in another
|
||||
- Keep multiple feature branches checked out simultaneously
|
||||
- Avoid `git stash` / `git checkout` churn
|
||||
|
||||
### Common Workflows
|
||||
|
||||
**Feature branch:**
|
||||
```bash
|
||||
git worktree add ../chanora-feat-x feat/my-feature
|
||||
cd ../chanora-feat-x
|
||||
# work, commit, push, open PR
|
||||
```
|
||||
|
||||
**Hotfix (from main):**
|
||||
```bash
|
||||
git worktree add ../chanora-hotfix -b fix/urgent-bug origin/main
|
||||
cd ../chanora-hotfix
|
||||
# fix, commit, push, open PR
|
||||
# merge PR, then: git worktree remove ../chanora-hotfix
|
||||
```
|
||||
|
||||
**Review branch (checkout a PR):**
|
||||
```bash
|
||||
gh pr checkout 36 --detach
|
||||
# or via worktree:
|
||||
git worktree add ../chanora-review-36 pr-36-review
|
||||
```
|
||||
|
||||
### Cleanup
|
||||
|
||||
```bash
|
||||
git worktree remove ../chanora-feat-x # after merge
|
||||
git worktree prune # clean stale entries
|
||||
git branch -d feat/my-feature # delete merged branch
|
||||
```
|
||||
|
||||
## PR Stacking Pattern
|
||||
|
||||
This project uses stacked PRs where features are built on top of each other:
|
||||
|
||||
```
|
||||
main ← #39 (refactor/remove-ios-raw-unit)
|
||||
└─ #38 (fix/ios-audio-session)
|
||||
└─ #37 (feat/desktop-silero-vad)
|
||||
```
|
||||
|
||||
To create a stacked PR:
|
||||
|
||||
1. Branch from the base PR's branch (not `main`)
|
||||
2. Push and open PR targeting the base PR's branch
|
||||
3. After base merges, rebase onto `main` and update the target
|
||||
|
||||
For managing stacks, `gh` CLI is sufficient:
|
||||
|
||||
```bash
|
||||
# Create dependent branch
|
||||
git checkout -b feat/next-thing origin/feat/base-thing
|
||||
# After base merges:
|
||||
git rebase origin/main && git push --force-with-lease
|
||||
# Update PR target via GitHub UI or:
|
||||
gh pr edit <number> --base main
|
||||
```
|
||||
|
||||
## Local CI Mirroring
|
||||
|
||||
The project CI (defined in `.github/workflows/`) runs platform builds (Android, Windows, macOS, iOS), clippy, and tests. To mirror locally before pushing:
|
||||
|
||||
```bash
|
||||
# Rust checks (fast, run always)
|
||||
cargo clippy --workspace --all-targets -- -D warnings
|
||||
cargo test --workspace
|
||||
|
||||
# Flutter checks
|
||||
cd flutter && flutter analyze
|
||||
|
||||
# Platform builds (run before PR)
|
||||
cargo build --target aarch64-linux-android
|
||||
cargo build --target x86_64-pc-windows-msvc
|
||||
cargo build --target aarch64-apple-darwin
|
||||
```
|
||||
|
||||
Tip: Use `act` (https://github.com/nektos/act) to run GitHub Actions locally for full CI parity:
|
||||
|
||||
```bash
|
||||
act pull_request # runs the PR workflow locally via Docker
|
||||
```
|
||||
|
||||
## Quick Reference
|
||||
|
||||
| Task | Command |
|
||||
|------|---------|
|
||||
| New feature | `git worktree add ../chanora-X -b feat/X origin/main` |
|
||||
| Review PR | `gh pr checkout N` or `git worktree add ../review-N pr-N-review` |
|
||||
| Cleanup after merge | `git worktree remove ../chanora-X && git branch -d feat/X` |
|
||||
| Check worktrees | `git worktree list` |
|
||||
| Local CI | `cargo clippy --workspace --all-targets -- -D warnings && cargo test --workspace` |
|
||||
Reference in New Issue
Block a user