El Interruptor de Air-gap
Una sola variable de entorno, CHINASKI_AIRGAP=1, cambia la postura de red de la aplicación. Establécela en el archivo de entorno de la instancia y reinicia. La línea del log de arranque dirá airgap: ENABLED (el instalador escribe el interruptor por ti por defecto; las instalaciones nuevas lo muestran activo desde el primer arranque).
La semántica de todo-o-nada
El interruptor apaga de una vez toda la lista de funciones salientes. No es un toggle por característica. Deshabilita, de un vistazo:
- Webhooks (build, form, post, publish) nunca se entregan, y el worker de reintentos automáticos se detiene.
- Los deploys desde el CMS: las rutas de push por rsync y S3 nunca se ejecutan.
- La verificación de Cloudflare Turnstile se omite (registrada como tal), y el widget de Turnstile se elimina de las páginas de login y de formularios incluso si las claves están guardadas en los ajustes.
- El correo del admin: cada envío (notificaciones de revisión, correo de aprobación/rechazo, avisos de build) devuelve no-enviado.
- Las comprobaciones del manifiesto de actualizaciones no se realizan incluso si hay una URL de manifiesto configurada. La característica queda inerte hasta que se desactive el air-gap.
- Las cargas de backup a Spaces no ocurren; los backups se siguen creando (y conservando) localmente.
Lo que sigue funcionando
- El propio CMS: edición de contenido, uploads, menús, ajustes, UI de administración.
- Builds estáticos con un matiz: los builds en air-gap son aún más estrictos con las referencias externas. Los analytics de GA4/GTM se eliminan de las plantillas incluso cuando están configurados, y cualquier código de snippet que haga referencia a una URL externa se elimina de las páginas construidas para que nada cargue desde un CDN.
- Los backups locales siguen funcionando: el backup diario del sistema (DB + media), los backups tar.gz desde la app, la verificación, los flujos de restauración. Ninguno necesita conectividad. Solo queda fuera la copia externa opcional a Spaces.
- Los formularios y el estado local siguen funcionando. Las submissions se almacenan como siempre; solo pausan la entrega de correo y la entrega de webhooks.
Una nota: el interruptor es firmado/completo, unidireccional y de una sola vez; reactivar una sola función saliente implica apagar el interruptor por completo (y luego elegir qué características usar).