---
id: "0102"
title: "Tab Work en registry_dashboard (issues + flows + telemetria)"
status: pendiente
type: feature
domain:
  - meta
scope: app-scoped
priority: media
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 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).
