From 7eb7b3d0c89f962e179f1014540e9ab9aa5ff2cf Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Mon, 18 May 2026 18:17:08 +0200 Subject: [PATCH] chore: snapshot WIP previo + flow 0008 + 7 sub-issues (0112-0119) Snapshot de WIP acumulado de sesiones previas antes de merge wave 1 del flow 0008 (kanban_cpp + agent_runner_api + DoD schema). Incluye: - dev/flows/0008-kanban-cpp-and-agent-workflows.md - dev/issues/0112-0119*.md (7 sub-issues) - WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude/CLAUDE.md | 1 + .claude/commands/cpp-app.md | 274 ++ .claude/commands/fix-issue.md | 186 + .claude/commands/version.md | 170 + .claude/rules/cpp_apps.md | 24 + .claude/rules/function_tags.md | 23 + .../scripts/integrate-worktrees.sh | 121 + .../scripts/setup-worktrees.sh | 76 + .../scripts/verify-worktree.sh | 165 + CHANGELOG.md | 22 + apps/dag_engine/app.md | 23 + apps/shaders_lab/app.md | 11 + bash/functions/pipelines/refresh_app_hub.md | 83 + bash/functions/pipelines/refresh_app_hub.sh | 132 + cmd/fn/doctor.go | 55 + cpp/CMakeLists.txt | 44 +- cpp/framework/app_base.cpp | 293 ++ cpp/framework/app_base.h | 36 + cpp/framework/app_modules.h | 15 + cpp/functions/core/app_about.cpp | 12 +- cpp/functions/core/compute_column_stats.cpp | 1 + cpp/functions/core/compute_column_stats.h | 5 +- cpp/functions/core/compute_ring_layout.cpp | 210 ++ cpp/functions/core/compute_ring_layout.h | 73 + cpp/functions/core/compute_ring_layout.md | 90 + cpp/functions/core/data_table_types.h | 121 +- cpp/functions/core/parse_md_frontmatter.cpp | 251 ++ cpp/functions/core/parse_md_frontmatter.h | 36 + cpp/functions/core/parse_md_frontmatter.md | 82 + cpp/functions/viz/data_table_ai_panel.cpp | 188 + cpp/functions/viz/data_table_ai_panel.h | 61 + cpp/functions/viz/data_table_ai_panel.md | 80 + cpp/functions/viz/data_table_chips.cpp | 1157 +++++++ cpp/functions/viz/data_table_chips.h | 163 + cpp/functions/viz/data_table_chips.md | 116 + cpp/functions/viz/data_table_color_rules.cpp | 353 ++ cpp/functions/viz/data_table_color_rules.h | 91 + cpp/functions/viz/data_table_color_rules.md | 95 + cpp/functions/viz/data_table_drill.cpp | 204 ++ cpp/functions/viz/data_table_drill.h | 70 + cpp/functions/viz/data_table_drill.md | 85 + cpp/functions/viz/data_table_grid.cpp | 1014 ++++++ cpp/functions/viz/data_table_grid.h | 84 + cpp/functions/viz/data_table_grid.md | 103 + cpp/functions/viz/data_table_viz_panels.cpp | 429 +++ cpp/functions/viz/data_table_viz_panels.h | 79 + cpp/functions/viz/data_table_viz_panels.md | 97 + cpp/functions/viz/kpi_card.cpp | 54 +- cpp/functions/viz/kpi_card.h | 11 +- cpp/functions/viz/kpi_card.md | 8 +- cpp/functions/viz/line_plot.cpp | 84 +- cpp/functions/viz/line_plot.h | 17 + cpp/functions/viz/line_plot.md | 9 +- cpp/functions/viz/sparkline.cpp | 101 +- cpp/functions/viz/sparkline.h | 15 +- cpp/functions/viz/sparkline.md | 9 +- cpp/tests/CMakeLists.txt | 10 + cpp/tests/test_compute_ring_layout.cpp | 337 ++ cpp/tests/test_parse_md_frontmatter.cpp | 270 ++ dev/data_table_integration_audit.md | 563 +++ dev/feature_flags.json | 7 + .../0008-kanban-cpp-and-agent-workflows.md | 157 + dev/flows/INDEX.md | 1 + ...105-service-frontmatter-standardization.md | 113 + dev/issues/0106-services-monitor-app.md | 92 + dev/issues/0107e-version-pinning-codegen.md | 96 + dev/issues/0109-skill-tree-app-roadmap.md | 160 + .../0109g-skill-tree-embedded-terminal.md | 78 + dev/issues/0109h-skill-tree-generate-ideas.md | 124 + .../0109k-skill-tree-dashboard-panel.md | 68 + dev/issues/0109m-issues-api-service.md | 169 + dev/issues/0110-cpp-http-client-helper.md | 134 + dev/issues/0112-kanban-cpp-app.md | 112 + dev/issues/0113-agent-runner-api.md | 113 + dev/issues/0114-dod-evidence-schema.md | 106 + dev/issues/0115-worktree-launcher-fn.md | 118 + dev/issues/0116-skill-tree-launch-workflow.md | 95 + dev/issues/0117-dod-evidence-panel-cpp.md | 100 + dev/issues/0118-agent-runs-timeline-cpp.md | 100 + .../0119-kanban-cpp-issues-flows-sync.md | 102 + dev/issues/README.md | 11 + .../completed/0107-modules-standardization.md | 260 ++ .../completed/0107a-fn-doctor-modules.md | 82 + .../0107b-clean-data-table-consumers.md | 73 + .../completed/0107c-split-data-table.md | 74 + .../completed/0107d-module-tiers-policy.md | 91 + .../completed/0107f-modules-api-docs.md | 131 + .../0107g-migrate-inline-begintable.md | 209 ++ ...08-tables-playground-aggressive-testbed.md | 356 ++ .../0109a-skill-tree-shell-parsers.md | 60 + .../completed/0109b-skill-tree-rings.md | 69 + docs/MODULES_API.md | 704 ++++ docs/capabilities/INDEX.md | 1 + docs/capabilities/cpp-dashboard-viz.md | 52 + docs/diary/2026-05-17.md | 16 + functions/infra/audit_app_drift.go | 336 ++ functions/infra/audit_app_drift.md | 86 + functions/infra/audit_data_table_usage.go | 463 +++ functions/infra/audit_data_table_usage.md | 66 + functions/infra/audit_services_spec.go | 131 + functions/infra/audit_services_spec.md | 60 + modules/README.md | 58 + modules/data_table/CMakeLists.txt | 7 + modules/data_table/data_table.cpp | 3017 +---------------- modules/data_table/data_table.md | 85 +- modules/data_table/data_table_internal.h | 344 ++ modules/data_table/module.md | 22 +- modules/framework/module.md | 7 +- python/functions/infra/codegen_app_modules.py | 24 + python/functions/infra/export_hub_icons.md | 8 +- python/functions/infra/export_hub_icons.py | 50 +- python/functions/infra/generate_app_icon.md | 11 +- python/functions/infra/generate_app_icon.py | 130 +- .../pipelines/regenerate_app_icons.md | 16 +- .../pipelines/regenerate_app_icons.py | 25 +- registry/migrations/014_service_metadata.sql | 21 + registry/migrations/015_app_version.sql | 6 + registry/models.go | 54 +- registry/parser.go | 61 +- registry/store.go | 108 +- types/core/data_table_types.md | 25 +- 121 files changed, 14963 insertions(+), 3084 deletions(-) create mode 100644 .claude/commands/cpp-app.md create mode 100644 .claude/commands/fix-issue.md create mode 100644 .claude/commands/version.md create mode 100755 .claude/skills/parallel-fix-issues/scripts/integrate-worktrees.sh create mode 100755 .claude/skills/parallel-fix-issues/scripts/setup-worktrees.sh create mode 100755 .claude/skills/parallel-fix-issues/scripts/verify-worktree.sh create mode 100644 bash/functions/pipelines/refresh_app_hub.md create mode 100644 bash/functions/pipelines/refresh_app_hub.sh create mode 100644 cpp/functions/core/compute_ring_layout.cpp create mode 100644 cpp/functions/core/compute_ring_layout.h create mode 100644 cpp/functions/core/compute_ring_layout.md create mode 100644 cpp/functions/core/parse_md_frontmatter.cpp create mode 100644 cpp/functions/core/parse_md_frontmatter.h create mode 100644 cpp/functions/core/parse_md_frontmatter.md create mode 100644 cpp/functions/viz/data_table_ai_panel.cpp create mode 100644 cpp/functions/viz/data_table_ai_panel.h create mode 100644 cpp/functions/viz/data_table_ai_panel.md create mode 100644 cpp/functions/viz/data_table_chips.cpp create mode 100644 cpp/functions/viz/data_table_chips.h create mode 100644 cpp/functions/viz/data_table_chips.md create mode 100644 cpp/functions/viz/data_table_color_rules.cpp create mode 100644 cpp/functions/viz/data_table_color_rules.h create mode 100644 cpp/functions/viz/data_table_color_rules.md create mode 100644 cpp/functions/viz/data_table_drill.cpp create mode 100644 cpp/functions/viz/data_table_drill.h create mode 100644 cpp/functions/viz/data_table_drill.md create mode 100644 cpp/functions/viz/data_table_grid.cpp create mode 100644 cpp/functions/viz/data_table_grid.h create mode 100644 cpp/functions/viz/data_table_grid.md create mode 100644 cpp/functions/viz/data_table_viz_panels.cpp create mode 100644 cpp/functions/viz/data_table_viz_panels.h create mode 100644 cpp/functions/viz/data_table_viz_panels.md create mode 100644 cpp/tests/test_compute_ring_layout.cpp create mode 100644 cpp/tests/test_parse_md_frontmatter.cpp create mode 100644 dev/data_table_integration_audit.md create mode 100644 dev/flows/0008-kanban-cpp-and-agent-workflows.md create mode 100644 dev/issues/0105-service-frontmatter-standardization.md create mode 100644 dev/issues/0106-services-monitor-app.md create mode 100644 dev/issues/0107e-version-pinning-codegen.md create mode 100644 dev/issues/0109-skill-tree-app-roadmap.md create mode 100644 dev/issues/0109g-skill-tree-embedded-terminal.md create mode 100644 dev/issues/0109h-skill-tree-generate-ideas.md create mode 100644 dev/issues/0109k-skill-tree-dashboard-panel.md create mode 100644 dev/issues/0109m-issues-api-service.md create mode 100644 dev/issues/0110-cpp-http-client-helper.md create mode 100644 dev/issues/0112-kanban-cpp-app.md create mode 100644 dev/issues/0113-agent-runner-api.md create mode 100644 dev/issues/0114-dod-evidence-schema.md create mode 100644 dev/issues/0115-worktree-launcher-fn.md create mode 100644 dev/issues/0116-skill-tree-launch-workflow.md create mode 100644 dev/issues/0117-dod-evidence-panel-cpp.md create mode 100644 dev/issues/0118-agent-runs-timeline-cpp.md create mode 100644 dev/issues/0119-kanban-cpp-issues-flows-sync.md create mode 100644 dev/issues/completed/0107-modules-standardization.md create mode 100644 dev/issues/completed/0107a-fn-doctor-modules.md create mode 100644 dev/issues/completed/0107b-clean-data-table-consumers.md create mode 100644 dev/issues/completed/0107c-split-data-table.md create mode 100644 dev/issues/completed/0107d-module-tiers-policy.md create mode 100644 dev/issues/completed/0107f-modules-api-docs.md create mode 100644 dev/issues/completed/0107g-migrate-inline-begintable.md create mode 100644 dev/issues/completed/0108-tables-playground-aggressive-testbed.md create mode 100644 dev/issues/completed/0109a-skill-tree-shell-parsers.md create mode 100644 dev/issues/completed/0109b-skill-tree-rings.md create mode 100644 docs/MODULES_API.md create mode 100644 docs/capabilities/cpp-dashboard-viz.md create mode 100644 docs/diary/2026-05-17.md create mode 100644 functions/infra/audit_app_drift.go create mode 100644 functions/infra/audit_app_drift.md create mode 100644 functions/infra/audit_data_table_usage.go create mode 100644 functions/infra/audit_data_table_usage.md create mode 100644 functions/infra/audit_services_spec.go create mode 100644 functions/infra/audit_services_spec.md create mode 100644 modules/README.md create mode 100644 modules/data_table/data_table_internal.h create mode 100644 registry/migrations/014_service_metadata.sql create mode 100644 registry/migrations/015_app_version.sql diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index f11b3b03..d1540ff9 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -258,6 +258,7 @@ fn check params # Lista funciones sin params_schema fn doctor # Corre todos los checks fn doctor artefacts # git/venv/app.md/upstream de cada app y analysis fn doctor services # apps tag 'service' + systemctl + puerto +fn doctor services-spec # audita bloque `service:` del app.md (issue 0105) fn doctor sync # drift pc_locations BD vs disco fn doctor uses-functions # imports reales vs uses_functions del app.md fn doctor unused # funciones del registry sin consumidores diff --git a/.claude/commands/cpp-app.md b/.claude/commands/cpp-app.md new file mode 100644 index 00000000..4d440a03 --- /dev/null +++ b/.claude/commands/cpp-app.md @@ -0,0 +1,274 @@ +# /cpp-app — Crear o modificar app C++ del registry sin olvidar nada + +Recopila TODOS los datos necesarios (frontmatter, trio app_hub, panels, AppConfig, service block, e2e_checks, uses_functions) **antes** de tocar el disco. Tras confirmar, ejecuta scaffolder o edits, regenera iconos, refresca app_hub, compila y deploya a Windows. + +Sustituye al flujo manual "edito main.cpp + app.md + CMakeLists.txt a mano". Wrapper sobre `init_cpp_app_bash_pipelines` (create) o edits directos sobre `app.md` (modify) + `regenerate_app_icons` + `refresh_app_hub` + `redeploy_cpp_app_windows`. + +--- + +## Uso + +``` +/cpp-app # interactivo, modo create +/cpp-app # interactivo, modo create con name pre-rellenado +/cpp-app modify # editar app existente +``` + +--- + +## Modo CREATE — flujo turno a turno + +Si `$ARGUMENTS` no empieza por `modify`, es create. Si trae ``, lo usas como default; si no, pregunta name. + +### Paso 0 — verificar que no existe + +```bash +test -d "/home/lucas/fn_registry/apps/" \ + || ls /home/lucas/fn_registry/projects/*/apps/ 2>/dev/null +``` + +Si existe en cualquier ubicacion: **abortar** y sugerir `/cpp-app modify `. NO sobreescribir. + +### Paso 1 — Identidad (AskUserQuestion) + +1. **name** (texto libre — valida snake_case + contiene verbo segun `ids_naming.md`). Verbos canonicos: `show, render, view, plot, edit, manage, monitor, browse, explore, run, launch, scan, audit, debug, profile, ...`. Si no trae verbo, sugerir alternativas (`viewer` -> `_viewer`). +2. **project** (select: ninguno / lista de `projects/*/`). Si ninguno -> `apps//`. +3. **domain** (select: `tools` (default), `gfx`, `tui`, `infra`, `finance`, `datascience`, `cybersecurity`, `shell`, `pipelines`, `browser`). +4. **description** 1 linea (texto libre, max 80 chars). **OBLIGATORIO** — sin esto el hub muestra tarjeta vacia. + +### Paso 2 — Trio app_hub OBLIGATORIO + +Regla dura `cpp_apps.md`: description + icon.phosphor + icon.accent SIEMPRE juntos. + +5. **icon.phosphor** glyph name. Antes de preguntar, ofrece busqueda: + ```bash + ls /home/lucas/fn_registry/sources/phosphor-core/assets/fill/ | grep -i "" + ``` + Sugiere 3-5 candidatos basados en `description`. Default segun domain: `gfx`->`palette`, `tui`->`terminal`, `tools`->`wrench`, `infra`->`gear`, `finance`->`chart-line-up`, `datascience`->`graph`, `cybersecurity`->`shield`. +6. **icon.accent** hex `#rrggbb` (palette select): + - sky `#0ea5e9`, indigo `#4f46e5`, violet `#7c3aed`, pink `#ec4899`, rose `#f43f5e`, red `#dc2626`, orange `#ea580c`, amber `#d97706`, green `#16a34a`, teal `#0d9488`, cyan `#0891b2`, slate `#475569`. Default segun domain. + +### Paso 3 — Tags + +7. **tags** (multiSelect): `service`, `launcher`, `dashboard`, `viewer`, `editor`, `monitor`, `debug`, `prototype`. Si selecciona `service` -> activar bloque service (Paso 7). + +### Paso 4 — Panels iniciales + +8. **panels** (texto libre o select): + - Default: 1 panel `Main` (Ctrl+1). + - Opcion lista: hasta 4 paneles. Por cada uno: `{label, shortcut}`. Generara `PanelToggle k_panels[]` en `main.cpp`. + +### Paso 5 — AppConfig flags + +9. (multiSelect): + - `init_gl_loader` (true si la app llama `gl*` directo, ej. shaders, GPU renderer custom). Default false. + - `viewports` true (default) / false (single-window). + - `auto_dockspace` true (default) / false (solo si gestiona DockSpace propio tipo `shaders_lab`). + - `fps_overlay` activo de inicio? (controla solo el default; el menu Settings lo toggle). + +### Paso 6 — Funciones del registry a usar + +10. **uses_functions** lista IDs. Antes de preguntar, busca candidatas segun description: + ``` + mcp__registry__fn_search query="" entity="functions" + ``` + Y muestra capability groups relevantes (`docs/capabilities/INDEX.md`). El usuario puede aceptar lista, anadir IDs, o dejar vacio (se rellena tras codear). + + Cada ID que no este en el registry -> ofrecer spawn `fn-constructor` antes de continuar (regla `delegation.md`). + +### Paso 7 — Bloque `service:` (solo si tag=service) + +11. Si paso 3 marco `service`, recopilar (regla `function_tags.md` + issue 0105): + - `port` int o null + - `health_endpoint` ruta GET o null + - `health_timeout_s` (default 3) + - `runtime` (select: `systemd-user`, `systemd-system`, `docker-compose`, `stdio`, `manual`) + - `systemd_unit` (obligatorio si runtime empieza por `systemd-`) + - `systemd_scope` (`user|system|null`) + - `restart_policy` (select: `always` (Recommended — gotcha: `on-failure` NO reinicia SIGTERM limpio), `on-failure`, `none`) + - `pc_targets` (multiSelect de pc_locations actuales: `aurgi-pc`, `home-wsl`, ...) + - `is_local_only` (true/false default false) + +### Paso 8 — Persistencia + +12. (multiSelect): + - BD propia SQLite `.db` en `local_files/`? -> recordar usar `fn::local_path(".db")` (cpp_apps.md §7) + - operations.db (para entities/relations)? -> ejecutar `fn ops init` tras crear + - Archivos config en `local_files/`? + +### Paso 9 — e2e_checks (issue 0068) + +13. Default sugerido (modificable): + ```yaml + e2e_checks: + - id: build + cmd: "cmake --build cpp/build --target -j" + timeout_s: 300 + - id: self_test + cmd: "./cpp/build/apps// --self-test" + timeout_s: 30 + severity: warning # si todavia no implementa --self-test + ``` + Pregunta: ¿anadir mas checks (ops_audit, pytest, smoke)? + +### Paso 10 — Resumen y confirmacion + +Mostrar bloque YAML completo del `app.md` que se va a generar + flags del scaffolder + post-acciones. Pedir confirmacion antes de ejecutar. + +--- + +## Modo CREATE — ejecucion + +Una vez confirmado: + +```bash +cd /home/lucas/fn_registry + +# 1. Scaffolder +./fn run init_cpp_app \ + [--project

] \ + [--domain ] \ + --desc "" \ + [--tags ""] + +# 2. Editar app.md generado para anadir: +# - icon: {phosphor, accent} +# - service: {...} (si aplica) +# - uses_functions: [...] +# - e2e_checks: [...] +# (el scaffolder no rellena estos; editarlos con Edit tool) + +# 3. Editar main.cpp generado para reflejar: +# - panels[] custom (si != default) +# - cfg.init_gl_loader / cfg.auto_dockspace / cfg.viewports +# - includes de funciones registry usadas + +# 4. Editar CMakeLists.txt para anadir paths de funciones del registry: +# ${CMAKE_SOURCE_DIR}/functions//.cpp + +# 5. Si es service -> ofrecer crear systemd unit (skipear si runtime=stdio|manual) + +# 6. Si pidio operations.db +./fn ops init apps/ # o projects/

