{
“related”: [“feature—supercontext—fase-4-query-con-cierre”, “entity—mcp—tool—wiki-archive-answer”, “ia-tech—metodo—tanda-repos-2026-08”],
“sources”: [
{“type”: “code”, “ref”: “functions/api/mcp/handlers/wiki.ts”},
{“type”: “code”, “ref”: “.github/workflows/wiki-curator.yml”},
{“type”: “code”, “ref”: “functions/api/mcp/tools.ts”},
{“type”: “code”, “ref”: “functions/_lib/judge-prompts.mjs”, “last_seen”: “2026-08-17”},
{“type”: “commit”, “ref”: “1587f4789ae001c09023407830f21aedfb453094”},
{“type”: “commit”, “ref”: “aea626193fb987d5fcfc4bbb5940b78c0eab9f47”}
],
“content”: ”# MCP Tool · wiki_curator_review\n\n## Descripción\n\nRevisa concept_pages en status:draft más antiguas que max_age_days días usando Claude Haiku como juez de calidad, y decide promote / delete / keep-draft para cada una. Introducido en Supercontexto Fase 4 (PR #5, 2026-04-22).\n\nEs el componente de higiene de la wiki: evita que drafts generados automáticamente por wiki_archive_answer se acumulen indefinidamente.\n\n## Firma\n\ntypescript\nasync function wikiCuratorReview(\n db: D1Database,\n args: Record<string, unknown>,\n env: Env,\n): Promise<string>\n\n\nRegistrado en LOGGED_TOOLS como { action: 'curate', entity_type: 'wiki_page' }.\n\n## Parámetros\n\n| Parámetro | Tipo | Default | Descripción |\n|-----------|------|---------|-------------|\n| max_age_days | number | 2 | Solo revisar drafts con created_at anterior a N días |\n| limit | number | 20 | Máximo de drafts a revisar por invocación |\n| dry_run | boolean | true | false aplica las acciones; true solo reporta |\n\n## Respuesta JSON\n\njson\n{\n \"reviewed\": 5,\n \"promoted\": 2,\n \"deleted\": 1,\n \"kept_draft\": 2,\n \"total_tokens\": 1750,\n \"dry_run\": true,\n \"reports\": [\n {\n \"slug\": \"concept--saas--multi-tenancy\",\n \"title\": \"¿Cómo funciona el multi-tenancy?\",\n \"age_days\": 3,\n \"verdict\": \"promote\",\n \"reason\": \"Síntesis técnica no trivial con 3 fuentes concretas\",\n \"tokens_used\": 350,\n \"applied\": false\n }\n ]\n}\n\n\n## Veredictos y acciones\n\n| Veredicto | dry_run=true | dry_run=false |\n|-----------|----------------|-----------------|\n| promote | Solo reporta | UPDATE status='active', last_verified=now() en D1 |\n| delete | Solo reporta | DELETE FROM bib_wiki_pages WHERE slug=? (el .md en repo permanece como audit trail) |\n| keep-draft | Solo reporta | Sin cambios |\n\nPolítica del Curator: en caso de duda, elige keep-draft. No borra en duda.\n\n## Prompt del Curator (Haiku)\n\nEl sistema evalúa cada draft con el siguiente criterio resumido:\n- promote: útil, bien escrita, tema no trivial, merece status:active\n- delete: basura, trivial, duplicado, respuesta efímera o sin valor wiki\n- keep-draft: útil pero necesita edición humana antes de activar\n\nPara cada draft, Haiku recibe: slug, title, type, owner, age_days, tags y hasta 3000 chars del contenido real del .md (via GitHub API).\n\n## Prompt versionado + golden-set (17-08-2026)\n\nEl texto del prompt (wrapUntrustedWiki, buildCuratorUserMsg) salió de wiki.ts a functions/_lib/judge-prompts.mjs, con una constante CURATOR_PROMPT_VERSION que queda en el summary de bib_wiki_log. Refactor puro — mismo comportamiento en producción.\n\nDisciplina nueva: cambiar el wording del prompt exige bump de versión + pasar los 10 casos dorados de functions/_lib/curator-goldens.json (runner scripts/test-curator-goldens.mjs) en el mismo cambio. Además del gate pre-merge local, un cron mensual en OPS (POST /api/biblioteca/curator-goldens-run) re-corre los goldens contra el prompt DESPLEGADO para cazar drift del modelo Haiku (prompt quieto, modelo que cambia). Detalle completo de la adopción y del primer hallazgo real: [[ia-tech—metodo—tanda-repos-2026-08]].\n\n## Invocadores\n\n| Caller | Frecuencia | dry_run | Actor en log |\n|--------|-----------|-----------|--------------|\n| .github/workflows/wiki-curator.yml cron | Diario 05:00 UTC | true (default) | agent-curator |\n| workflow_dispatch manual | On demand | configurable | agent-curator |\n| Skill /wiki-review-drafts | Interactivo (Edu/Dani) | true → luego false si aprueba | agent-curator |\n\n## Cron GitHub Actions\n\nEl workflow .github/workflows/wiki-curator.yml llama al endpoint MCP via curl:\n\n\nPOST https://workspace.crearack.com/api/mcp\nAuthorization: Bearer $MCP_TOKEN\n{ \"method\": \"tools/call\", \"params\": { \"name\": \"wiki_curator_review\", \"arguments\": { \"dry_run\": true, ... } } }\n\n\nEl reporte se guarda como artifact curator-report-<run_id>.json con retención de 30 días.\n\nSecrets requeridos en el repo:\n- MCP_TOKEN — token de autenticación al Worker MCP\n\n## Prerrequisitos de entorno (Worker)\n\n- ANTHROPIC_API_KEY — requerida; sin ella el tool devuelve { error: \"ANTHROPIC_API_KEY not configured\" }\n- GH_PAT — opcional; sin ella Haiku no puede leer el contenido del .md y juzga solo por metadatos\n\n## Coste estimado\n\n~$0.003 por draft revisado con Haiku (estimación con ~350 tokens/draft a precios Haiku 4.5).\n\n## Limitaciones (v1)\n\n- No hay exclusión granular de slugs: aplica todos los veredictos o ninguno.\n- No hace git rm del .md al borrar — el archivo queda en el repo como audit trail.\n- Procesa solo concept_page; otros tipos de draft no se tocan (por diseño).\n\n## Ubicación en el código\n\n- Implementación: functions/api/mcp/handlers/wiki.ts (función wikiCuratorReview)\n- Prompt versionado: functions/_lib/judge-prompts.mjs (CURATOR_PROMPT_VERSION, wrapUntrustedWiki, buildCuratorUserMsg)\n- Registro tool: functions/api/mcp/tools.ts\n- LOGGED_TOOLS: functions/api/mcp/index.ts\n- Workflow cron: .github/workflows/wiki-curator.yml\n- Skill interactiva: .claude/skills/wiki-review-drafts/SKILL.md\n\n## Véase también\n\n- [[feature—supercontext—fase-4-query-con-cierre]]\n- [[entity—mcp—tool—wiki-archive-answer]]\n- [[ia-tech—metodo—tanda-repos-2026-08]] — origen del golden-set y de la disciplina de versionado del prompt\n”
}
Referenciado desde
- Endpoint POST /api/biblioteca/curator-goldens-run — golden-set del Curator contra el prompt desplegado
- Enrichment Agent Blueprint — Cloudflare Queues + Anthropic Batch API (50% off)
- MCP Tool · wiki_archive_answer
- Reconciliación D1 ← repo del Bibliotecario-Ingest
- Supercontexto Fase 4 · Query con cierre (auto-archivado + curator)