Propósito
Endpoint que pasa los 10 casos dorados del Curator (functions/_lib/curator-goldens.json) contra el prompt DESPLEGADO (CURATOR_PROMPT de functions/_lib/judge-prompts.mjs) usando el modelo Haiku real. No valida cambios de wording del prompt — eso lo hace el gate manual pre-merge scripts/test-curator-goldens.mjs — sino que caza el drift del modelo: el prompt se queda quieto pero Anthropic actualiza Haiku por debajo, y el juez de la wiki puede cambiar de criterio en silencio. Lo dispara un cron mensual en OPS.
Contrato
POST /api/biblioteca/curator-goldens-run
Auth: Bearer (mismo middleware que el resto de /api/biblioteca/*)
Body: (vacío)
Respuesta:
{
"prompt_version": "2026-08-17.2",
"passed": 10,
"failed": 0,
"cost_usd": 0.003,
"alert_id": null,
"duration_ms": 4200,
"cases": [{ "id": "...", "verdict": "keep-draft", "allowed": ["keep-draft"], "ok": true, "reason": "..." }]
}
Si falta ANTHROPIC_API_KEY (secret solo de CF Pages — OPS no la tiene ni la necesita): 503 { "error": "ANTHROPIC_API_KEY not configured" }.
Comportamiento
- Corre los 10 casos en paralelo contra Haiku vía
callAnthropicHaiku. - Deja heartbeat siempre en
activity_log(actorcron, actioncurator_goldens), pase o falle — visible en el Pulse. - Si
failed > 0: levanta o refresca una alerta rodante única (message LIKE 'Curator goldens:%', de-dupe por mensaje) — mismo patrón quefunctions/api/biblioteca/drift-run.ts. - Si
failed === 0y había alerta activa: la auto-resuelve (active = 0).
Invocador: cron mensual en OPS
scripts/ops/biblioteca-crons/curator-goldens.sh (fuente en git, se copia a /opt/biblioteca-crons/ en el despliegue):
- Cadencia: día 1 de cada mes, 06:30 UTC (
scripts/ops/biblioteca-crons/cron.d.reference). - Auth:
MCP_TOKEN+ cabeceras CF Access (CF_ACCESS_CLIENT_ID/SECRET). - Desenvuelve el body (HTTP 200 no basta — Regla 15 del método): solo declara éxito si
.failed == 0en el JSON. - La alerta de fallo la levanta el propio endpoint; el script solo loguea y sale con
exit 1. - Entrada dedicada
curator-goldensenscripts/ops/heartbeat.sh(ventana 800h — cadencia mensual necesita ventana ancha para el dead-man’s-switch).
Dependencias
functions/_lib/judge-prompts.mjs— prompt versionado (CURATOR_PROMPT,CURATOR_PROMPT_VERSION,buildCuratorUserMsg), compartido conwiki_curator_reviewen producción y con el runner localtest-curator-goldens.mjs.functions/_lib/curator-goldens.json— 10 casos dorados (se movieron aquí desdescripts/en este mismo commit para que el Worker pueda importarlos).functions/_lib/anthropic.ts—callAnthropicHaiku,haikuCostUsd,parseJsonFromLLM.- D1: tablas
activity_logyalerts.
Relación con el resto del mecanismo
| Gate | Cuándo | Qué prueba | Herramienta |
|---|---|---|---|
| Edición del prompt | Pre-merge, manual | El wording nuevo contra los 10 goldens | scripts/test-curator-goldens.mjs (local) |
| Drift del modelo | Mensual, automático | El prompt desplegado contra el Haiku real de hoy | Este endpoint, vía cron OPS |
Historia de la adopción (cherry-pick de thoughtdag, tanda de repos 17-08-2026) y del primer hallazgo real (fix de CURATOR_PROMPT_VERSION a 2026-08-17.2 tras un caso fallado en el estreno): [[ia-tech—metodo—tanda-repos-2026-08]].
Véase también
- [[entity—mcp—tool—wiki-curator-review]]
- [[ia-tech—metodo—tanda-repos-2026-08]]
- [[concept—infra—ops-server]]
- [[concept—biblioteca—arquitectura-supercontexto]]
- [[entity—biblioteca—endpoint—crons]]
- [[feature—ops—refuerzo-harness-05-08]]