/apps/ + +# 7. Generar icono +./fn run generate_app_icon "" "" "

/appicon.ico" + +# 8. Indexar +./fn index + +# 9. Compilar Windows +./fn run redeploy_cpp_app_windows --build + +# 10. Refrescar app_hub +./fn run refresh_app_hub + +# 11. Auditoria +./fn doctor cpp-apps +[[ "" == *service* ]] && ./fn doctor services-spec +``` + +--- + +## Modo MODIFY — flujo + +`/cpp-app modify ` + +### Paso 0 — Localizar + +```bash +# Buscar apps// o projects/*/apps// +sqlite3 /home/lucas/fn_registry/registry.db \ + "SELECT id, dir_path FROM apps WHERE name='' AND lang='cpp';" +``` + +Si no existe: abortar, sugerir `/cpp-app` (sin args) para crear. + +### Paso 1 — Mostrar config actual + +```bash +mcp__registry__fn_show id="" +cat /app.md +``` + +### Paso 2 — Que cambiar (multiSelect) + +- `description` (1 linea) +- `icon.phosphor` o `icon.accent` +- `tags` (anadir/quitar; si toca `service` -> Paso 7 del create) +- `uses_functions` (anadir/quitar — recordar editar CMakeLists.txt) +- `panels` (anadir/quitar/renombrar) +- `service:` block (si tag=service) +- `e2e_checks` +- `domain` +- `rename` (cambia name, dir, IDs derivados, repo Gitea — operacion delicada, requiere doble confirmacion) + +### Paso 3 — Aplicar cambios + +Para cada cambio: usa `Edit` sobre los archivos correspondientes. NUNCA `Write` completo de `app.md` (preserva campos que no toques). + +### Paso 4 — Post-acciones (segun lo que toco) + +```bash +# Siempre +cd /home/lucas/fn_registry && ./fn index + +# Si toco icon.* -> regenerar appicon +./fn run generate_app_icon "" "" "/appicon.ico" + +# Si toco trio o panels o uses_functions o cambia code: +./fn run redeploy_cpp_app_windows --build + +# Si toco description o icon o tags: +./fn run refresh_app_hub + +# Si toco service: o tag service +./fn doctor services-spec + +# Siempre al final +./fn doctor cpp-apps +``` + +--- + +## Reglas duras + +- **NUNCA** crear `main.cpp` + `CMakeLists.txt` + `app.md` a mano. Siempre via `init_cpp_app_bash_pipelines` (regla `cpp_apps.md`). +- **NUNCA** poner el codigo en `cpp/apps//`. Solo `apps//` o `projects/

