--- name: fix-issue description: Implementar un issue de dev/issues/ end-to-end. Crea rama, ejecuta tareas, bumpa version si toca modulos/framework/apps (via /version), tests, cierra issue, integra a master. --- # /fix-issue Ejecuta el flujo completo de implementacion/cierre de un issue de `dev/issues/`. Adaptado al stack del registry: Go (`-tags fts5 CGO_ENABLED=1`), Python (`python/.venv/bin/python3`), Bash, TypeScript (`pnpm`), C++ (`cmake`+`mingw-w64` toolchain). ## Inputs ``` /fix-issue ``` - `NNNN`: numero del issue (ej. `0107`). - Si es sub-issue, sufijo letra: `0107a`, `0107b`, ... Si no se proporciona, preguntar. ## Flujo obligatorio ### 1. Resolver el issue - `dev/issues/-*.md` → si no existe, STOP. - Si ya en `dev/issues/completed/`, STOP. - Si es sub-issue, leer tambien el principal para contexto. ### 2. Leer y extraer - Objetivo, tareas, arquitectura, prerequisitos, riesgos. - Identificar archivos afectados — anotar si toca: - `modules//` o `cpp/framework/` → bumpa version (paso 8). - `functions/`, `python/functions/`, `bash/functions/`, `frontend/functions/` → indexer + `fn index` al cerrar. - Apps en `apps//` o `projects/*/apps//` → requiere rama TBD (regla `apps_tbd.md`) **+ bumpa version per-app (paso 8)**. Si el issue toca multiples apps, una llamada `/version` por app. - Registry meta (CLAUDE.md, rules, templates) → push directo a master OK. ### 3. Estrategia de rama **Registry-only changes** (functions/types/docs/rules): - Push directo a master OK. NO crear rama. **Apps changes** (apps/, projects/*/apps/): - Crear rama TBD: ```bash git checkout master git pull --rebase git checkout -b issue/- ``` La rama es del registry. Si la app es sub-repo, ademas crear rama dentro del sub-repo. **Modules/framework changes** (`modules/`, `cpp/framework/`): - Rama TBD obligatoria (afecta a todas las apps que linkean). ### 4. Plan con TaskCreate - Crear tarea por bloque logico del issue. - Incluir SIEMPRE: - Tarea de tests (unit + smoke). - Tarea de `fn index` si toco metadata. - Tarea de `/version` si toco `modules/`, `cpp/framework/`, `apps//` o `projects/*/apps//` (una llamada por target). - Tarea de cleanup/docs. ### 5. Implementar Reglas registry-first (CLAUDE.md): - ANTES de escribir codigo reutilizable → `mcp__registry__fn_search` para encontrar lo que existe. - Si falta funcion reutilizable → spawn `fn-constructor` (no escribir inline). - Si patron se repite >2x → propose nueva funcion. - NUNCA `sqlite3 registry.db "SELECT ..."` plano — usar MCP. Convenciones del stack: | Stack | Build/test | |---|---| | Go | `CGO_ENABLED=1 go build -tags fts5 -o fn ./cmd/fn/` y `CGO_ENABLED=1 go test -tags fts5 ./...` | | Python | `python/.venv/bin/python3 -m pytest ` | | Bash | `bash -n