diff --git a/dev/issues/0130-kanban-cpp-v2.md b/dev/issues/0130-kanban-cpp-v2.md new file mode 100644 index 00000000..bc394eaf --- /dev/null +++ b/dev/issues/0130-kanban-cpp-v2.md @@ -0,0 +1,115 @@ +--- +id: "0130" +title: "Kanban C++ v2 — gestor de dev/issues y dev/flows con backend Go + frontend ImGui" +status: pendiente +type: epic +domain: + - cpp-stack + - apps-infra + - dev-ux +scope: multi-app +priority: alta +depends: [] +blocks: [] +related: + - "0112" + - "0119" +created: 2026-05-22 +updated: 2026-05-22 +tags: [kanban, cpp, imgui, dev_ux, issues, flows] +--- + +# 0130 — Kanban C++ v2 + +**Status:** pendiente + +## Por que + +La v1 (`apps/kanban_cpp` borrada el 2026-05-22) mezclaba paneles ajenos al dominio kanban (agent runs, DoD, worktrees, calendar) y un backend que no era reutilizable. Para gestionar los 98 issues activos + 12 flows del proyecto necesitamos una vista board nativa, sin web, con edicion bidireccional de los archivos markdown. + +## Que entrega + +App kanban_cpp v2 con dos piezas: + +1. **Backend Go** (`apps/kanban_cpp/backend/`) — service HTTP en puerto 8487. + - Parser bidireccional MD <-> SQLite (cache). + - Watcher fsnotify sobre `dev/issues/` (+ `completed/`) y `dev/flows/`. + - Endpoints REST: `/api/issues`, `/api/issues/{id}` (GET/PATCH), `/api/flows`, `/api/flows/{id}`, `/api/meta`, `/api/sse`. + - PATCH a issue reescribe el frontmatter en disco preservando body + orden de campos. + +2. **Frontend C++ ImGui** (`apps/kanban_cpp/`) sobre el framework `fn::run_app`. + - Panel **Board**: columnas por status (pendiente / in-progress / bloqueado / completado). Drag-drop = PATCH status. + - Panel **Flows**: lista de flows con detalle. + - Panel **Filtros** (Aside): multi-select domain, scope, priority, tags. + - Panel **Detalle**: edicion de campos frontmatter de un issue (status, priority, scope, tags, depends, blocks). + - SSE para refrescar tras cambios externos en disco. + +## Sub-issues + +- **0130a** — parser MD + scan dirs (funciones registry). +- **0130b** — backend Go: schema + handlers + watcher + SSE. +- **0130c** — frontend C++: paneles + http client. + +Cada sub-issue mergeable independiente en su rama corta TBD. + +## Reusa del registry + +Backend Go: +- `sqlite_open_go_infra`, `sqlite_apply_migrations_go_infra` +- `http_router_go_infra`, `http_serve_go_infra`, `http_middleware_chain_go_infra` +- `http_cors_middleware_go_infra`, `http_logger_middleware_go_infra` +- `http_json_response_go_infra`, `http_error_response_go_infra`, `http_parse_body_go_infra` +- `random_hex_id_go_core` + +Frontend C++: +- `http_request_cpp_core` +- `sse_client_cpp_core` +- `data_table_cpp_viz` (lista flows) +- `kpi_card_cpp_viz` (contadores por status) + +## Crea (delegadas a fn-constructor en 0130a) + +- `parse_issue_md_go_infra` — lee .md → struct (frontmatter YAML + body). +- `write_issue_md_go_infra` — escribe struct → .md preservando body + orden de campos. +- `scan_issues_dir_go_infra` — walk `dev/issues/` + `dev/issues/completed/`. +- `scan_flows_dir_go_infra` — walk `dev/flows/`. +- `watch_dir_fsnotify_go_infra` (si no existe) — events channel. + +## DoD + +- `fn doctor` verde para ambas apps (artefacts + e2e). +- `e2e_checks` en ambos `app.md` (build + health + self-test). +- Drag-drop en frontend reescribe el `.md` correspondiente y `git diff` lo muestra (solo frontmatter, body intacto). +- Trio obligatorio (`description` + `icon.phosphor` + `icon.accent`) en ambos `app.md`. +- Sub-repos Gitea creados (`dataforge/kanban_cpp` reactivado o nuevo, mismo nombre). + +dod_evidence_schema: + - id: backend_health + kind: cmd + expected: "curl -fsS http://localhost:8487/api/health == 200" + required: true + - id: api_issues_count + kind: cmd + expected: "curl -fsS http://localhost:8487/api/issues | jq 'length' >= 90" + required: true + - id: patch_writes_md + kind: cmd + expected: "PATCH /api/issues/0130 status=in-progress reescribe dev/issues/0130-*.md (git diff muestra solo status)" + required: true + - id: frontend_self_test + kind: cmd + expected: "./cpp/build/linux/apps/kanban_cpp/kanban_cpp --self-test exit 0" + required: true + - id: board_screenshot + kind: screenshot + expected: "kanban_cpp Board panel con 4 columnas pobladas con issues reales" + required: true + +## Anti-scope + +NO incluye en esta version: +- Grafo de dependencias (depends/blocks/related visual). +- Edicion de body MD desde la app (solo frontmatter). +- Multi-PC sync (backend es local). +- Crear issues nuevos desde la UI (solo editar existentes). +- DoD evidence panel, agent runs, calendar, worktrees (la v1 los mezclaba — fuera). diff --git a/dev/issues/0128-agents-and-robots-http-api-sse.md b/dev/issues/completed/0128-agents-and-robots-http-api-sse.md similarity index 100% rename from dev/issues/0128-agents-and-robots-http-api-sse.md rename to dev/issues/completed/0128-agents-and-robots-http-api-sse.md diff --git a/dev/issues/0129-agents-dashboard-cpp-imgui.md b/dev/issues/completed/0129-agents-dashboard-cpp-imgui.md similarity index 100% rename from dev/issues/0129-agents-dashboard-cpp-imgui.md rename to dev/issues/completed/0129-agents-dashboard-cpp-imgui.md