/apps//`. +- **NUNCA** dejar `app.md` sin el trio (description + icon.phosphor + icon.accent). Tarjeta del hub queda gris. +- **NUNCA** declarar funciones del registry en `uses_functions` sin listar su `.cpp` en `CMakeLists.txt` (drift detectado por `fn doctor uses-functions`). +- **NUNCA** usar `Restart=on-failure` en systemd unit de un service C++ — gotcha 2026-05-17 (`sqlite_api.service` cayo 20h). Default `Restart=always`. +- Despues de **cualquier** cambio en el trio: `regenerate_app_icons ` + `refresh_app_hub`. + +--- + +## Auto-verificacion final + +Tras crear o modificar, reportar al usuario: + +``` +=== app === +dir: +domain: +description: "" +icon: + +tags: [] +uses_functions: N funciones () +panels: N () +e2e_checks: N checks +service: health:> + +Acciones ejecutadas: + [✓] scaffolder / edits + [✓] generate_app_icon + [✓] fn index (registry.db actualizado) + [✓] redeploy_cpp_app_windows (Desktop/apps//.exe) + [✓] refresh_app_hub (tarjeta visible en hub) + [✓] fn doctor cpp-apps (limpio | N warnings) + +Siguiente paso sugerido: + - Abrir app_hub_launcher en Windows y verificar tarjeta + - Anadir tests visuales si la app tiene paneles propios (cpp/PATTERNS.md §11) +``` + +$ARGUMENTS diff --git a/.claude/commands/fix-issue.md b/.claude/commands/fix-issue.md new file mode 100644 index 00000000..6d296993 --- /dev/null +++ b/.claude/commands/fix-issue.md @@ -0,0 +1,186 @@ +--- +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