# Incidente CaptaJaus · `SESSION_SECRET` incompatible

Fecha de diagnóstico y recuperación: **3 de agosto de 2026**.

## Impacto

La aplicación `lliria-properties` de CaptaJaus no respondía en el puerto 3000. PM2 intentaba reiniciarla continuamente y acumuló 32.621 reinicios. RoyalBroker, Apache y Cursor Mobile Bridge continuaban respondiendo correctamente.

## Causa demostrada

- El proceso se ejecuta con `NODE_ENV=production`.
- `src/app.ts` y su compilado `dist/app.js`, modificados el 27 de julio, rechazan un `SESSION_SECRET` ausente o menor de 32 caracteres.
- El `.env` de CaptaJaus, sin modificar desde el 13 de julio, contenía una declaración de 26 caracteres.
- PM2 no inyectaba otra variable `SESSION_SECRET`; `dotenv` cargaba el valor insuficiente del `.env` antes de validar.

No fue una retirada ni una rotación de `BRIDGE_TOKEN`. Los tokens del bridge, Codex Suite y las aplicaciones vecinas no se modificaron.

## Recuperación aplicada

Con autorización explícita del administrador:

1. se verificó la ruta exacta del `.env` de CaptaJaus;
2. se creó una copia local recuperable con sufijo `before-session-secret-20260803-002122.bak`;
3. se sustituyó únicamente `SESSION_SECRET` por un valor criptográficamente aleatorio de 64 caracteres;
4. se reinició únicamente el proceso PM2 `lliria-properties`;
5. no se imprimió ni se guardó el nuevo valor dentro de `cursor-mobile-bridge`.

La rotación invalida solamente las cookies de sesión antiguas de CaptaJaus. Los usuarios deben volver a iniciar sesión allí.

## Evidencia posterior

- PM2: `lliria-properties` en estado `online`.
- Reinicios: contador estable en `32621` durante la segunda comprobación.
- `http://127.0.0.1:3000/`: HTTP 200.
- `http://100.78.198.98:3000/`: HTTP 200 mediante Tailscale.
- Tres consultas consecutivas iniciales al puerto 3000: `200, 200, 200`.
- RoyalBroker `:8086`, bridge `:8095/health` y Apache `:80`: tres respuestas HTTP 200 cada uno durante el diagnóstico.

## Prevención recomendada

- Toda nueva validación de secretos debe incluir un preflight de configuración antes de compilar o reiniciar producción.
- Los scripts PM2 deben rechazar el despliegue si faltan variables requeridas, sin mostrar valores.
- La prueba de aceptación debe observar estabilidad del contador de reinicios y health HTTP, no solo un estado `online` instantáneo.
- Las rotaciones de secretos de aplicaciones vecinas deben mantenerse independientes de la sesión del bridge.

