Viernes, despliegue pendiente, y la pregunta de siempre: ¿qué tiene producción que no tenga staging? Dos ficheros de configuración de unas trescientas líneas cada uno, anidados, con listas dentro de objetos dentro de listas. A ojo no se hace. Y el diff de texto del editor tampoco sirve: uno de los dos venía generado por una herramienta que ordena las claves alfabéticamente, así que marcaba el fichero entero en rojo.
Así que utilidad pequeña: una función que se coma los dos objetos y devuelva solo lo que importa.
El primer intento tarda diez minutos y miente
Comparar recursivamente clave a clave es de manual. En un rato ya salía una lista. El problema fue leerla: catorce diferencias, y al mirarlas una por una, trece eran ruido.
- La lista de hosts permitidos estaba en distinto orden. No es un cambio: es un conjunto.
- La cadena de middlewares, en cambio, también estaba en distinto orden. Ahí sí es un cambio, y gordo.
- Un puerto era 3000 en un lado y la cadena de texto «3000» en el otro. Iguales al desplegar, distintos al comparar.
- Y el clásico: una clave con valor null explícito frente a esa misma clave sin aparecer. Para el recorrido ingenuo, lo mismo. Para el que lee la configuración, no: una apaga la función y la otra deja el valor por defecto.
Dónde ayuda de verdad la IA
Escribir el recorrido recursivo lo hace cualquiera. Lo que se agradece es pegarle los dos ficheros de verdad y pedirle que enumere en qué casos su propia comparación se va a equivocar. Ahí salió la distinción entre listas ordenadas y listas que son conjuntos, que es una decisión de negocio, no de código: hay que decírselo campo por campo.
La solución acabó siendo una tabla de reglas —qué rutas se comparan como conjunto, cuáles se normalizan antes— y un comparador tonto por debajo. Unas cuarenta líneas. Dos vueltas de iterar en el propio editor, sin salir de la pestaña.
Por qué esos ficheros no se pegan en cualquier sitio
Y aquí está el detalle incómodo: para que la ayuda sea buena hay que enseñarle los ficheros reales. Con los nombres de los hosts internos, el del bucket, las claves de funcionalidad que llevan el nombre del cliente al que se le activó, la estructura entera del despliegue.
Un ejemplo inventado te da una función correcta que falla con tus datos. Los datos de verdad te dan la función que necesitas.
Pegar eso en un chat que vive en un servidor ajeno es mandar fuera el inventario de tu infraestructura por una función de cuarenta líneas. Con el modelo corriendo en el navegador, sobre tu propia GPU, la pregunta ni se plantea: el código y el prompt no salen del equipo porque no hay adónde ir.
Moraleja de la tarde: un diff no responde «¿son iguales?». Responde «¿qué debería preocuparme?». Y eso solo lo sabes tú.
Abre Elffuss Code y escribe tu próxima utilidad de cuarenta líneas con la IA corriendo dentro del navegador: ni tu código ni tus ficheros de configuración se suben a ningún sitio.
Abrir Code →