Volver a la wiki

ADR: Plan Servicios Fase C ligera — Migración de 6 crons del Bibliotecario a STAGE Hetzner

ADR: Plan Servicios Fase C ligera — Migración de 6 crons del Bibliotecario a STAGE Hetzner

Contexto

Tras el cierre operativo del Plan Servicios al 95% (ver [[decision—20260516—auditoria-simplificacion-servicios-auxiliares]]), Edu replanteó si valía la pena ejecutar la Fase C — Migración selectiva a Hetzner aún siendo OPCIONAL.

El análisis de consumo Actions real reveló:

→ El driver económico para Fase C no existe hoy.

Sin embargo, Edu identificó valor cualitativo en migrar:

Decisión

Ejecutar Fase C en variante ligera: migrar los 6 cron-workflows del Bibliotecario que son llamadas curl-MCP triviales. NO migrar self-hosted runner para CI (riesgo de saturación CPU/RAM STAGE durante runs). NO migrar workflows que requieren clone repo + Python/Node + git push (catalog, translate, weekly-report, bib-reindex-ts schedule) — se quedan en GH Actions hasta una iteración futura si es necesario.

Workflows migrados (6 · cron systemd STAGE)

WorkflowFrecuenciaLlama LLM?Coste estimado/mes
wiki-curator.sh (Sonnet review drafts)L+J 05:00 UTCSí~$4
wiki-lint.sh (bulk + contradictions incremental)Diario 04:30 UTCNo$0
wiki-lint-consolidation.sh (mode full)Dom 03:00 UTCNo$0
wiki-utility.sh (recompute scores)L+M+V 06:00 UTCNo$0
wiki-drift-check.sh (Haiku dry_run cap 5)Diario 06:00 UTCSí (Haiku)~$0.5 (dry_run)
drift-cron-escriba.sh (REST endpoint)Diario 04:15 UTC(verificar)~$0

Workflows NO migrados (4 · siguen en GH Actions)

Frecuencias mantenidas iguales

Decisión consciente: no subir frecuencias en la misma sesión que se migra. Principio de cambios pequeños iterativos. Tras validar que los crons systemd corren limpios 1-2 semanas, se puede decidir aumento de frecuencia de los workflows “gratis al escalar” (utility a diario, por ejemplo) en una iteración separada.

Implementación

Estado STAGE pre-migración

Footprint añadido tras migración

Estructura desplegada

/opt/biblioteca-crons/
├── _common.sh                  (lib compartida: token loading + mcp_call + mcp_verify)
├── wiki-curator.sh
├── wiki-lint.sh
├── wiki-lint-consolidation.sh
├── wiki-utility.sh
├── wiki-drift-check.sh
├── drift-cron-escriba.sh
└── logs/
    └── <name>.log

/etc/cron.d/biblioteca-crons    (6 líneas cron, frecuencias = workflows GH Actions originales)

Tokens reutilizados de /opt/bib-reindex/ (single source of truth):

Smoke test (16-05-2026 noche)

5 de los 6 scripts ejecutados manualmente:

wiki-curator.sh NO ejecutado manualmente (Sonnet con coste notable · misma lógica MCP que el resto, validada).

Desactivación schedule en GH Actions

Los 6 workflows .yml del workspace tienen schedule: comentado con bloque explicativo:

on:
  # schedule deshabilitado 16-05-2026 (s66) — migrado a STAGE Hetzner (Plan Servicios Fase C ligera)
  # Cron systemd activo: /etc/cron.d/biblioteca-crons → /opt/biblioteca-crons/<name>.sh
  # ADR: decision--20260516--fase-c-crons-stage-ligera
  # Para reactivar en GH Actions: descomentar bloque schedule abajo + desactivar línea en /etc/cron.d/biblioteca-crons.
  # schedule:
  #   - cron: "..."
  workflow_dispatch:
    ...

workflow_dispatch: mantenido para invocación manual y rollback trivial (descomentar schedule + commit).

Alternativas descartadas

Full Fase C (incluir self-hosted runner CI)

Rechazada. Self-runner persistente consume 200-300 MB RAM idle + 1-2 GB durante runs CI. Riesgo concreto: CI compite con Django STAGE durante runs (timeout web/worker o tests STAGE lentos). El valor añadido (minutos Actions ilimitados) no compensa cuando actualmente estamos al 22% del cap.

Incluir wiki-catalog/translate/weekly-report (Tipo A)

Postponed. Requieren clone del repo workspace en STAGE + Python deps + Node + PAT con permisos push + adaptar scripts. Estimado +2-3h trabajo. Se hará si emerge dolor real (consumo Actions creciendo o necesidad de subir frecuencia de catalog).

No hacer Fase C

Rechazada por Edu. El valor cualitativo (resiliencia, margen futuro) supera el coste mínimo de implementación cuando ya existe el patrón cron-bib-reindex.sh validado en STAGE.

Consecuencias

Positivas

Negativas / Riesgos

Mitigaciones

Estado

Verificación a corto plazo (1-2 semanas)

Reapertura / siguiente iteración

Si tras 1-2 semanas el patrón funciona y emerge interés:

Véase también

Subir