Pulse tiempo real + Grafo vivo
User value
Cada sesión de trabajo arranca con foto completa del estado del proyecto: qué pasó en las últimas 24h, qué tareas urgentes abiertas, cuántos nodos del grafo desactualizados y si el último CI pasó o falló. Sin esto, Edu o cualquier agente entraría a ciegas y perdería minutos reconstruyendo contexto. Pulse convierte el workspace en panel de control vivo: no hay que preguntar “¿cómo va?”, la respuesta está precalculada y disponible en <1s.
Cómo usarla
Endpoint principal: GET /api/hot-cache (con ?format=md → Markdown listo para prompt; sin parámetro → JSON). Respuesta con Cache-Control: private, max-age=60, navegador y agente reusan durante 60s.
Widget CI Pipeline del dashboard de salud: GET /api/health. Devuelve 4 filas (Backup D1, Biblioteca, Grafo, CI Pipeline) con colores semáforo. Bloque CI consulta https://api.github.com/repos/CreaRackSL/CreaRack-Pro/actions/runs?branch=main&per_page=5: últimas 5 runs, distingue jobs en progreso, rojo si última falló. Es la única ventana al estado del repo CreaRack-Pro desde el workspace.
Para leer estado del Supercontexto sin abrir archivos: sección ## Supercontexto del hot-cache en Markdown — fase actual, avance, bloqueos, próximo paso extraídos en tiempo real de public/supercontext/STATE.md.
Implementación
Hot-cache (60s, functions/_lib/hot-cache.ts): buildHotCache lanza 8 promesas en paralelo (Promise.all): actividad 24h, alertas activas, tareas urgentes, in-flight, salud grafo (GraphHealth con nodos/edges/comunidades/cohesión/stale), commits recientes via GitHub API, skips 7d, estado Supercontexto. Todo en una pasada sobre D1 y GitHub, sin waterfalls. graph_health.stale_count extraído del último entity_type='system' en activity_log con título Biblioteca:% — lo vincula directo a runs del cron.
Widget CI Pipeline (functions/api/health.ts): checkCI apunta a CreaRackSL/CreaRack-Pro (no workspace). Clasifica runs success/failure/in_progress, devuelve Cache-Control: private, max-age=600 (10 min) para no agotar quota GitHub API, degrada a DIM sin GH_PAT o timeout 5s.
Cron bib-reindex Staging (scripts/cron-bib-reindex.sh): corre en Hetzner Staging via /etc/cron.d/bib-reindex. git pull --rebase origin main, itera 7 apps (core, racks, blueprints, terminal, network, monitoring, signage) con python3 scripts/bib_ast.py --push --apps <app>. Si todas OK, ejecuta bib_compute_communities via curl a MCP → actualiza cohesión y comunidades. Log rota al pasar 5 MB, mantiene últimas 500 líneas. Este ciclo alimenta last_indexed y stale_count del widget.
Decisiones
- max-age=60 hot-cache, max-age=600 health: Pulse necesita frescura para agentes (sesiones cada pocos min), widget salud tolera lectura más vieja (uso humano infrecuente). Dos valores distintos evitan sobrecargar D1 y GitHub API.
- CI apunta a CreaRack-Pro, no workspace: código de producción vive en CreaRack-Pro; workspace es interfaz. Widget refleja lo operacionalmente importante.
- Degradación silenciosa sin GH_PAT: todos los bloques GitHub devuelven filas
DIMcon mensaje explicativo en lugar de excepciones. Dashboard no se rompe nunca. - Stale count desde activity_log, no JOIN: evita LEFT JOIN costoso en cada refresco. Cron escribe resultado ya calculado, worker solo lee.
Commits relacionados
af73a3e— hot-cache enriquecido con sección Supercontexto +bib_skips_7d.43df363— widget CI Pipeline apuntando a CreaRack-Pro.e5ff728—cron-bib-reindex.shportado a bash para Hetzner Staging (cada 10 min).
Véase también
- [[concept—biblioteca—supercontexto]]
- [[feature—biblioteca—escriba-drift]]
- [[feature—workspace—refresh-ui-2026]] — Refresh UI 2026 donde vive el dashboard Pulse