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 param | Tipo | Default | Rango | Descripción |
|---|---|---|---|---|
window_days | integer | 7 | ≥ 1 | Ventana temporal para conteos |
limit | integer | 5 | 1–50 | Nº 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:
| Query | Propó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 NULL | pending_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
- [[feature—supercontext—sync-cascade]]
- [[entity—biblioteca—mcp—wiki-propagate-mirror-changes]]
- [[entity—biblioteca—mcp—wiki-propose-mirror-update]]
- [[feature—supercontext—drift-check]]
- [[concept—supercontext—bibliotecario]]