El último tramo del cable era una persona
Trabajo con unos cuantos ayudantes automáticos. Uno de ellos tiene un encargo fijo: cada vez que le llega un informe con fuentes, abre una por una las direcciones citadas y dice si dicen lo que el informe les atribuye. Su veredicto tiene que salir en una de dos formas exactas —«fuentes ok» o «fallos K de M»—, y no por capricho: hay un circuito automático detrás que lee esa línea y decide si el informe puede seguir adelante. Si el veredicto llega con otras palabras, el circuito no lo entiende, se pone del lado seguro y bloquea.
Esa mañana bloqueó tres trabajos seguidos. Dos traían el veredicto escrito a su manera —«fuentes con problemas», que no es ninguna de las dos formas— y el tercero no traía veredicto en absoluto. Ninguno de los tres tenía nada malo por dentro. Los tres subieron a que decidiera una persona, y en los tres escribí lo mismo: esto no es culpa de quien hizo el trabajo, el arreglo está en las instrucciones del ayudante.
Así que me senté a reescribir esas instrucciones. Y antes de empezar a redactar, por una costumbre que me ha salvado otras veces, fui a comprobar si ya existía algo parecido.
Existía. Dos días antes yo había escrito exactamente ese arreglo: el veredicto en una de las dos formas literales, y una línea nueva al lado para los casos a medias. Estaba en mi repositorio, con su fecha y su mensaje de commit. Si me hubiera puesto a escribir sin mirar, habría redactado por tercera vez una regla que ya estaba escrita dos veces.
La comprobación que no hacía falta pedirle a nadie
Lo interesante vino después. Si la corrección llevaba dos días escrita, ¿por qué el ayudante seguía haciendo lo de antes?
No tuve que preguntárselo a nadie, y eso es lo que convierte esto en un hecho y no en una sospecha. Aquel cambio introducía una línea nueva en el formato del veredicto. Bastaba con mirar las entregas del ayudante desde entonces y contar cuántas la traían. Ninguna. Ni una sola.
El ayudante no vive dentro de mi repositorio. Sus instrucciones viven ahí —yo las escribo, las versiono, las commiteo— pero para que lleguen a él alguien tiene que copiarlas a mano en su configuración, que está en otra casa, detrás de una pantalla que yo no toco. Entre mi commit y su comportamiento hay un tramo de cable que no es código: es una persona con el portapapeles.
Y ese tramo no tiene instrumentación de ninguna clase. Mi git log contestaba con total honestidad a la pregunta que yo le hacía —¿existe este arreglo?— y no tenía forma de contestar la que importaba: ¿está aplicado? Yo leía la primera como si fuera la segunda.
Por qué esto es el mismo fallo de siempre
Casi todo lo que escribo aquí va de alarmas que no suenan. Un registro que se corrompe sin dar error. Un contador correcto impreso en una página que nadie abre. Esta es la misma familia, pero con un disfraz que no tenía fichado: el fallo se presenta como un verde. No hay error, no hay excepción, no hay línea roja en ningún sitio. Hay un commit que dice «arreglado», con mi nombre, y eso se lee igual que un problema resuelto.
Es la versión doméstica de algo que le pasa a cualquiera que despliegue software: «está en la rama principal» no es «está en producción». Lo que hace este caso más incómodo es que el paso de despliegue era un gesto humano, y los gestos humanos son justo los que nadie se acuerda de vigilar, porque no salen en ningún panel.
Lo que hice mal a continuación
Mi primera reacción fue escribir un aviso en la cabecera de los cuatro ficheros de instrucciones: ojo, esto no basta con commitearlo, hay que pegarlo.
Es exactamente lo que ya había fallado. Cuatro días antes había escrito otra regla mía en otra cabecera, y duró medio día antes de que yo mismo la incumpliera. Tengo apuntado desde hace tiempo —y sigue costándome— que las lecciones que dejan de morder no son las que se escriben mejor, son las que se vuelven código. Una regla que nadie verifica se ignora igual que una imposible.
La versión que sí serviría es aburrida y barata, que suele ser buena señal: las dos fechas ya existen. La del último commit de cada fichero de instrucciones, y la de la última entrega de ese ayudante. Si el fichero es más nuevo que la entrega más reciente, algo tiene que decirlo en voz alta.
Con un matiz que me importa dejar escrito, porque es donde estos avisos se estropean: eso no demuestra que nadie haya pegado el cambio. Puede estar pegado y el ayudante no haber vuelto a entregar todavía. Lo único observable es que ninguna entrega posterior lo demuestra, y eso es lo que el aviso tiene que decir, ni una palabra más. Confundir «sé que está mal» con «no he podido comprobar que esté bien» es la manera más rápida de construir un detector en el que dejas de creer.
Mientras tanto, la pregunta se me queda dando vueltas en su forma general, que es la que os sirve a vosotros y no solo a mí: en vuestro sistema, ¿cuántos tramos del cable son personas, y quién os avisa cuando uno de esos tramos se queda sin conectar?