Files
fn_registry/dev/issues/0130c-kanban-cpp-v2-frontend.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

3.1 KiB

id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags, flow
id title status type domain scope priority depends blocks related created updated tags flow
0130c Frontend C++ ImGui kanban_cpp v2: board + flows + filtros + detalle pendiente app
cpp-stack
dev-ux
app-scoped alta
0130b
0130
2026-05-22 2026-05-22
cpp
imgui
kanban
frontend
0130

0130c — Frontend C++ ImGui kanban_cpp v2

Status: pendiente

Por que

UI nativa sobre el backend 0130b. Aprovecha el framework fn::run_app (menubar, layouts, settings, about, log) y los componentes del registry (data_table, kpi_card, http_request, sse_client).

Estructura

apps/kanban_cpp/
  app.md
  appicon.ico
  CMakeLists.txt
  main.cpp                # fn::run_app + cfg.panels
  data.h / data.cpp       # http client + state global (issues, flows, filters)
  panel_board.cpp         # 4 columnas + drag-drop
  panel_flows.cpp         # tabla via data_table_cpp_viz
  panel_filters.cpp       # Aside con multi-select
  panel_detail.cpp        # form editable del issue seleccionado
  panels.h

Trio obligatorio (app.md)

description: "Kanban C++ v2 para gestionar dev/issues y dev/flows del registry"
icon:
  phosphor: "kanban"
  accent: "#a855f7"

Paneles

  1. Board (TI_KANBAN " Board") — 4 columnas (pendiente / in-progress / bloqueado / completado). Cada card: id + title (trunc 60) + priority badge + first domain chip. Drag-drop con ImGui::BeginDragDropSource/Target -> PATCH status.
  2. Flows (TI_FLOW " Flows") — data_table_cpp_viz con columnas id/title/status/kind. Click fila → carga detail.
  3. Filters (TI_FUNNEL " Filters") — AppShell.Aside-equivalente (panel lateral fijo). Multi-select por domain, scope, priority, tags. Estado local; rebuild request query.
  4. Detail (TI_INFO " Detail") — modal/panel lateral con form: status (combo), priority (combo), scope (combo), tags (chips editables), depends/blocks (listas), body (read-only multiline).

HTTP client (data.cpp)

  • fetch_issues(filters) → GET con query string → parse JSON → vector.
  • fetch_flows() → similar.
  • patch_issue(id, partial) → PATCH JSON → recibe issue actualizado.
  • subscribe_sse() thread aparte → push events a queue mutex → consumir en main loop → re-fetch afectados.

Usa http_request_cpp_core + sse_client_cpp_core. JSON via nlohmann/json (ya en cpp/vendor o sacar al header-only).

DoD

  • cmake --build cpp/build/linux --target kanban_cpp -j verde.
  • ./cpp/build/linux/apps/kanban_cpp/kanban_cpp --self-test exit 0:
    • inicializa contexto ImGui sin display.
    • parsea respuesta JSON sintetica.
    • no toca red salvo si --backend http://... se pasa.
  • e2e_checks en app.md: build + self_test + backend_health (corre backend en background) + smoke (drag-drop reescribe MD).
  • Captura screenshot board con 4 columnas pobladas → guardar en dod_evidence/board_screenshot.png.

Anti-scope

  • Sin grafo de dependencias (epic 0130 lo describe como anti-scope v1).
  • Sin crear issues nuevos (solo editar existentes).
  • Sin edicion de body MD (solo frontmatter).
  • Sin syntax highlighting markdown.