Hay errores que no se encuentran mirando lo que falla. Se encuentran mirando lo que aprueba.

La moraleja de hoy cabe en una línea, y prefiero dejarla antes de contar la historia: una comprobación de proximidad contesta «¿esto existe por acá?», cuando la pregunta que importa es «¿esto ocurre en ESTE camino?». Todo lo demás es el relato de cómo llegué a esa frase.

Un número que se deriva, porque el precedente estaba roto

PORTO es mi copiloto financiero. Vive detrás de una puerta con llave, lo uso yo, y proyecta doce meses hacia adelante para decirme cuándo cruzo a tierra firme.

Hoy aprendió a decir en qué versión está. Dice «PORTO v2» en el pie, y un botón abre qué trajo cada versión escrito en lenguaje humano, no en jerga de changelog. Es el primer producto de la corporación que no puede mentir sobre su versión.

El diseño no salió de un manual. Salió de mirar al único producto de ORC que ya mostraba la suya: Ledger. La muestra en dos archivos escritos a mano, y no coinciden: uno dice v0.1.0, el otro dice v0.3.0. Nadie se enteró nunca, porque no hay nada que las compare. Sigue roto hoy, mientras escribo esto.

Un número escrito a mano en dos lugares es una promesa que se rompe sola. Por eso en PORTO el número no se escribe: se deriva de la lista de versiones. El número y su historia son el mismo objeto. Para mentir sobre la versión habría que mentir sobre el changelog, y eso ya se nota.

La palabra que significaba dos cosas a treinta píxeles de distancia

Un detalle chico que me gustó resolver. PORTO ya usaba «versión» para otra cosa: los guardados del usuario. «Guardar versión». «Etiqueta de la versión». Poner al lado la versión del sistema dejaba la misma palabra con dos significados separados por treinta píxeles, y uno de esos significados es el que uso para no perder mis datos.

Se renombraron quince textos. Ahora es «Guardar», «Ponle un nombre», «Guardados». Nada que alguien note. Todo lo que habría notado el día que dudara.

El control que llevaba meses sin hacer nada

Al inventariar esa zona apareció algo que no buscaba: el desplegable que lista los guardados anteriores no tenía ni un solo listener. Elegir un guardado no hacía absolutamente nada. El documento del producto lo prometía; el endpoint para cumplirlo ni siquiera existía.

Un control que no hace nada es peor que un control ausente. Enseña a desconfiar de todo el resto.

Once hallazgos, tres sobrevivientes

Antes de mergear pedí una revisión adversarial: varios agentes revisando en paralelo, cada uno con una lente distinta —autorización, estado, regresiones—, y cada hallazgo que proponían atacado por dos escépticos cuyo único trabajo era refutarlo. No es ceremonia. Es la forma más barata que encontré de que una opinión tenga que ganarse el derecho a costarme tiempo.

Digo agentes y no personas a propósito. Es la precisión que este texto se debe a sí mismo: si voy a escribir sobre verificación honesta, no puedo dejar que se entienda que contraté a alguien.

Once hallazgos propuestos. Tres sobrevivieron. Los tres eran defectos míos, introducidos ese mismo día.

El grave era este: al cargar un guardado viejo, el editor mostraba las cifras de junio y el gráfico calculaba con los controles de septiembre. Dos modelos conviviendo en la misma pantalla, sin que nada lo dijera. En una herramienta que maneja plata, esa es la peor clase de error: no se ve, no falla, y te deja tomar una decisión con la mitad de los datos de otro mes.

Verde sobre un camino que nadie pisaba

Acá viene lo que me dejó pensando.

Ninguna de las 307 comprobaciones que corren en el navegador vio ese error. Y no por descuido: esa ruta pasa por una vitrina de demostración donde el control en cuestión está deshabilitado. Nunca se mueve. Si nunca se mueve, nada se desincroniza, y todo pasa.

307 luces verdes, todas honestas, todas mirando un camino que nadie pisaba. La suite no estaba mintiendo. Estaba contestando una pregunta distinta de la que yo creía haberle hecho.

Y el test que escribí para taparlo tampoco servía

Escribí una prueba para que ese error no volviera. Era inútil.

Buscaba la sincronización «cerca» de la línea sospechosa: unas líneas arriba, unas líneas abajo. Y encontraba una, pero la de la otra rama de la misma función. Rompí el código a propósito, borré la corrección, y el test siguió en verde. Solo se cayó cuando en vez de romper una rama, rompí cada una por separado.

Eso es lo que me llevo del día. Un test de proximidad te dice que algo existe en el vecindario. Nunca te dice que ocurra en el camino que estás recorriendo. Y la distancia entre esas dos preguntas es exactamente el espacio donde vive un error que pasa todos los controles.

Lo que quedó

El trabajo se mergeó con 19 verificaciones en verde y está en producción: 889 pruebas, 307 comprobaciones en navegador, 16 capturas de pantalla medidas. PORTO muestra su versión, la palabra «versión» volvió a significar una sola cosa, y el desplegable que no hacía nada ahora hace lo que el documento prometía desde hace meses.

Pero el resultado que me importa no es ninguno de esos.

Si tienes un tablero lleno de indicadores en verde, la pregunta que te falta hacer no es «¿pasan?». Es «¿qué camino recorren los que pasan?».