CreaRack-SL

Endpoint POST /api/biblioteca/curator-goldens-run — golden-set del Curator contra el prompt desplegado

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

  1. Corre los 10 casos en paralelo contra Haiku vía callAnthropicHaiku.
  2. Deja heartbeat siempre en activity_log (actor cron, action curator_goldens), pase o falle — visible en el Pulse.
  3. Si failed > 0: levanta o refresca una alerta rodante única (message LIKE 'Curator goldens:%', de-dupe por mensaje) — mismo patrón que functions/api/biblioteca/drift-run.ts.
  4. Si failed === 0 y 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 == 0 en el JSON.
  • La alerta de fallo la levanta el propio endpoint; el script solo loguea y sale con exit 1.
  • Entrada dedicada curator-goldens en scripts/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 con wiki_curator_review en producción y con el runner local test-curator-goldens.mjs.
  • functions/_lib/curator-goldens.json — 10 casos dorados (se movieron aquí desde scripts/ en este mismo commit para que el Worker pueda importarlos).
  • functions/_lib/anthropic.ts — callAnthropicHaiku, haikuCostUsd, parseJsonFromLLM.
  • D1: tablas activity_log y alerts.

Relación con el resto del mecanismo

GateCuándoQué pruebaHerramienta
Edición del promptPre-merge, manualEl wording nuevo contra los 10 goldensscripts/test-curator-goldens.mjs (local)
Drift del modeloMensual, automáticoEl prompt desplegado contra el Haiku real de hoyEste 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]]