CreaRack-SL

Guardrails del reindex-ws: deps + alertas inmediatas (fix s210)

Funcionalidadactivecreado Thu Jul 09#biblioteca#infra#cron#alerting#reliability#fix

Descripción

Fix de infraestructura para el cron cron-bib-reindex-ws.sh que resuelve dos deudas críticas del footgun s210 (typescript devDep desapareciendo silenciosamente en reindex):

1. Garantizar devDeps en el workspace (ensure_ws_deps)

Problema: pull_repo hacía git pull pero NO pnpm install. Si el node_modules/ del workspace se reinstalaba sin devDependencies (por cambio de versión de pnpm, limpieza manual, etc.), el módulo typescript (que bib_ast_ts.mjs importa) desaparecía. El modo ts peteaba en ~1 segundo silenciosamente, sin alertas, dejando la Biblioteca en rojo por drift real durante 4 días.

Solución: Nueva función ensure_ws_deps() que:

  • Verifica si typescript está disponible en node_modules del workspace con node -e "require.resolve('typescript')"
  • Si falta, ejecuta pnpm install --frozen-lockfile (solo cuando sea necesario)
  • Registra el evento como WARN o ERROR según resultado
  • Se invoca automáticamente en pull_repo cuando $d == $WS

2. Alertas inmediatas en ERROR (alert_fail)

Problema: El heartbeat de la Biblioteca solo vigilaba la última línea [OK] del log COMPARTIDO. Como wiki/chunks alimenta diariamente el log con [OK], un fallo del modo ts (que corre L+J) quedaba enmascarado tras logs de éxito posteriores.

Solución: Nueva función alert_fail() que:

  • Construye un payload JSON-RPC para la herramienta MCP send_maintenance_email
  • Envía email de alerta INMEDIATAMENTE al momento del [ERROR]
  • Usa el mismo canal que el heartbeat (MCP con token/CF-Access), garantizando autenticación
  • Envía en cada modo (chunks, wiki, claude-method) para máxima cobertura
  • Es un no-op si jq no está disponible (degradación elegante)

Refactor: Todas las salidas de error (log ERROR + exit 1) se centralizan ahora en función fail(), que:

  • Registra el error en log
  • Dispara la alerta email
  • Ejecuta exit 1

Cambios técnicos

Archivo: scripts/cron-bib-reindex-ws.sh

  • Nuevas variables: ALERT_TO="edudomo2@gmail.com"
  • Nuevas funciones: ensure_ws_deps(), alert_fail(), fail()
  • Refactor: Reemplazo de log ERROR ... ; exit 1 por fail ... en líneas 124, 158, 176

Dependencias asumidas:

  • jq en el sistema (para JSON-RPC, degradable si ausente)
  • Acceso al endpoint MCP con tokens BIB_MCP_TOKEN, CF_ACCESS_CLIENT_ID, CF_ACCESS_CLIENT_SECRET
  • curl con opciones de timeout y seguimiento de código HTTP

Impacto esperado

✅ Antes: Modo ts fallaba silenciosamente 4 días sin alertas visibles ✅ Ahora:

  • devDeps se garantizan automáticamente tras git pull
  • Cada ERROR del modo dispara email inmediatamente
  • El heartbeat sigue vigilando, pero la alerta no depende de él

Testing recomendado

  1. Simular pérdida de typescript: rm -rf $WS/node_modules && ./scripts/cron-bib-reindex-ws.sh chunks → debe reinstalar e indicar WARN en el log
  2. Simular fallo del modo (ej. typescript ausente a propósito): verificar que email se dispara en 60s (timeout de curl)
  3. Simular jq ausente: verificar que la función alert_fail es no-op y el reindex continúa

Véase también

  • [[feature—biblioteca—bib-reindex-extras]]
  • [[concept—general—como-esta-montado-el-cron-bib-reindex-ws-en-hetzne]]
  • [[entity—ci—workflow—bib-reindex-claude-method]]
  • [[incident—20260421—task-scheduler-spof]]