Lucía mantiene una herramienta interna de su equipo, un CLI que usan unas treinta personas. Al arrancar, consulta cuál es la última versión publicada y, si es más nueva que la instalada, muestra una línea: «Hay una versión nueva, actualiza». La comparación la escribió ella en una tarde, y era tan corta que nadie la revisó: comparaba las versiones como cadenas de texto.
Funcionó durante meses. Del 1.2 al 1.3, del 1.8 al 1.9, todo bien. Luego publicaron la 1.10.0 y el aviso dejó de salir. No dio ningún error: simplemente no salía. Para un comparador de texto, «1.10.0» va antes que «1.9.0», porque el carácter «1» es menor que el «9». La mitad del equipo se quedó dos semanas en la 1.9 sin enterarse.
El arreglo obvio y el que no lo era
Abrió el fichero en Elffuss Code y le pidió a la IA, que corre dentro de la propia pestaña, una función que comparase versiones semánticas. La primera propuesta fue la esperable: partir por puntos, convertir cada trozo a número y comparar de izquierda a derecha. Con eso, 1.10.0 ya quedaba por encima de 1.9.0.
Lucía le pidió entonces casos de prueba, y fue ahí donde la cosa se puso interesante. La IA le preguntó si usaban versiones previas, porque «2.0.0-rc.1» partido por puntos da un trozo «0-rc», que al convertirlo a número sale NaN, y cualquier comparación con NaN es falsa. Las usaban. Ella misma había etiquetado una candidata la semana anterior.
La versión final sigue las reglas de SemVer, que no son pocas:
- La parte principal (mayor, menor, parche) se compara numéricamente.
- Una versión previa va antes que la versión final: 2.0.0-rc.1 < 2.0.0.
- Dentro de la etiqueta previa, los identificadores numéricos se comparan como números (rc.2 < rc.10) y los de texto, alfabéticamente.
- Un identificador numérico va antes que uno de texto, y si todo lo anterior empata, la lista más corta va antes: rc < rc.1.
- Lo que va detrás de «+» (metadatos de compilación) no cuenta para el orden.
No dio por buena ninguna regla sin más: pidió a la IA una tabla con quince parejas y el resultado esperado de cada una, y comprobó las dudosas contra la especificación. Dos de los casos los añadió ella a mano. Al final, la función tenía cuarenta líneas, el doble que la original, y sus pruebas, el triple.
Por qué no lo pegó en un chat cualquiera
Para generar casos realistas, Lucía le pasó a la IA la lista de etiquetas del repositorio. Ahí estaban 2.0.0-rc.1, una rama con el nombre de un cliente y una versión previa de una función que su empresa aún no había anunciado. Al ser solo etiquetas, no parecían nada delicado, pero en conjunto contaban el calendario de lanzamientos de los próximos meses.
Como el modelo se ejecuta en el navegador, esa lista no salió de su máquina. No tuvo que ponerse a decidir qué etiquetas podía enseñar y cuáles no. Pegó la lista entera, que era lo que hacía falta para que las pruebas se pareciesen a la realidad.
Comparar versiones como texto funciona hasta la primera versión con dos cifras. Para entonces, ya hay gente que lleva un tiempo sin actualizar.
El aviso volvió a salir al día siguiente y la 1.9 desapareció del equipo en una semana.
Abre Elffuss Code y escribe tu próxima utilidad con la IA corriendo en tu navegador: tu código y tus prompts no se suben a ningún sitio.
Abrir Code →