---
name: tbd_branch_create
kind: function
lang: bash
domain: infra
version: "1.0.0"
purity: impure
signature: "tbd_branch_create(mode: string, ...args: string) -> void"
description: "Crea una rama TBD (trunk-based development) desde master/main actualizado. Soporta modos 'issue <NNNN> <slug>' y 'quick <slug>'. Autodetecta la rama base (master/main), verifica working tree limpio, hace pull --rebase y crea la rama. Valida formato de numero de issue (4 digitos) y slug (kebab-case ASCII)."
tags: [git, tbd, branch, trunk-based-development, workflow, pendiente-usar]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
params:
  - name: mode
    desc: "Modo de creacion: 'issue' para ramas issue/<NNNN>-<slug> o 'quick' para ramas quick/<slug>."
  - name: args
    desc: "Para mode=issue: NNNN (4 digitos) + slug (kebab-case). Para mode=quick: solo slug (kebab-case)."
output: "Crea la rama y cambia a ella. Imprime confirmacion a stdout. Exit 1 en caso de error (dirty tree, formato invalido, repo inexistente)."
tested: true
tests:
  - "issue branch created"
  - "quick branch created"
  - "issue number must be 4 digits"
  - "slug must be kebab-case"
  - "invalid mode exits 1"
  - "no args exits 1"
  - "dirty tree exits 1"
  - "existing branch exits 1"
  - "works with main as base"
test_file_path: "bash/functions/infra/tbd_branch_create.sh"
file_path: "bash/functions/infra/tbd_branch_create.sh"
---

## Ejemplo

```bash
# Crear rama para un issue
tbd_branch_create issue 0042 add-auth

# Crear rama para cambio rapido
tbd_branch_create quick fix-typo-readme

# Ejecutar suite de tests
bash bash/functions/infra/tbd_branch_create.sh --test
```

## Notas

La funcion autodetecta la rama base probando primero `master` y luego `main` con `git show-ref --verify`. Si el directorio actual no es un repo git, sale con error. Si el working tree tiene cambios no commiteados, sale con error antes de hacer pull. Los tests internos se ejecutan con `--test` y crean repos temporales aislados con `mktemp -d`.
