--- version: 2.0.0 updated: 2026-03-11 tags: [issues, implementation, workflow, trunk-based] --- # Command: fix-issue Ejecuta de punta a punta el flujo de implementación/cierre de un issue siguiendo **estrictamente** la regla `fix_issue.md`. ## Para el usuario ### Cuándo usar este comando Usar cuando quieras implementar un issue completo desde inicio hasta fin con confirmación antes de integrar. El comando maneja todo el ciclo: crear rama, implementar, testear, cerrar issue, pedir confirmación, e integrar a master. ### Sintaxis ```bash /issues:fix-issue /issues:fix-issue - ``` ### Ejemplos **Ejemplo 1: Por número** ```bash /issues:fix-issue 0013 ``` Busca `dev/issues/0013-*.md`, implementa todas las tareas, cierra el issue, pide confirmación, e integra. **Ejemplo 2: Por slug completo** ```bash /issues:fix-issue 0013-hot-reload ``` Usa exactamente `dev/issues/0013-hot-reload.md`. ## Para Claude ### Precondiciones Verificar antes de ejecutar: - [ ] Directorio `dev/issues/` existe - [ ] Directorio `dev/issues/completed/` existe - [ ] Archivo `dev/issues/README.md` existe - [ ] Tests configurados (go test disponible) - [ ] Working tree limpio ### Inputs Se necesita el issue objetivo. Si no se proporciona, preguntar: - `issue`: número o nombre (ej: `0010` o `0010-access-control`) ### Flujo obligatorio #### 1. Resolver el issue objetivo **Si viene solo número** (`0010`): ```bash ls dev/issues/0010-*.md ``` **Si viene slug completo** (`0010-access-control`): ```bash ls dev/issues/0010-access-control.md ``` **Validaciones:** - Si no existe en `dev/issues/` → ✗ **STOP**: "Issue no encontrado" - Si ya está en `dev/issues/completed/` → ✗ **STOP**: "Issue ya completado" #### 2. Leer completo el issue y extraer información ```bash cat dev/issues/-.md ``` Extraer: - **Objetivo**: qué se quiere lograr - **Tareas/fases**: lista completa de pasos - **Arquitectura**: archivos a crear/modificar - **Patrón pure/impure**: límites entre core/, shell/, app/ - **Tests requeridos**: criterios de aceptación #### 3. Crear rama de trabajo (inline) {{include: git-verify-clean}} Verificar rama actual: ```bash git branch --show-current ``` **Si ya estamos en `issue/-`** que coincide: - ✓ Continuar directamente a paso 4 **Si estamos en master o cualquier otra rama:** {{include: git-update-master}} ```bash git checkout master git pull --rebase git checkout -b issue/- ``` **⚠️ IMPORTANTE:** Nunca trabajar directamente en `master`. #### 4. Planificar con TodoWrite Crear plan basado en las tareas del issue: ```markdown - [ ] Fase 1: - [ ] Tarea 1.1 - [ ] Tarea 1.2 - [ ] Fase 2: - [ ] Tarea 2.1 - [ ] Tarea 2.2 - [ ] Fase N: Tests y validación - [ ] Cerrar issue ``` **Principios:** - Respetar el orden de fases del issue - Incluir siempre fase de tests - Marcar progreso al completar cada bloque #### 5. Implementar el issue completo **Ejecutar tareas en orden:** Para cada tarea: 1. Implementar cambios requeridos 2. Seguir patrón **pure core / impure shell**: - `core/` → funciones puras, sin side effects - `shell/` → I/O, filesystem, network, APIs - `app/` → orquestación de core + shell 3. Compilar frecuentemente: ```bash go build -tags goolm ./... ``` 4. Marcar progreso en TodoWrite 5. Crear commits atómicos por bloque lógico (no al final, durante la implementación) **Commits durante implementación:** ```bash git add git commit -m ": " -m "" ``` Tipos: `feat:`, `fix:`, `refactor:`, `test:`, `docs:`, `chore:` #### 6. Tests obligatorios {{include: run-tests}} ```bash go test -tags goolm ./... ``` **Casos:** - Tests **pasan** → ✓ Continuar a paso 7 - Tests **fallan** → ✗ **STOP**: corregir antes de continuar ```bash go test -v -tags goolm ./... # Ver detalles # Corregir errores # Crear commit con fix # Re-ejecutar tests ``` - No hay tests aplicables → ℹ Indicar al usuario, continuar **⚠️ CRÍTICO:** No cerrar el issue sin tests pasando. #### 7. Feature flags (si aplica) Evaluar si es feature multi-issue o despliegue gradual: **Si aplica feature flag:** 1. Actualizar `dev/feature_flags.json`: ```json { "": { "enabled": false, // o true si es el último sub-issue "issue": "", "description": "", "updated": "2026-03-11" } } ``` 2. Incluir en commit correspondiente (no commit separado solo para flags) **Si NO aplica:** - Feature autocontenida que no necesita coordinación - ✓ Saltar este paso **⚠️ Recordatorio:** Feature flag ≠ WIP. Los flags protegen código terminado y testeado, no código a medias. #### 8. Cerrar el issue Mover issue a completed: ```bash mv dev/issues/-.md dev/issues/completed/ ``` Actualizar índice en `dev/issues/README.md`: Cambiar la línea del issue: - Link: de `[-.md](-.md)` a `[completed/-.md](completed/-.md)` - Estado: de `pendiente` o `en progreso` a `completado` Crear commit: ```bash git add dev/issues/completed/-.md dev/issues/README.md git commit -m "docs: cerrar issue -" -m "Issue completado y movido a completed/ Todas las tareas implementadas y tests pasando. Ready to merge to master." ``` #### 9. Mostrar resumen de cambios y confirmar {{include: ask-user-confirm}} **Mostrar al usuario un resumen completo:** ```bash git status --short git diff --stat master git log --oneline master..HEAD ``` **Mostrar tareas completadas del TodoWrite.** **Pausar y preguntar:** ``` ✓ Issue - completado Resumen de cambios: - archivos modificados/creados - commits realizados - Tests: [pasando / no aplica] - Issue movido a completed/ Commits: - - - ... ¿Está todo bien para integrar a master? - Si es correcto: se hará merge y push automáticamente - Si necesitas ajustes: puedes hacer cambios adicionales antes ``` **Esperar respuesta del usuario:** - Si responde **SI** / afirmativo → continuar a paso 10 - Si responde **NO** / necesita cambios → **STOP**: "Haz los ajustes necesarios y cuando estés listo ejecuta `/git:push`" #### 10. Ejecutar /git:push automáticamente Una vez confirmado por el usuario, ejecutar `/git:push` para: 1. Verificar que estamos en la rama correcta 2. Re-ejecutar tests (verificación final) 3. Checkout a master y actualizar 4. Merge --no-ff: ```bash git merge --no-ff issue/- -m "merge: issue/-" ``` 5. Push a remoto 6. Limpiar rama local El comando `/git:push` maneja todo el flujo de integración automáticamente. ### Verificación final Informar al usuario: ``` ✓ Issue - completado e integrado a master Rama: issue/- (mergeada y limpiada) Commits integrados: Tests: pasando Issue: movido a dev/issues/completed/ Master actualizado y sincronizado con remoto. ``` ## Convenciones - **Issue completo**: implementar todas las tareas, no parcial - **Commits atómicos**: durante implementación, no al final - **Tests obligatorios**: no cerrar sin tests pasando - **Pure core / impure shell**: respetar arquitectura estrictamente - **Feature flags solo si aplica**: no usar para ocultar trabajo incompleto - **Confirmación obligatoria**: siempre pedir antes de integrar ## Troubleshooting ### Error: "Issue not found" **Causa:** El archivo del issue no existe en `dev/issues/` **Solución:** ```bash ls dev/issues/ # Verificar número o slug correcto # O crear el issue primero con /issues:create-issue ``` ### Error: "Issue already completed" **Causa:** El issue ya está en `dev/issues/completed/` **Solución:** El issue ya fue implementado. Si necesitas modificarlo: 1. Crear nuevo issue que referencia el anterior 2. O mover de vuelta a `dev/issues/` si realmente no estaba completo ### Error: "Tests failing during implementation" **Causa:** Los cambios rompieron tests existentes **Solución:** 1. Ver detalles: ```bash go test -v -tags goolm ./... ``` 2. Identificar qué test falló y por qué 3. Corregir el código o actualizar el test si es legítimo 4. Crear commit con el fix 5. Continuar implementación ### Error: "Cannot create branch, working tree not clean" **Causa:** Hay cambios sin commitear **Solución:** ```bash git status # Opción 1: Commitear cambios primero git add . && git commit -m "mensaje" # Opción 2: Hacer stash git stash # Luego ejecutar /issues:fix-issue nuevamente ``` ### Error: "go build failed" **Causa:** Errores de compilación en el código **Solución:** 1. Leer el error de compilación cuidadosamente 2. Corregir el error en el código 3. Intentar compilar de nuevo 4. No continuar hasta que compile correctamente ### Advertencia: "Feature flag needed but not found" **Causa:** El issue es parte de feature multi-issue pero no tiene flag **Solución:** 1. Revisar si realmente necesita feature flag 2. Si sí: agregar a `dev/feature_flags.json` 3. Si no: continuar sin flag ## Reglas críticas - **Seguir fix_issue.md estrictamente**: no saltear pasos - **NO saltear tareas del issue**: implementar todas - **NO hacer commits WIP**: cada commit debe ser atómico y completo - **SIEMPRE usar -tags goolm**: en build y test - **SIEMPRE ejecutar tests**: antes de cerrar issue - **Confirmación obligatoria**: esperar aprobación del usuario antes de integrar - **Flujo automático post-confirmación**: ejecutar `/git:push` para integrar - **Respetar arquitectura**: core/ puro, shell/ impuro, app/ orquestación - **NO inventar soluciones**: seguir las tareas del issue al pie de la letra