Widget "Drift checks · 7d" en el Pulse de Biblioteca (Fase 5 KB vs Graph)
Widget “Drift checks · 7d” — PulsePanel
Sección operativa añadida al componente PulsePanel.tsx en PR #39. Cierra la Fase 5 del ADR decision--20260514--knowledge-base-vs-graph (iniciativa s61 KB vs Graph), completando la iniciativa al 100%.
Contexto de la iniciativa
La iniciativa s61 KB vs Graph comparó el rendimiento de la Knowledge Base (CF Vectorize) frente al grafo de conocimiento (D1 + embeddings) para detectar drift en páginas wiki. Las fases previas (PRs #36, #37, #38 + CreaRack-Pro #34) implementaron el cron de checks con modelo Haiku 4.5. Esta Fase 5 añade la observabilidad visual en el Pulse del workspace.
| Fase | PR | Descripción |
|---|---|---|
| 1–4 | #36, #37, #38 + Pro#34 | Cron, tabla D1, handler MCP, pipeline |
| 5 | #39 | Widget Pulse (este PR) |
Componente
Archivo: src/components/biblioteca/PulsePanel.tsx
La nueva sección se inserta justo antes de “Doc drift (Escriba)” y ocupa gridColumn: span 3.
Layout
┌─────────────────────────────────────────────────────────┐
│ Drift checks · 7d [badge: N/M checks] │
├──────────────┬──────────────┬──────────────┬────────────┤
│ Drift % │ Confianza │ Drafts │ Coste │
│ XX% │ media XX% │ creados N │ Haiku $N │
│ N de M pgs │ │ │ último: Xh │
├─────────────────────────────────────────────────────────┤
│ Top drifts (confianza) │
│ slug-page-1 ██% [draft] │
│ └─ Resumen del drift... │
│ slug-page-2 ██% │
└─────────────────────────────────────────────────────────┘
4 métricas en grid auto-fit (minmax(140px, 1fr)):
- Drift % — porcentaje de páginas con drift detectado, con conteo absoluto
- Confianza media —
avg_confidence × 100 - Drafts creados — páginas para las que el cron generó un draft de actualización
- Coste Haiku — total USD + timestamp del último check
Lista top-5 drifts (ordenados por confianza descendente):
- Slug en monospace (
JetBrains Mono) - Badge de confianza en
var(--warning) - Indicador
draftenvar(--accent)sidraft_slug_created !== null - Resumen opcional del drift
Estado React
const [driftChecks, setDriftChecks] = useState<DriftChecksReport | null>(null);
Cargado en useEffect mediante fetch('/biblioteca/drift-checks?window_days=7&limit=5'). Patrón best-effort: si el fetch falla, el panel sigue mostrando — en lugar de romperse. Refresco automático cada 60 segundos (junto con el resto del Pulse).
Estados visuales
| Condición | UI mostrada |
|---|---|
| Cargando | "Cargando drift checks…" |
total_checks === 0 | "Sin checks ejecutados en Xd (cron en dry_run o pausado)" |
| Drift detectado > 0 | Badge en var(--warning) (ámbar) |
| Sin drift | Badge en var(--success) (verde) |
Endpoint consumido
GET /api/biblioteca/drift-checks?window_days=7&limit=5 — ver [[entity—biblioteca—endpoint—drift-checks]].
Validación post-deploy
- Abrir
https://workspace.crearack.com/biblioteca - Verificar sección “Drift checks · 7d” visible entre el panel previo y “Doc drift (Escriba)”
- Durante calibración (
dry_run=true):drafts_created = 0,total_checkscreciendo ~25/semana - Tras flip a
dry_run=false(~28-05-2026):drafts_createdempieza a contar
Evolución esperada
- 14-28 mayo 2026: calibración con
dry_run=true, max_pages=5. El widget muestra acumulación de checks sin drafts. - ~28 mayo 2026: flip a
dry_run=false, max_pages=20. Backfill de los ~84 páginas stale en ~4-5 días. - Post-backfill: régimen permanente ~$2.4/mes. El widget permite monitorizar la salud del cron a golpe de vista.
Véase también
- [[entity—biblioteca—endpoint—drift-checks]]
- [[decision—20260514—knowledge-base-vs-graph]]
- [[entity—biblioteca—endpoint—drift]]
- [[concept—biblioteca—supercontext]]
- [[feature—biblioteca—pulse-panel]]