Files
leo-claude-mktplace/plugins/git-flow/docs/BRANCHING-STRATEGY.md
lmiranda baad41da98 feat(plugins): implement Sprint 5 documentation and fixes (#266-#269)
Release v5.2.0

Documentation:
- Add git-flow branching strategy guide (docs/BRANCHING-STRATEGY.md)
- Add clarity-assist ND support documentation (docs/ND-SUPPORT.md)
- Update DEBUGGING-CHECKLIST.md with Gitea auto-close behavior and MCP restart notes
- Update plugin READMEs to reference new documentation

Bug Fix:
- Add milestone parameter to update_issue MCP tool (gitea_client.py, server.py, tools/issues.py)

Version Updates:
- Marketplace version: 5.1.0 → 5.2.0
- README title: v5.1.0 → v5.2.0
- CHANGELOG: [Unreleased] → [5.2.0] - 2026-01-28

Closes #266, Closes #267, Closes #268, Closes #269

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 14:26:42 -05:00

542 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Branching Strategy
## Overview
This document defines the branching strategy used by git-flow to manage code changes across environments. The strategy ensures:
- **Stability**: Production code is always release-ready
- **Isolation**: Features are developed in isolation without affecting others
- **Traceability**: Clear history of what changed and when
- **Collaboration**: Multiple developers can work simultaneously without conflicts
The strategy follows a hierarchical promotion model: feature branches merge into development, which promotes to staging for testing, and finally to main for production release.
## Branch Types
### Main Branches
| Branch | Purpose | Stability | Direct Commits |
|--------|---------|-----------|----------------|
| `main` | Production releases | Highest | Never |
| `staging` | Pre-production testing | High | Never |
| `development` | Active development | Medium | Never |
### Feature Branches
Feature branches are short-lived branches created from `development` for implementing specific changes.
| Prefix | Purpose | Example |
|--------|---------|---------|
| `feat/` | New features | `feat/user-authentication` |
| `fix/` | Bug fixes | `fix/login-timeout-error` |
| `docs/` | Documentation only | `docs/api-reference` |
| `refactor/` | Code restructuring | `refactor/auth-module` |
| `test/` | Test additions/fixes | `test/auth-coverage` |
| `chore/` | Maintenance tasks | `chore/update-dependencies` |
### Special Branches
| Branch | Purpose | Created From | Merges Into |
|--------|---------|--------------|-------------|
| `hotfix/*` | Emergency production fixes | `main` | `main` AND `development` |
| `release/*` | Release preparation | `development` | `staging` then `main` |
## Branch Hierarchy
```
PRODUCTION
┌───────────────[ main ]───────────────┐
│ (stable releases) │
│ ▲ │
│ │ PR │
│ │ │
│ ┌───────┴───────┐ │
│ │ staging │ │
│ │ (testing) │ │
│ └───────▲───────┘ │
│ │ PR │
│ │ │
│ ┌─────────┴─────────┐ │
│ │ development │ │
│ │ (integration) │ │
│ └─────────▲─────────┘ │
│ ╲ │
│ PR │PR ╲PR │
│ ╲ │
│ ┌─────┴──┐ ┌──┴───┐ ┌┴─────┐ │
│ │ feat/* │ │ fix/*│ │docs/*│ │
│ └────────┘ └──────┘ └──────┘ │
│ FEATURE BRANCHES │
└───────────────────────────────────────┘
```
## Workflow
### Feature Development
The standard workflow for implementing a new feature or fix:
```mermaid
gitGraph
commit id: "initial"
branch development
checkout development
commit id: "dev-base"
branch feat/new-feature
checkout feat/new-feature
commit id: "implement"
commit id: "tests"
commit id: "polish"
checkout development
merge feat/new-feature id: "PR merged"
commit id: "other-work"
```
**Steps:**
1. **Create branch from development**
```bash
git checkout development
git pull origin development
git checkout -b feat/add-user-auth
```
Or use git-flow command:
```
/branch-start add user authentication
```
2. **Implement changes**
- Make commits following conventional commit format
- Keep commits atomic and focused
- Push regularly to remote
3. **Create Pull Request**
- Target: `development`
- Include description of changes
- Link related issues
4. **Review and merge**
- Address review feedback
- Squash or rebase as needed
- Merge when approved
5. **Cleanup**
- Delete feature branch after merge
```
/branch-cleanup
```
### Release Promotion
Promoting code from development to production:
```mermaid
gitGraph
commit id: "v1.0.0" tag: "v1.0.0"
branch development
checkout development
commit id: "feat-1"
commit id: "feat-2"
commit id: "fix-1"
branch staging
checkout staging
commit id: "staging-test"
checkout main
merge staging id: "v1.1.0" tag: "v1.1.0"
checkout development
merge main id: "sync"
```
**Steps:**
1. **Prepare release**
- Ensure development is stable
- Update version numbers
- Update CHANGELOG.md
2. **Promote to staging**
```bash
git checkout staging
git merge development
git push origin staging
```
3. **Test in staging**
- Run integration tests
- Perform QA validation
- Fix any issues (merge fixes to development first, then re-promote)
4. **Promote to main**
```bash
git checkout main
git merge staging
git tag -a v1.1.0 -m "Release v1.1.0"
git push origin main --tags
```
5. **Sync development**
```bash
git checkout development
git merge main
git push origin development
```
### Hotfix Handling
Emergency fixes for production issues:
```mermaid
gitGraph
commit id: "v1.0.0" tag: "v1.0.0"
branch development
checkout development
commit id: "ongoing-work"
checkout main
branch hotfix/critical-bug
checkout hotfix/critical-bug
commit id: "fix"
checkout main
merge hotfix/critical-bug id: "v1.0.1" tag: "v1.0.1"
checkout development
merge main id: "sync-fix"
```
**Steps:**
1. **Create hotfix branch from main**
```bash
git checkout main
git pull origin main
git checkout -b hotfix/critical-security-fix
```
2. **Implement fix**
- Minimal, focused changes only
- Include tests for the fix
- Follow conventional commit format
3. **Merge to main**
```bash
git checkout main
git merge hotfix/critical-security-fix
git tag -a v1.0.1 -m "Hotfix: critical security fix"
git push origin main --tags
```
4. **Merge to development** (critical step)
```bash
git checkout development
git merge main
git push origin development
```
5. **Delete hotfix branch**
```bash
git branch -d hotfix/critical-security-fix
git push origin --delete hotfix/critical-security-fix
```
## PR Requirements
### To development
| Requirement | Description |
|-------------|-------------|
| Passing tests | All CI tests must pass |
| Conventional commit | Message follows `type(scope): description` format |
| No conflicts | Branch must be rebased on latest development |
| Code review | At least one approval (recommended) |
### To staging
| Requirement | Description |
|-------------|-------------|
| All checks pass | CI, linting, tests, security scans |
| From development | Only PRs from development branch |
| Clean history | Squashed or rebased commits |
| Release notes | CHANGELOG updated with version |
### To main (Protected)
| Requirement | Description |
|-------------|-------------|
| Source restriction | PRs only from `staging` or `development` |
| All checks pass | Complete CI pipeline success |
| Approvals | Minimum 1-2 reviewer approvals |
| No direct push | Force push disabled |
| Version tag | Must include version tag on merge |
## Branch Flow Diagram
### Complete Lifecycle
```mermaid
flowchart TD
subgraph Feature["Feature Development"]
A[Create feature branch] --> B[Implement changes]
B --> C[Push commits]
C --> D[Create PR to development]
D --> E{Review passed?}
E -->|No| B
E -->|Yes| F[Merge to development]
F --> G[Delete feature branch]
end
subgraph Release["Release Cycle"]
H[development stable] --> I[Create PR to staging]
I --> J[Test in staging]
J --> K{Tests passed?}
K -->|No| L[Fix in development]
L --> H
K -->|Yes| M[Create PR to main]
M --> N[Tag release]
N --> O[Sync development]
end
subgraph Hotfix["Hotfix Process"]
P[Critical bug in prod] --> Q[Create hotfix from main]
Q --> R[Implement fix]
R --> S[Merge to main + tag]
S --> T[Merge to development]
end
G --> H
O --> Feature
T --> Feature
```
### Release Cycle Timeline
```mermaid
gantt
title Release Cycle
dateFormat YYYY-MM-DD
section Feature Development
Feature A :a1, 2024-01-01, 5d
Feature B :a2, 2024-01-03, 4d
Bug Fix :a3, 2024-01-06, 2d
section Integration
Merge to development:b1, after a1, 1d
Integration testing :b2, after b1, 2d
section Release
Promote to staging :c1, after b2, 1d
QA testing :c2, after c1, 3d
Release to main :milestone, after c2, 0d
```
## Examples
### Example 1: Adding a New Feature
**Scenario:** Add user password reset functionality
```bash
# 1. Start from development
git checkout development
git pull origin development
# 2. Create feature branch
git checkout -b feat/password-reset
# 3. Make changes and commit
git add src/auth/password-reset.ts
git commit -m "feat(auth): add password reset request handler"
git add src/email/templates/reset-email.html
git commit -m "feat(email): add password reset email template"
git add tests/auth/password-reset.test.ts
git commit -m "test(auth): add password reset tests"
# 4. Push and create PR
git push -u origin feat/password-reset
# Create PR targeting development
# 5. After merge, cleanup
git checkout development
git pull origin development
git branch -d feat/password-reset
```
### Example 2: Bug Fix
**Scenario:** Fix login timeout issue
```bash
# 1. Create fix branch
git checkout development
git pull origin development
git checkout -b fix/login-timeout
# 2. Fix and commit
git add src/auth/session.ts
git commit -m "fix(auth): increase session timeout to 30 minutes
The default 5-minute timeout was causing frequent re-authentication.
Extended to 30 minutes based on user feedback.
Closes #456"
# 3. Push and create PR
git push -u origin fix/login-timeout
```
### Example 3: Documentation Update
**Scenario:** Update API documentation
```bash
# 1. Create docs branch
git checkout development
git checkout -b docs/api-authentication
# 2. Update docs
git add docs/api/authentication.md
git commit -m "docs(api): document authentication endpoints
Add detailed documentation for:
- POST /auth/login
- POST /auth/logout
- POST /auth/refresh
- GET /auth/me"
# 3. Push and create PR
git push -u origin docs/api-authentication
```
### Example 4: Emergency Hotfix
**Scenario:** Critical security vulnerability in production
```bash
# 1. Create hotfix from main
git checkout main
git pull origin main
git checkout -b hotfix/sql-injection
# 2. Fix the issue
git add src/db/queries.ts
git commit -m "fix(security): sanitize SQL query parameters
CRITICAL: Addresses SQL injection vulnerability in user search.
All user inputs are now properly parameterized.
CVE: CVE-2024-XXXXX"
# 3. Merge to main with tag
git checkout main
git merge hotfix/sql-injection
git tag -a v2.1.1 -m "Hotfix: SQL injection vulnerability"
git push origin main --tags
# 4. Sync to development (IMPORTANT!)
git checkout development
git merge main
git push origin development
# 5. Cleanup
git branch -d hotfix/sql-injection
```
### Example 5: Release Promotion
**Scenario:** Release version 2.2.0
```bash
# 1. Ensure development is ready
git checkout development
git pull origin development
# Run full test suite
npm test
# 2. Update version and changelog
# Edit package.json, CHANGELOG.md
git add package.json CHANGELOG.md
git commit -m "chore(release): prepare v2.2.0"
# 3. Promote to staging
git checkout staging
git merge development
git push origin staging
# 4. After QA approval, promote to main
git checkout main
git merge staging
git tag -a v2.2.0 -m "Release v2.2.0"
git push origin main --tags
# 5. Sync development
git checkout development
git merge main
git push origin development
```
## Configuration
### Environment Variables
Configure the branching strategy via environment variables:
```bash
# Default base branch for new features
GIT_DEFAULT_BASE=development
# Protected branches (comma-separated)
GIT_PROTECTED_BRANCHES=main,master,development,staging,production
# Workflow style
GIT_WORKFLOW_STYLE=feature-branch
# Auto-delete merged branches
GIT_AUTO_DELETE_MERGED=true
```
### Per-Project Configuration
Create `.git-flow.json` in project root:
```json
{
"defaultBase": "development",
"protectedBranches": ["main", "staging", "development"],
"branchPrefixes": ["feat", "fix", "docs", "refactor", "test", "chore"],
"requirePR": {
"main": true,
"staging": true,
"development": false
},
"squashOnMerge": {
"development": true,
"staging": false,
"main": false
}
}
```
## Best Practices
### Do
- Keep feature branches short-lived (< 1 week)
- Rebase feature branches on development regularly
- Write descriptive commit messages
- Delete branches after merging
- Tag all releases on main
- Always sync development after hotfixes
### Avoid
- Long-lived feature branches
- Direct commits to protected branches
- Force pushing to shared branches
- Merging untested code to staging
- Skipping the development sync after hotfixes
## Related Documentation
- [Branching Strategies Skill](/plugins/git-flow/skills/workflow-patterns/branching-strategies.md)
- [git-flow README](/plugins/git-flow/README.md)
- [Conventional Commits](https://www.conventionalcommits.org/)