# 0102 — Tab Work en registry_dashboard (issues + flows + telemetria) **Status:** pendiente **Created:** 2026-05-16 **Type:** feature **Priority:** media **Domain:** meta **Scope:** app-scoped **Depends:** 0100 (frontmatter migration), 0101 (dev_console --json) **Blocks:** — **Related:** 0103 (slash commands) ## Problema Hoy para ver "estado global del trabajo" hay que: 1. `ls dev/issues/*.md` + leer cabeceras. 2. `cat dev/flows/INDEX.md` + abrir flow por flow. 3. `sqlite3 call_monitor.db` para metricas. 4. Cruzar a mano que issues bloquean que flow. Cero visibilidad cross-cutting. Y nada me dice "abre el flow 0001 ya, todos sus checks user-facing estan listos" o "issue 0099 esta verde pero su dependencia 0096 esta marcada como DONE incorrectamente". ## Objetivo Tab nueva `Work` en `projects/fn_monitoring/apps/registry_dashboard` (C++ ImGui). Tres paneles: ### Panel 1 — Kanban issues Columnas: `pendiente | in-progress | bloqueado | completado-hoy`. Filtros (combo): domain, type, priority. Card por issue muestra: id, title, prio, deps no resueltas (en rojo si las hay). Drag entre columnas -> llama `dev_console issue tag NNNN --status X` por debajo. ### Panel 2 — Flows table Tabla con columnas: id, slug, pattern, status, Acceptance %, DoD %, **DoD user-facing %**, ultima run en `data_factory.runs`. Click en fila -> abre archivo .md (o panel detalle al lado). Boton `User-test` por fila -> lanza `dev_console flow user-test NNNN` (abre URL/app/sala Matrix declarada). ### Panel 3 — Telemetria (resumen call_monitor) KPIs ultimas 24h: `calls_24h`, `violations_24h`, `pending_proposals`, `Reg %`. Sparkline 7d por KPI. Misma fuente que el hook UserPromptSubmit. ## Reglas - ImGui + `data_table_cpp_viz` para tablas (registry-first). - Datos vienen de `dev_console work dashboard --json` (call cada 5s en debug, cada 30s en prod). - Si `dev_console` no esta instalado: panel muestra placeholder + comando para instalar (sin crash). - Tab carga en <300ms (issue 0101 garantiza el binario). ## Acceptance - [ ] Tab Work aparece en `registry_dashboard` con los 3 paneles. - [ ] Filtros funcionan (domain, type, priority, pattern). - [ ] Drag de issue actualiza disco. - [ ] User-test boton abre superficie usuario. - [ ] Refresh manual + auto cada 30s. ## Definition of Done ### Generico - [ ] **Repetibilidad**: tab abre 10x sin leak handles ni memoria. - [ ] **Observabilidad**: cada accion (drag, click User-test) loguea via `fn_log`. - [ ] **Error-path**: `dev_console` falla -> tab muestra error formateado, no crash. - [ ] **Idempotencia**: refresh 100x = misma tabla. - [ ] **Secrets**: N/A. - [ ] **Docs**: `registry_dashboard.app.md` lista la tab + casos de uso. - [ ] **Registry-first**: reusa `data_table_cpp_viz`, `selectable_text`, `fn_log`. - [ ] **INDEX + status**: issue cerrado. ### User-facing - [ ] **User-facing**: usuario abre `registry_dashboard.exe` -> tab Work -> ve issues kanban + flows table + KPIs todo en una pantalla. - [ ] **User-facing repeat**: mismo dashboard manana muestra estado actualizado sin reset (deps resueltas se reflejan). - [ ] **User-facing onboarding**: parrafo en `app.md`: "Para el estado del trabajo: lanzar `registry_dashboard.exe` -> tab Work. Boton User-test abre la superficie usuario del flow." - [ ] **User-facing latencia**: refresh <300ms; cambio en disco visible en <30s (auto-refresh).