Volver a la wiki

Endpoint GET /api/biblioteca/mirror-cascades · KPIs Sync Cascade

Endpoint GET /api/biblioteca/mirror-cascades

App: biblioteca (Cloudflare Pages Functions)
Archivo: functions/api/biblioteca/mirror-cascades/index.ts
Lib: functions/_lib/mirror_cascades.ts — computeMirrorCascades()
Autenticación: Bearer token via /api/_middleware.ts
Introducido: s80 · 2026-05-22 · commit 453eb92


Descripción

Endpoint de estadísticas del workflow Sync Cascade (sync-cascade-detect.yml). Expone un report JSON con los KPIs de los últimos N días para el widget “Mirror cascades” del PulsePanel.

Análogo a /api/biblioteca/drift-checks — vive bajo mirror-cascades/index.ts para esquivar el catch-all [id].ts del router de biblioteca.


Request

GET /api/biblioteca/mirror-cascades?window_days=7&limit=5
Query paramTipoDefaultRangoDescripción
window_daysinteger7≥ 1Ventana temporal para conteos
limitinteger51–50Nº de items en recent_pending

Response MirrorCascadesReport

interface MirrorCascadesReport {
  generated_at: string;        // ISO timestamp
  window_days: number;
  cascades_in_window: number;  // eventos cascade logueados (operation='lint', actor='agent-sync-cascade')
  pending_mirrors_total: number; // pages activas con verification_pending=1 + mirror_source
  proposals_opened: number;    // PR drafts Fase 3 (aprox. via bib_wiki_log)
  last_cascade_at: string | null;
  recent_pending: PendingMirrorItem[]; // últimos N mirrors pendientes
}

interface PendingMirrorItem {
  slug: string;
  title: string;
  mirror_source: string;       // doc-fuente que disparó la cascada
  mirror_changed_at: string;   // timestamp de la última cascada recibida
}

Cache: Cache-Control: no-store — siempre datos frescos.


Queries D1 internas

computeMirrorCascades() ejecuta 4 queries:

QueryPropósito
SELECT COUNT(*) FROM bib_wiki_log WHERE operation='lint' AND actor='agent-sync-cascade' AND created_at >= ?cascades_in_window + last_cascade_at
SELECT COUNT(*) FROM bib_wiki_pages WHERE status='active' AND verification_pending=1 AND mirror_source IS NOT NULLpending_mirrors_total
SELECT COUNT(*) FROM bib_wiki_log WHERE actor='sync-cascade-bot' AND summary LIKE 'sync-cascade(propose):%' AND created_at >= ?proposals_opened (aproximación)
SELECT slug, title, mirror_source, mirror_changed_at FROM bib_wiki_pages WHERE ... ORDER BY mirror_changed_at DESC LIMIT ?recent_pending

Columnas D1 requeridas

Las columnas mirrors, mirror_changed_at, mirror_source son añadidas por migrations/0037_sync_cascade_mirrors.sql. Sin la migración aplicada, este endpoint devuelve pending_mirrors_total: 0 y recent_pending: [] (queries sin error pero sin datos).


Véase también

Subir