CreaRack-SL

Pulse tiempo real + Grafo vivo

Funcionalidadactiveverificado 2026-04-23#workspace#pulse#biblioteca#observability

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 DIM con 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.sh portado 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