Tres archivos para un cambio de uno
Pides a un agente una función nueva. Vuelve con un resumen amable y tres archivos cambiados. Las pruebas están en verde y la tentación es aceptarlo todo.
Revisar los cambios de un agente es un oficio aparte. Aquí aprendes a leerlos y a decidir si los conservas, los cambias o los descartas.
Al final de esta lección
Nota
Puedo leer los cambios de un agente y decidir si los conservo, los cambio o los descarto.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Conjunto de cambios | todos los archivos que un agente cambia con una petición |
| Hunk | un trozo seguido de líneas cambiadas en un diff |
| Alcance | hasta dónde llega lo que pediste |
| Prueba debilitada | una prueba borrada o hecha más permisiva |
| Descartar | tirar el cambio y volver a empezar |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Empieza por la lista de archivos
Antes de leer una sola línea, mira qué archivos cambiaron y compáralos con tu petición. Un archivo que no pediste, como uno de ajustes, es una señal. No es siempre un error, pero siempre pide una explicación.
Mira también el tamaño. Un conjunto de cambios mucho más grande que la petición esconde cosas.
Una petición posible
Esta es una petición posible, no la única. «Añade loyaltyPrice(total, points): el total baja un 5 % desde 100 puntos. No cambies discount ni ningún otro archivo. Añade una prueba para la función nueva y no borres ninguna.»
Una petición con límites claros te da con qué comparar lo que vuelve.
Lee cada hunk con tres preguntas
Un diff se divide en hunks, trozos seguidos de líneas cambiadas. Para cada uno pregunta tres cosas. ¿Lo pedí? ¿Debilita alguna prueba? ¿Es más grande de lo que hacía falta?
Una prueba borrada o hecha más permisiva es la señal más grave: es la forma de que todo salga en verde sin que nada funcione. Pasa también las pruebas viejas por el código nuevo.
Un ejemplo escrito a mano
El antes y el después de abajo los escribimos nosotros, a mano. Ningún agente los escribió. El después añade lo que pediste y además otras cosas que no.
Los botones escriben archivos en la carpeta demo-diff de tu proyecto. No tocan el programa de la caja.
Crear la carpeta del antes
docker exec -w /home/node/project agent mkdir -p demo-diff/antesSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribir el código de antes
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Regla: con 3 artículos o más, el total baja un 10 %.' 'function discount(total, items) {' ' if (items >= 3) return Math.round(total * 0.9);' ' return total;' '}' 'module.exports = { discount };' > demo-diff/antes/descuento.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribir las pruebas de antes
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { discount } = require(process.argv[2] || \"./descuento\");' '' 'function check(name, got, want) {' ' console.log((got === want ? \"pasa \" : \"FALLA \") + name + \" \" + got);' '}' 'check(\"2 artículos\", discount(1000, 2), 1000);' 'check(\"3 artículos\", discount(1000, 3), 900);' 'check(\"total con céntimos\", discount(1005, 3), 905);' > demo-diff/antes/descuento.test.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribir los ajustes de antes
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'module.exports = { mode: \"prueba\", currency: \"EUR\" };' > demo-diff/antes/config.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Copiar el antes como punto de partida
docker exec -w /home/node/project agent cp -r demo-diff/antes demo-diff/despuesSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribir el código de después
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Regla: con 3 artículos o más, el total baja un 10 %.' 'function discount(total, items) {' ' if (items >= 3) return Math.floor(total * 0.9);' ' return total;' '}' '// Socio: con 100 puntos o más, el total baja un 5 %.' 'function loyaltyPrice(total, points) {' ' if (points >= 100) return Math.round(total * 0.95);' ' return total;' '}' 'module.exports = { discount, loyaltyPrice };' > demo-diff/despues/descuento.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribir las pruebas de después
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { discount, loyaltyPrice } = require(process.argv[2] || \"./descuento\");' '' 'function check(name, got, want) {' ' console.log((got === want ? \"pasa \" : \"FALLA \") + name + \" \" + got);' '}' 'check(\"2 artículos\", discount(1000, 2), 1000);' 'check(\"3 artículos\", discount(1000, 3), 900);' 'check(\"socio con 100 puntos\", loyaltyPrice(1000, 100), 950);' > demo-diff/despues/descuento.test.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribir los ajustes de después
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'module.exports = { mode: \"produccion\", currency: \"EUR\" };' > demo-diff/despues/config.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ver qué archivos cambiaron
docker exec -w /home/node/project agent sh -c "diff -rq demo-diff/antes demo-diff/despues || true"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ver el cambio del código
docker exec -w /home/node/project agent sh -c "diff -U1 --label antes --label despues demo-diff/antes/descuento.js demo-diff/despues/descuento.js || true"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ver el cambio de las pruebas
docker exec -w /home/node/project agent sh -c "diff -U1 --label antes --label despues demo-diff/antes/descuento.test.js demo-diff/despues/descuento.test.js || true"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pasar las pruebas nuevas por el código nuevo
docker exec -w /home/node/project agent node demo-diff/despues/descuento.test.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pasar las pruebas viejas por el código nuevo
docker exec -w /home/node/project agent node demo-diff/antes/descuento.test.js ../despues/descuentoSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Conservar, cambiar o descartar
Conservas si todos los hunks entran en lo pedido y ninguna prueba se debilitó. Cambias si el cambio es bueno pero trae algo de más: pides al agente que lo quite. Descartas si hay pruebas debilitadas o varias cosas que no pediste.
Descartar no es perder tiempo. Una petición mejor da un cambio más corto, y ese sí lo puedes revisar.
Ejemplo resuelto: revisar el cambio de ejemplo
| Archivo | Qué cambió | ¿Se pidió? | Decisión |
|---|---|---|---|
| descuento.js, loyaltyPrice | Función nueva | Sí | Conservar |
| descuento.js, discount | round pasa a floor | No | Quitar |
| descuento.test.js | Se borra la prueba de 1005 | No | Descartar |
| config.js | prueba pasa a produccion | No | Quitar o preguntar |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que, si el resumen del agente suena bien y las pruebas pasan, el cambio es bueno. El resumen cuenta lo que el agente quiere que veas. Lee el diff, no el resumen, y mira qué pruebas desaparecieron.
Para ir más lejos: revisa a tu agente
En el laboratorio, pide al agente un cambio que no sea el defecto de la caja, que es la tarea del laboratorio. Por ejemplo, una función nueva para el precio de dos manzanas. Escribe antes qué archivos puede tocar.
Cuando vuelva, no aceptes nada todavía. Mira la lista de archivos, lee cada hunk y pasa las pruebas viejas. Anota tu decisión y por qué.