Files
Egutierrez 051fbb9be5 feat(0112): register kanban_cpp app in cpp/CMakeLists.txt + close issue
Adds add_subdirectory block for apps/kanban_cpp (lives in apps/ per issue
0096). The app itself is a sub-repo (gitignored via apps/*/), with its own
git history and master branch initialized.

Six panels reuse registry: http_request_cpp_core, kpi_card_cpp_viz,
sparkline_cpp_viz, agent_runs_timeline_cpp_viz, dod_evidence_panel_cpp_viz.
Backend Go on :8403 (independent operations.db from kanban_web).
2026-05-18 18:46:50 +02:00

5.0 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
0112 App kanban_cpp: clon C++ ImGui de kanban_web con backend Go propio completed app
cpp-stack
kanban
agents
app alta
0110
0116
0008
0113
0117
0118
2026-05-18 2026-05-18
kanban
cpp
imgui
agents
backend-copy
0008

0112 — App kanban_cpp

Problema

kanban_web (React + Mantine) funciona bien para humanos. Falta un kanban dedicado a conducir agentes LLM: arrastrar card a Doing (agent) -> arranca workflow, sin abrir browser ni terminal.

Flow 0008 lo requiere como surface 1 user-facing.

Decision

Nueva app apps/kanban_cpp/ (C++ ImGui via fn::run_app). Backend Go copia identica de apps/kanban/backend/ con su propia operations.db. Frontend ImGui consume HTTP + SSE/WS del backend local.

NO sync con kanban_web — datos independientes a proposito. Auth/users duplicados (cada app sus propios usuarios).

Estructura

apps/kanban_cpp/
  CMakeLists.txt            # add_imgui_app + linkea http_request_cpp_core
  app.md                    # trio: description + icon.phosphor=columns-3 + icon.accent=#a855f7
  appicon.ico               # generado via generate_app_icon_py_infra
  main.cpp                  # fn::run_app + 6 panels
  data.{h,cpp}              # HTTP client wrapper (usa http_request_cpp_core)
  panel_board.{h,cpp}       # columnas + cards drag-and-drop
  panel_calendar.{h,cpp}    # vista calendar (port de CalendarView.tsx)
  panel_dashboard.{h,cpp}   # KPIs (port de Dashboard.tsx)
  panel_agent_runs.{h,cpp}  # lista runs (usa agent_runs_timeline_cpp_viz)
  panel_worktrees.{h,cpp}   # git worktree manager
  panel_dod.{h,cpp}         # DoD inspector (usa dod_evidence_panel_cpp_viz)
  backend/                  # COPIA de apps/kanban/backend
    main.go                 # port distinto: 8401 (web) -> 8403 (cpp)
    db.go, handlers.go, ... # idem
    migrations/             # mismas migrations
    operations.db           # SU PROPIA DB

Panels (6 + Board)

Mapping con apps/kanban/frontend/src/components/:

Mantine component Panel C++ Funcion registry
KanbanColumn + KanbanCard panel_board inline (logica especifica)
CalendarView.tsx panel_calendar inline
Dashboard.tsx panel_dashboard kpi_card_cpp_viz + sparkline_cpp_viz
nuevo panel_agent_runs agent_runs_timeline_cpp_viz (0118)
nuevo panel_worktrees inline (calls agent_runner_api)
nuevo panel_dod dod_evidence_panel_cpp_viz (0117)

Criterios de aceptacion

  • apps/kanban_cpp/ creado via ./fn run init_cpp_app kanban_cpp (scaffolder canonico).
  • backend/ copiado de apps/kanban/backend con port distinto (8403) y migrations propias.
  • app.md con trio completo: description 1 linea + icon.phosphor: columns-3 + icon.accent: "#a855f7".
  • appicon.ico generado via ./fn run generate_app_icon "columns-3" "#a855f7" apps/kanban_cpp/appicon.ico.
  • App registrada en cpp/CMakeLists.txt (bloque add_subdirectory).
  • Build Windows cross-compile OK: cmake --build cpp/build/windows --target kanban_cpp -j.
  • Deploy a /mnt/c/Users/lucas/Desktop/apps/kanban_cpp/ via ./fn run redeploy_cpp_app_windows kanban_cpp.
  • --self-test arranca + verifica GL loader + SQLite local + conexion al backend :8403.
  • Trio aparece en App Hub tras ./fn run refresh_app_hub.
  • Backend :8403 arranca via systemd unit (tag service).
  • uses_functions declarado en app.md cubre: http_request_cpp_core, kpi_card_cpp_viz, sparkline_cpp_viz, data_table_cpp_viz, dod_evidence_panel_cpp_viz (0117), agent_runs_timeline_cpp_viz (0118).
  • fn doctor uses-functions kanban_cpp limpio.
  • e2e_checks declarados en app.md: build, --self-test, backend health, smoke board panel.

Gotchas

  • 2 services + 2 sqlite locks: nunca compartir operations.db entre kanban y kanban_cpp. Ports + DB independientes.
  • Auth: backend copia trae users.go. Decision: usuarios independientes por app. Documentar en app.md.
  • Mantine es modal-heavy (Modal, Drawer). En ImGui usar ImGui::OpenPopup + BeginPopupModal. NO replicar look pixel-perfect — adaptar a fn_tokens.
  • BD drift cross-PC: operations.db por PC, no se sincroniza. Si el usuario quiere portabilidad de cards -> issue separado.

Out of scope

  • Sync de cards entre kanban_web y kanban_cpp (otro issue, decision deferred).
  • Multi-user concurrent edit en kanban_cpp (single-user por ahora).
  • Tab Chat (CardChatPanel.tsx) — postergar a v2.

Plan implementacion

  1. ./fn run init_cpp_app kanban_cpp (no flag --project: app suelta).
  2. cp -r apps/kanban/backend apps/kanban_cpp/backend + sed port 8401 -> 8403 + clear operations.db.
  3. Build cliente data.{h,cpp} con fn_http::request.
  4. Implement panel_board primero (MVP). Resto en orden.
  5. Trio + icon + refresh_app_hub.
  6. e2e_checks + smoke + deploy Windows.