Ir al contenido

Git Branch Strategy

Version: 1.0.0 | Marzo 2026 Framework: AI Software Factory OS v7.7 Aplica a: El framework (baseline repo) + proyectos que lo consumen


main (estable, tageada) ← Proyectos consumen ESTO via subtree
│ merge --no-ff (requiere tests pass)
develop (integracion) ← Trabajo diario se integra aqui
│ merge del worktree al terminar sesion
claude/* (worktrees efimeros) ← Sesiones de Claude Code (auto-creados)
BranchPropositoProteccionMerge policy
mainRelease estable. Proyectos apuntan aqui.Tags semver. Solo merge de develop.--no-ff con commit descriptivo
developIntegracion. Acumula features entre releases.Tests deben pasar. Push directo OK.Fast-forward desde claude/*
claude/*Worktrees efimeros de sesiones Claude Code.Ninguna. Se eliminan al cerrar.Fast-forward a develop
v7.7.0 ← Release actual
v7.7.1 ← Patch (fixes, docs)
v7.8.0 ← Minor (features, scripts, guias nuevas)
v8.0.0 ← Major (cambios en core methodology, breaking changes)

Regla de versionado:

  • Cambios en framework/core/ → version major
  • Cambios en scripts/, guides/, reference/, accelerators/ → version minor
  • Fixes, clarificaciones, doc sync → version patch
Ventana de terminal
# 1. En develop: verificar que tests pasan
git checkout develop
python tests/test_framework.py -v
# 2. Merge a main
git checkout main
git merge develop --no-ff -m "release: v7.8.0 — descripcion breve"
# 3. Tagear
git tag -a v7.8.0 -m "v7.8.0 — descripcion del release"
# 4. Push
git push origin main --tags
# 5. Volver a develop
git checkout develop
git merge main # Sincronizar

Los proyectos que usan el framework como subtree:

Ventana de terminal
# Pinear a version estable (recomendado para produccion)
cd mi-proyecto/baseline
git fetch && git checkout v7.7.0
# Seguir latest (para early adopters)
cd mi-proyecto/baseline
git pull origin main
# Actualizar subtree
cd mi-proyecto
git add baseline && git commit -m "chore: update framework to v7.8.0"

Las branches claude/* se limpian periodicamente:

Ventana de terminal
# Listar branches locales claude/* ya mergeados
git branch --merged develop | grep "claude/"
# Eliminar branches mergeados
git branch --merged develop | grep "claude/" | xargs git branch -d

Para 1 persona con AI assistant. Minima ceremonia.

main
│ merge directo (squash)
feat/nombre-feature ← 1 branch por feature
fix/nombre-fix ← 1 branch por fix

Reglas:

  • main siempre desplegable
  • 1 branch activa a la vez (secuencial)
  • Squash merge al completar
  • Tests deben pasar antes de merge
  • No se necesita develop
  • Gates: self-review (checklist en PR description)

Cuando un FAB trabaja:

main
│ PR con gate check
fab/intent-001 ← FAB crea branch por intent

Para equipo pequeno (2-5 personas) con FABs.

main (produccion)
│ PR + gate check + code review
develop (integracion)
├── feat/auth-module ← Humano o FAB
├── feat/search-api ← Humano o FAB
├── fix/latency-issue ← Fix
└── fab/intent-002 ← FAB autonomo

Reglas:

  • main = produccion (protegido, solo PRs desde develop)
  • develop = integracion (PRs desde feature branches)
  • Feature branches: feat/, fix/, chore/, fab/
  • Code review requerido para merge a develop
  • Gate check automatico en PR a main
  • FABs crean branches fab/intent-NNN con worktrees aislados

Conflict resolution: pr_per_agent (default)

Track Full — Main + Develop + Release + Swarming

Sección titulada «Track Full — Main + Develop + Release + Swarming»

Para equipos grandes (5+) con multiples FABs en paralelo.

main (produccion)
│ merge --no-ff + tag
release/v1.2.0 (estabilizacion)
│ cherry-pick fixes
develop (integracion)
├── feat/auth ─────────── Agent-Auth (bounded context)
├── feat/core ─────────── Agent-Core (bounded context)
├── feat/ai ──────────── Agent-AI (bounded context)
├── fab/intent-003 ────── FAB autonomo
└── MERGE QUEUE ← serializado, 1 merge a la vez

Reglas:

  • main = produccion (protegido, solo desde release branches)
  • release/vX.Y.Z = estabilizacion pre-deploy (solo fixes, no features)
  • develop = integracion diaria
  • Feature branches por bounded context (swarming pattern)
  • Merge queue obligatorio (GitHub Merge Queue o custom)
  • Gate checks automaticos en cada PR
  • FABs usan worktrees aislados via fab-workspace-setup.sh

Conflict resolution: lead_merges (lead FAB o Tech Lead controla merges)

Merge queue order:

  1. Schema/migrations primero (DB)
  2. Contratos/APIs segundo
  3. Logica de negocio tercero
  4. UI/frontend ultimo
AspectoSoloLeanFull
Branches principalesmainmain + developmain + develop + release
Feature branchesfeat/, fix/feat/, fix/, fab/feat/, fix/, fab/ + bounded context
Merge policySquash directoPR + reviewPR + review + merge queue
Gate enforcementSelf-reviewCI automaticoCI + merge queue + human gate
FAB isolationBranch por intentWorktree por FABWorktree + bounded context
Conflict strategyN/A (1 persona)pr_per_agentlead_merges
Release processTag en maindevelop → main + tagdevelop → release → main + tag

Ventana de terminal
# fab-workspace-setup.sh crea:
fab-workspace-setup.sh --project mi-proyecto --intent INTENT-2026-001
# Resultado:
# ../fab-mi-proyecto/ ← Worktree aislado
# └── branch: fab/intent-001 ← Branch dedicado
1. CREAR fab/intent-NNN (fab-workspace-setup.sh)
2. EJECUTAR F04 → F09 (FAB headless, checkpoints cada 60 min)
3. PR fab/intent-NNN → develop (al completar)
4. REVIEW Gate check + code review
5. MERGE Squash merge a develop
6. CLEANUP Eliminar branch + worktree

Configurar en .fab-config.yaml:

coordination:
conflict_strategy: "pr_per_agent" # Opciones:
# pr_per_agent — Cada FAB crea PR independiente (default)
# sequential_rebase — FABs rebase en orden (linear history)
# lead_merges — Solo lead FAB mergea (control centralizado)
EstrategiaCuando usarVentajaRiesgo
pr_per_agentLean track, FABs independientesSimple, cada FAB es autonomoMerge conflicts si tocan mismos archivos
sequential_rebaseLean track, historia linealClean historyLento si hay muchos FABs
lead_mergesFull track, swarmingControl total, sin conflictosBottleneck en el lead

Cuando multiples FABs trabajan en paralelo, proteger archivos compartidos:

.fab-coordination.yaml
shared_files:
- "project/project-config.yaml" # Solo lead modifica
- "project/data_classification.yaml" # Solo data_steward modifica
- "project/F05_contracts/.openspec/" # Solo spec_writer modifica

Usar fab-coordinator.py conflict-detect para verificar antes de merge:

Ventana de terminal
python3 scripts/fab-coordinator.py --project-dir . conflict-detect

Cada gate del ADLC corresponde a un punto de merge:

GateTriggerBranch flowReviewer
Gate A (Strategy)PR con F01 artifactsfeat/strategy → developProduct Owner
Gate B (Domain)PR con F02 artifactsfeat/domain → developTech Lead
Gate C (Architecture)PR con F04 artifactsfeat/architecture → developArchitect (puede ser auto)
Gate D (Contracts)PR con F05 artifactsfeat/contracts → developTech Lead (puede ser auto)
Gate E (TEVV)PR con F07 resultsfab/intent → developQA (puede ser auto si confidence >= 0.9)
Gate F (Security)PR con F08 artifactsdevelop → main (o release)Security + human required

CI automatico (.github/workflows/gates.yml):

  • Corre compliance-linter.py, artifact-validator.py, fab-gate-check.py en cada PR
  • Comenta el PR con resultado del gate
  • Bloquea merge si gate falla

Companion del AI-First Engineering Framework v7.7 See: git_conventions.md, Swarming_Strategy_Merge_Wall_Guide.md, fab-workspace-setup.sh