Handler MCP: wiki_propagate_mirror_changes — Marca espejos como verification_pending
Handler MCP: wiki_propagate_mirror_changes
Handler MCP introducido en Sync Cascade s80 (22-05-2026). Detecta qué docs-espejo deben revisarse cuando uno o varios docs-fuente cambian, y los marca con verification_pending=1 en D1. Forma el núcleo de las Fases 1 y 2 del sistema Sync Cascade.
Ubicación
functions/api/mcp/handlers/wiki.ts → función wikiPropagateMirrorChanges()
Registrado en functions/api/mcp/index.ts bajo LOGGED_TOOLS con action: 'lint'.
Signature MCP
{
"name": "wiki_propagate_mirror_changes",
"inputSchema": {
"type": "object",
"required": ["source_slugs"],
"properties": {
"source_slugs": {
"type": "array",
"items": { "type": "string" },
"description": "Slugs de docs-fuente cuyos cambios deben propagarse a sus espejos."
},
"dry_run": { "type": "boolean", "description": "Solo reporta sin marcar. Default false." },
"actor": { "type": "string", "description": "Default: agent-sync-cascade." }
}
}
}
Lógica interna
- Fetch candidates: selecciona todas las
bib_wiki_pagesconstatus='active'ymirrors IS NOT NULL. - Filtra en JS: para cada page candidata, parsea
mirrors(JSON array) y comprueba si alguno de lossource_slugsestá incluido. Evita elLIKE '%slug%'que tendría riesgo de match parcial. - Marca targets: para cada espejo encontrado, ejecuta:
Si un mirror recibe múltiples cascadas en el mismo trigger, el último source gana (semántica direccional documentada).UPDATE bib_wiki_pages SET verification_pending = 1, mirror_changed_at = datetime('now'), mirror_source = <source_slug> WHERE slug = <mirror_slug> - Log: inserta en
bib_wiki_logconoperation='lint',actor='agent-sync-cascade'y summaryMirror cascade from [...] → N mirror(s) marked pending.
Respuesta
{
"ok": true,
"propagated": 3,
"mirrors": [
{ "source_slug": "onboarding-edu", "mirror_slug": "onboarding-dani", "mirror_title": "..." },
...
],
"sources_checked": 1,
"pages_with_mirrors": 7,
"dry_run": false
}
Idempotencia
Un mirror que ya está verification_pending=1 se sobrescribe con el último mirror_source. No hay riesgo de duplicar entradas en el log — cada llamada inserta un nuevo registro de evento.
Caller principal
El workflow .github/workflows/sync-cascade-detect.yml lo llama vía scripts/sync_cascade.mjs con los slugs modificados en el push a main. También puede llamarse manualmente desde el cliente MCP del Bibliotecario.
Véase también
- [[feature—supercontext—sync-cascade]]
- [[entity—biblioteca—handler—wiki-propose-mirror-update]]
- [[entity—biblioteca—endpoint—mirror-cascades]]
- [[entity—biblioteca—migration—0037-sync-cascade-mirrors]]