CreaRack-SL

Handler MCP: wiki_propose_mirror_update — Propuesta Haiku diff-aware para docs-espejo

Handler MCP: wiki_propose_mirror_update

Handler MCP de Fase 3 del sistema Sync Cascade (s80, 22-05-2026). Recibe el diff unificado de un doc-fuente y el body actual de su doc-espejo, y usa Claude Haiku 4.5 para generar el contenido completo actualizado del espejo. No crea PR ni commit — eso lo hace scripts/sync_cascade.mjs con gh CLI.

Coste típico: $0.02–$0.08 por par fuente/espejo según tamaño del diff.

Ubicación

functions/api/mcp/handlers/wiki.ts → función wikiProposeMirrorUpdate()

Signature MCP

{
  "name": "wiki_propose_mirror_update",
  "inputSchema": {
    "type": "object",
    "required": ["source_slug", "source_diff", "mirror_slug", "mirror_body"],
    "properties": {
      "source_slug":  { "type": "string", "description": "Slug del doc-fuente que cambió." },
      "source_diff":  { "type": "string", "description": "Diff unificado (HEAD~1 vs HEAD)." },
      "mirror_slug":  { "type": "string", "description": "Slug del doc-espejo a actualizar." },
      "mirror_body":  { "type": "string", "description": "Contenido actual del mirror sin frontmatter." }
    }
  }
}

Lógica interna

Límites defensivos

ParámetroLímiteRazón
source_diff8 000 chars (trunca)Contener coste Haiku
mirror_body8 000 chars (trunca)Contener coste Haiku
source_diff > 16 000 charsshould_propose=false con reason="diff_too_large_for_haiku"Refactors masivos (>800 LOC) no aptos para síntesis

Prompt Haiku

System prompt instruye a Haiku a:

  • Decidir should_propose: true/false (false si el diff es trivial o no afecta al espejo).
  • Mantener el tono y voz propios del espejo (no copiar texto literal del fuente).
  • Preservar secciones que el espejo tiene y el fuente no.
  • Devolver proposed_body completo listo para reemplazar el actual (no un diff parcial).

Respuesta

{
  "should_propose": true,
  "reasoning": "El diff actualiza el proceso de acceso CF; el espejo refleja los mismos accesos.",
  "proposed_body": "<markdown completo del espejo actualizado>",
  "changes_summary": "- Actualizado proceso CF Access\n- Ajustada sección de credenciales",
  "source_slug": "onboarding-edu",
  "mirror_slug": "onboarding-dani",
  "haiku_input_tokens": 1842,
  "haiku_output_tokens": 673,
  "haiku_cost_usd": 0.0034
}

Flujo de consumo (script sync_cascade.mjs)

para cada par (source, mirror) en propagate.mirrors:
  1. git diff HEAD~1 HEAD -- <source>.md   → source_diff
  2. leer body actual de <mirror>.md       → mirror_body
  3. wiki_propose_mirror_update(...)
  4. si should_propose=true:
       branch: sync-cascade/<source>-to-<mirror>-<sha7>
       commit: sync-cascade(propose): <mirror> sync from <source>
       gh pr create --draft --label sync-cascade-proposal

Anti-loops

  • El commit de los PR drafts usa prefijo sync-cascade(propose):, filtrado por el workflow sync-cascade-detect.yml.
  • Los PRs son siempre draft — no se auto-mergean.
  • should_propose=false en caso de duda → un humano puede ignorar el PR o mergearlo manualmente.

Dependencias de entorno

Requiere ANTHROPIC_API_KEY en el entorno de Cloudflare Workers. Sin ella devuelve { error: "ANTHROPIC_API_KEY not configured" }.

Véase también

  • [[feature—supercontext—sync-cascade]]
  • [[entity—biblioteca—handler—wiki-propagate-mirror-changes]]
  • [[entity—biblioteca—endpoint—mirror-cascades]]
  • [[entity—biblioteca—migration—0037-sync-cascade-mirrors]]