ffb3f9b270
Los comandos hardcodeaban /home/lucas/fn_registry y hacían 'source' del script TBD, lo que fallaba en otros PCs (path inexistente) y bajo zsh (BASH_SOURCE sin definir).
- Path portable: ${FN_REGISTRY_ROOT:-$HOME/fn_registry} — usa la env var si está, si no ~/fn_registry. Válido en cualquier PC del ecosistema.
- Invocación con 'bash <script> <args>' en vez de 'source': los scripts tbd_branch_finish.sh y tbd_branch_create.sh tienen un entry point (if BASH_SOURCE[0] == $0) que llama a la función con los argumentos al ejecutarse directamente. Así funciona aunque la shell de la sesión sea zsh.
No se renombra el archivo del comando; solo se corrige la invocación interna. No incluye .claude/settings.json (cambio ajeno a esta tarea).
64 lines
2.3 KiB
Markdown
64 lines
2.3 KiB
Markdown
# Command: git branch (TBD)
|
|
|
|
Wrapper sobre `tbd_branch_create_bash_infra`. La función del registry maneja toda la lógica determinista (verificar limpio, autodetectar master/main, pull --rebase, validar slug + número de issue, crear rama). Este comando solo decide los inputs.
|
|
|
|
## Uso
|
|
|
|
```
|
|
/git-branch # preguntar al usuario
|
|
/git-branch issue 0021 hot-reload
|
|
/git-branch quick fix-typo-readme
|
|
```
|
|
|
|
## Pasos del asistente
|
|
|
|
1. **Decidir modo e inputs**:
|
|
- Preguntar si el cambio está asociado a un issue o no.
|
|
- Si es issue: pedir `<NNNN>` (4 dígitos) y `<slug>` kebab-case.
|
|
- Si es quick: pedir `<slug>` kebab-case descriptivo.
|
|
|
|
2. **Llamar la función del registry**:
|
|
```bash
|
|
# Path portable (cualquier PC): FN_REGISTRY_ROOT si está, si no ~/fn_registry.
|
|
# Se invoca con `bash` (no `source`): el script llama a tbd_branch_create con
|
|
# los argumentos al ejecutarse directamente, y así funciona aunque la shell de
|
|
# la sesión sea zsh (evita el fallo de BASH_SOURCE).
|
|
FN_TBD="${FN_REGISTRY_ROOT:-$HOME/fn_registry}/bash/functions/infra/tbd_branch_create.sh"
|
|
bash "$FN_TBD" issue 0021 hot-reload
|
|
# o
|
|
bash "$FN_TBD" quick fix-typo-readme
|
|
```
|
|
|
|
La función:
|
|
- Verifica que el working tree esté limpio (aborta si dirty).
|
|
- Cambia a master/main (autodetecta).
|
|
- `git pull --rebase` desde la rama base.
|
|
- Valida `<NNNN>` (regex 4 dígitos) y `<slug>` (kebab-case ASCII).
|
|
- `git checkout -b <rama>`.
|
|
- Imprime confirmación.
|
|
|
|
## Convenciones
|
|
|
|
- **Formato issue**: `issue/<NNNN>-<slug>` (4 dígitos siempre).
|
|
- **Formato quick**: `quick/<slug>` (sin número).
|
|
- **Ramas cortas**: idealmente horas, no días.
|
|
- **Una rama por issue**: no mezclar issues en la misma rama.
|
|
- **Nunca pushear la rama al remoto**: el push se hace desde master después del merge (ver `/git-push`).
|
|
- **No commits WIP**: cada commit atómico con mensaje real.
|
|
|
|
## Features multi-issue
|
|
|
|
Para features que no caben en una sola rama, sub-issues con sufijo letra:
|
|
|
|
```
|
|
issue/0015a-telegram-types
|
|
issue/0015b-telegram-client
|
|
issue/0015c-telegram-listener
|
|
```
|
|
|
|
Cada sub-rama sigue el mismo flujo. El código parcial se protege con **feature flags** en `dev/feature_flags.json`.
|
|
|
|
## Para tocar la lógica
|
|
|
|
Editar `tbd_branch_create_bash_infra` en `bash/functions/infra/tbd_branch_create.sh`, no este wrapper.
|