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).
4.3 KiB
Command: git push (TBD)
Integra cambios a master y publica. Soporta ramas issue/* y quick/*.
La fase final (pull --rebase master + merge --no-ff + git push + git branch -d) la hace tbd_branch_finish_bash_infra del registry. Tests y commits no los hace la función — los corre el asistente porque dependen del stack.
Pasos del asistente
1. Verificar rama actual y estado
git branch --show-current
git status --short
Si estamos en issue/* o quick/*
Continuar al paso 2.
Si estamos en master con cambios pendientes
Crear rama primero:
- Preguntar si el cambio está asociado a un issue.
- Si es issue: pedir
<NNNN>y<slug>, llamar/git-branch issue <NNNN> <slug>. - Si es quick: pedir
<slug>, llamar/git-branch quick <slug>.
No inventar números de issue. Solo usar issue/ si existe en dev/issues/.
Si estamos en master sin cambios
STOP: nada que publicar.
2. Revisar cambios y crear commits atómicos
git status --short
git diff --stat
git diff
Crear commits atómicos por bloque lógico. Cada commit agrupa cambios de la misma naturaleza:
git add <archivos_del_bloque_1>
git commit -m "<tipo>: <resumen breve>" -m "Descripción larga en español: qué cambia, por qué, impacto, alcance."
git add <archivos_del_bloque_2>
git commit -m "<tipo>: <resumen breve>" -m "Descripción larga en español."
Reglas críticas:
- No WIP: nunca commitear "wip", "tmp", código a medias.
- No mezclar tipos: no combinar
feat:+test:en un mismo commit. - No squash: los commits individuales se preservan via
--no-ff. Usargit log --first-parent masterpara ver merges. - No rebase interactivo.
3. Ejecutar tests
Obligatorio antes de mergear. Comando depende del stack:
| Stack | Comando |
|---|---|
| Go | go test ./... (o con tags si aplica: -tags goolm / -tags fts5) |
| C++ | ctest --test-dir cpp/build |
| Python | pytest |
| Sin tests aplicables (solo docs/config) | indicar al usuario y continuar |
Si fallan → STOP y corregir. Si pasan → paso 4.
4. Evaluar feature flags
Feature flag = código terminado y testeado, no código a medias.
Si se modificó dev/feature_flags.json o el cambio es parte de feature multi-fase:
- Verificar que
dev/feature_flags.jsonesté actualizado. - Confirmar estado correcto del flag (
enabled: true/false). - Incluir el archivo en el commit correspondiente (no commit separado).
Si autocontenido, saltar.
5. Cerrar la rama (registry)
# Path portable (cualquier PC): FN_REGISTRY_ROOT si está, si no ~/fn_registry.
# Se invoca con `bash` (no `source`): el script tiene un entry point que llama a
# tbd_branch_finish con los argumentos cuando se ejecuta directamente, y así
# funciona aunque la shell de la sesión sea zsh (evita el fallo de BASH_SOURCE).
bash "${FN_REGISTRY_ROOT:-$HOME/fn_registry}/bash/functions/infra/tbd_branch_finish.sh" "<descripción corta del merge>"
La función:
- Verifica working tree limpio.
- Autodetecta
master/main. git checkout <base>+git pull --rebase.git merge --no-ff <rama> -m "merge: <rama> — <título>".- Si conflicto → exit 2, deja al usuario resolver con
git add+git commit+ retry. git push.git branch -d <rama>.
6. Confirmar al usuario
La función ya imprime Rama '<rama>' integrada a <base> y publicada. Rama local eliminada. Repetirlo al usuario.
Convención de commits
feat:nueva funcionalidadfix:corrección de errorrefactor:cambio estructural sin cambio funcionaldocs:documentaciónchore:mantenimientotest:tests nuevos o modificadosmerge:commit de merge (lo generatbd_branch_finishcon--no-ff)
Regla de mensajes
- Título corto resume el bloque.
- Cuerpo en español: qué se cambió, por qué, qué impacto, qué no se tocó.
Checklist
- Cambios commiteados en rama
issue/*oquick/*. - Cambios distintos en commits diferentes.
- Cada commit con descripción larga en español.
- Tests pasando (o no aplican).
- Feature flags evaluados (o no aplican).
tbd_branch_finishejecutado con éxito.
Para tocar la lógica de cierre
Editar tbd_branch_finish_bash_infra en bash/functions/infra/tbd_branch_finish.sh. La parte de tests y commits se queda en este comando porque depende del stack.