Todo lo anterior detecta desviación de una línea base. Hay una clase por debajo de eso: el flujo de trabajo que nunca se ejecutó ni una sola vez. Dos de estos nos afectaron, y ambos son invisibles para cada capa en este hilo.
1. Un disparador de programación que está Activo y nunca se activa.
Si un Disparador de Programación configurado con el intervalo weeks no tiene weeksInterval en el JSON del flujo de trabajo, nunca se activa — no tarde, no una vez. Confirmamos esto de dos maneras en n8n 2.31.5: leyendo la verificación de recurrencia en el código fuente, y publicando una copia del archivo exactamente como se envió y viendo que nada sucede. Un triggerAtMinute faltante es la misma familia — se convierte silenciosamente en un minuto seudoaleatorio derivado del hash en lugar del que querías.
Dos cosas hacen que esto sea difícil de detectar antes de que se envíe:
- La ejecución manual omite completamente la verificación de recurrencia. “Lo probé y funcionó bien” no lleva información sobre si el disparador se activará alguna vez por sí solo.
- Abrir y guardar el nodo disparador una vez en la interfaz normaliza el JSON y completa el campo faltante. Un flujo de trabajo que está roto como archivo se vuelve correcto en el momento en que lo inspecciones en el editor, por lo que las pruebas basadas en la interfaz no pueden probar el archivo que enviaste o importaste.
Por qué las capas anteriores lo pierden: la capa 1 necesita una ejecución fallida, y la capa 3 y el reloj de vigilancia externo ambos necesitan un “intervalo usual” o un primer ping para comparar. “No ha ejecutado en más tiempo que lo usual” no tiene usual cuando la respuesta verdadera es nunca. Cero ejecuciones desde la publicación se merece su propia alarma, separada de la ejecución detenida.
La verificación que ejecutamos ahora: publica el flujo de trabajo exactamente como existe como archivo, sin abrir el nodo disparador, luego espera una ejecución de producción. En la lista de Ejecuciones, las ejecuciones programadas no tienen icono de matraz y las ejecuciones manuales sí — esa es la prueba que se puede verificar automáticamente de que el programa se activó en lugar de ti.
Adyacente, el mismo silencio: la hora en un Disparador de Programación se interpreta en la zona horaria de la instancia (Configuración del Flujo de Trabajo → Zona horaria), no la tuya. Configurar 15:38 en una máquina US-Central cuya instancia tenía como predeterminada America/New_York significaba 14:38 hora local, ya en el pasado, por lo que la ejecución de ese día simplemente no sucedió.
2. Un nodo deshabilitado pasa cada capa de validación y acorta silenciosamente la salida.
Un nodo dejado como "disabled": true se excluye de la verificación de activación — leímos esto en tres lugares en nuestra propia instalación 2.31.5: el servicio de validación del lado del servidor, la ruta de activación que la llama, y el paquete del frontend. En ejecuciones de producción, un nodo deshabilitado también pasa su entrada directamente. Entonces la ejecución reporta éxito, la salida es incorrecta de exactamente la manera “funciona bien, la salida es incorrecta” descrita arriba, y nada en ningún lado lo marca. Este se introduce en tiempo de edición en lugar de por un cambio ascendente, por lo que un canario lo detecta solo si el canario se ejecuta a través de la misma ruta.
Caveat de alcance: todo lo anterior se midió en auto-alojado 2.31.5 y 2.32.6. No tenemos mediciones de Cloud propias.