b9716a7cd6
Snapshot de WIP acumulado de sesiones previas antes de merge wave 1 del flow 0008 (kanban_cpp + agent_runner_api + DoD schema). Incluye: - dev/flows/0008-kanban-cpp-and-agent-workflows.md - dev/issues/0112-0119*.md (7 sub-issues) - WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.0 KiB
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 | pendiente | app |
|
app | alta |
|
|
|
2026-05-18 | 2026-05-18 |
|
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 deapps/kanban/backendcon port distinto (8403) y migrations propias.app.mdcon trio completo: description 1 linea +icon.phosphor: columns-3+icon.accent: "#a855f7".appicon.icogenerado via./fn run generate_app_icon "columns-3" "#a855f7" apps/kanban_cpp/appicon.ico.- App registrada en
cpp/CMakeLists.txt(bloqueadd_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-testarranca + verifica GL loader + SQLite local + conexion al backend:8403.- Trio aparece en App Hub tras
./fn run refresh_app_hub. - Backend
:8403arranca via systemd unit (tagservice). uses_functionsdeclarado enapp.mdcubre: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_cpplimpio.e2e_checksdeclarados enapp.md: build, --self-test, backend health, smoke board panel.
Gotchas
- 2 services + 2 sqlite locks: nunca compartir
operations.dbentrekanbanykanban_cpp. Ports + DB independientes. - Auth: backend copia trae
users.go. Decision: usuarios independientes por app. Documentar enapp.md. - Mantine es modal-heavy (
Modal,Drawer). En ImGui usarImGui::OpenPopup+BeginPopupModal. NO replicar look pixel-perfect — adaptar a fn_tokens. - BD drift cross-PC:
operations.dbpor PC, no se sincroniza. Si el usuario quiere portabilidad de cards -> issue separado.
Out of scope
- Sync de cards entre
kanban_webykanban_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
./fn run init_cpp_app kanban_cpp(no flag --project: app suelta).cp -r apps/kanban/backend apps/kanban_cpp/backend+ sed port 8401 -> 8403 + clearoperations.db.- Build cliente data.{h,cpp} con
fn_http::request. - Implement
panel_boardprimero (MVP). Resto en orden. - Trio + icon + refresh_app_hub.
- e2e_checks + smoke + deploy Windows.