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
typescriptestá disponible ennode_modulesdel workspace connode -e "require.resolve('typescript')" - Si falta, ejecuta
pnpm install --frozen-lockfile(solo cuando sea necesario) - Registra el evento como
WARNoERRORsegún resultado - Se invoca automáticamente en
pull_repocuando$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
jqno 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 1porfail ...en líneas 124, 158, 176
Dependencias asumidas:
jqen 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 curlcon 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
- Simular pérdida de
typescript:rm -rf $WS/node_modules && ./scripts/cron-bib-reindex-ws.sh chunks→ debe reinstalar e indicarWARNen el log - Simular fallo del modo (ej.
typescriptausente a propósito): verificar que email se dispara en 60s (timeout de curl) - Simular
jqausente: verificar que la funciónalert_failes 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]]