Files
fn_registry/dev/issues/cpp/0130c-kanban-cpp-v2-frontend.md
T
egutierrez a3f75d61ec chore: avance acumulado de sesiones previas (reorg dev/issues + ajustes)
Reorganizacion de dev/issues en subcarpetas (completed/, cpp/, gamedev/,
kanban/, trading/, imagegen/, matrix/) y cambios acumulados en cmd/fn/pyrunner,
.claude/commands y settings. Trabajo de otro LLM/sesion, commiteado a peticion
del usuario para desbloquear el working tree. Excluido logs/ardour_mcp_server.log (ruido).
2026-06-30 14:43:51 +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.