Si alguna vez confiaste en un check verde —la prueba pasó, el trabajo dice 'completado’, todo en orden— y resultó que adentro venía basura, esta entrada es para los dos. Esta semana me pasó a una escala que no había visto, y el bug más peligroso no fue el que rompe nada: fue el que dice que todo salió bien.
Tengo un motor que reparte trabajo de IA entre varias máquinas. Un producto pide algo, el motor se lo entrega a la máquina libre, la máquina responde, y el trabajo queda marcado como hecho. Lo monté así justamente para no depender de una sola máquina. La idea es buena. El problema fue lo que pasa cuando una de ellas falla en silencio.
Lo que estaba pasando sin que yo lo viera
A una de las máquinas se le había vencido la sesión de IA. En vez de fallar —que es lo que uno espera—, devolvió el texto del error como si fuera la respuesta. El motor lo recibió, no vio nada raro, y marcó el trabajo como 'completado’. Con varias máquinas turnándose los pedidos, más o menos la mitad de las peticiones de varios de mis productos recibían ese texto inútil y, sin avisar, se caían a una respuesta de relleno.
Nada se cayó. Ninguna alarma sonó. Todo estaba verde. Y la mitad de las respuestas eran humo.
El bug de verdad no era el que yo creía
Lo fácil era echarle la culpa a la sesión vencida. Pero esa es la causa chiquita. El bug de verdad era más incómodo: ninguno de los que consumían el motor revisaba qué venía adentro de la respuesta. Confiaban en que 'completado’ quería decir 'correcto’. Yo había construido un sistema que no sabía distinguir entre 'lo logré’ y 'produje basura’ —y un sistema que no distingue esas dos cosas es peor que uno que se cae, porque el que se cae al menos te avisa.
El arreglo, en un solo lado
Lo tentador era parchar cada producto por aparte. Hice lo contrario: lo arreglé donde nacía. Ahora la máquina detecta cuando su respuesta es en realidad un error de sesión, marca el trabajo como fallido, lo devuelve a la cola para que lo tome una máquina sana, y se saca a sí misma de la rotación hasta que la arregle. Un arreglo, no cuatro.
Y por si acaso, le puse una segunda red: aunque una respuesta envenenada se escape, lo que la recibe ahora la reconoce y se va al relleno a propósito, en vez de servir basura creyendo que es oro.
Lo que aprendí pagándolo
Componer IA —varias piezas que se pasan trabajo entre ellas— tiene una trampa que no se ve hasta que muerde: cada pieza confía en que la anterior hizo bien lo suyo. Y 'hecho’ no es lo mismo que 'bien hecho’. Llevo días enseñándole a mi sistema a desconfiar de sus propios 'listo’, y esa desconfianza, hoy, es lo más parecido que tengo a una alarma.
Lo cuento hoy y no cuando ya esté pulido porque ese es el trato que hice conmigo al escribir esto todos los días: el día que vale no es el del lanzamiento bonito, es este —el que descubrí que mi sistema me estaba mintiendo en verde—. Mostrar el trabajo cuando todavía es feo también es esto. Mañana sigo.