Files
fn_registry/dev/issues/0130-kanban-cpp-v2.md
Egutierrez c468b24d2b feat(0130): kanban_cpp v2 — backend Go + 5 registry parser fns + epic/sub-issues
Registry (issue 0130a):
- 5 fns infra: parse_issue_md, write_issue_md, scan_issues_dir,
  scan_flows_dir, watch_dir_fsnotify
- 3 tipos: Issue, Flow, FsEvent
- Tests round-trip + scan reales + watcher fsnotify (all PASS)
- Capability group 'kanban' nuevo (docs/capabilities/kanban.md)

Apps:
- apps/kanban_cpp/ (sub-repo) — frontend ImGui: board drag-drop,
  flows, filters, detail con CSV editors
- apps/kanban_cpp/backend/ — Go service port 8487: REST + SSE +
  fsnotify watcher, parser bidireccional MD<->SQLite cache

Issues:
- dev/issues/0130-kanban-cpp-v2.md (epic)
- 0130a parser, 0130b backend, 0130c frontend

CMakeLists.txt: add_subdirectory apps/kanban_cpp (registrado por
init_cpp_app scaffolder).

End-to-end verde: backend devuelve 189 issues + 9 flows; PATCH a
/api/issues/{id} reescribe .md (solo frontmatter, body intacto);
frontend --self-test exit 0; tests Go infra 5/5 PASS.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 22:20:15 +02:00

4.3 KiB

id, title, status, type, domain, scope, priority, depends, blocks, related, tags, created, updated
id title status type domain scope priority depends blocks related tags created updated
0130 Kanban C++ v2 — gestor de dev/issues y dev/flows con backend Go + frontend ImGui pendiente epic
cpp-stack
apps-infra
dev-ux
multi-app alta
0112
0119
kanban
cpp
imgui
dev_ux
issues
flows
2026-05-22 2026-05-22

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).