El problema no es que el agente escriba mucho
El problema aparece cuando cada iteración añade otra capa sin retirar la anterior: wrappers que solo delegan, alias legados sin consumidores, validaciones duplicadas y exports que agrandan el contrato público. Un repositorio puede seguir con tests verdes y, aun así, costar más entenderlo y cambiarlo.
Una publicación de X detectada por el radar de Aulafy sirvió como señal de esta preocupación. La solución técnica de la lección procede de documentación oficial y de un laboratorio reproducible; una experiencia social no demuestra por sí sola que una herramienta cause deuda.
Cinco puertas para una refactorización segura
- Línea base: ejecuta las pruebas y registra el estado de Git antes de editar.
- Contrato: identifica imports, exports, efectos y salidas que deben conservarse.
- Presupuesto: limita archivos y prohíbe nuevas dependencias o abstracciones innecesarias.
- Prueba: exige comportamiento verde y una auditoría estructural separada.
- Diff: explica cada eliminación y comprueba que no se tocaron pruebas para ocultar una regresión.
git status --short git diff --stat npm test # Después del cambio npm test npm run auditar git diff --numstat -- src/tasks.mjs git diff -- src/tasks.mjs
Tests verdes no significan repositorio limpio
Las pruebas de comportamiento responden «¿sigue funcionando?». Una auditoría estructural puede responder «¿retiramos los wrappers acordados?» o «¿la API pública conserva el tamaño previsto?». Necesitas ambas señales: una métrica de líneas aislada puede premiar código comprimido y una suite aislada puede ignorar código muerto.
Qué pedir al agente
La guía oficial de Codex recomienda declarar objetivo, contexto, restricciones y qué significa terminado; también pide ejecutar controles y revisar el diff. La documentación de Claude Code coincide en dar al agente una forma de verificar su trabajo y mantener las instrucciones de proyecto concisas.
Objetivo: elimina wrappers redundantes sin alterar la API cubierta por tests. Contexto: lee AGENTS.md, src/tasks.mjs y test/tasks.test.mjs. Límites: modifica solo src/tasks.mjs; no cambies pruebas ni package.json; no añadas dependencias ni nuevas abstracciones. Terminado cuando: npm test y npm run auditar pasan; el diff tiene más eliminaciones que adiciones; explica cada eliminación y cualquier riesgo restante.
Cómo revisar el resultado
- Rechaza cambios en pruebas que solo adapten la expectativa a una regresión.
- Busca nuevos nombres para la misma abstracción antigua.
- Comprueba consumidores fuera del archivo antes de retirar un export real.
- No uses «menos líneas» como criterio único: legibilidad y contrato importan.
- Trabaja primero en un repositorio de práctica o una rama reversible.
Laboratorio MIT
El repositorio aulafy/taller contiene un estado inicial funcional pero redundante, una suite sin red ni dependencias, una auditoría que falla al principio y una solución de referencia. Así puedes repetir el proceso con Codex, Claude Code o manualmente y comparar el mismo resultado.
Entrega de la lección
Qué vas a construir
Una refactorización pequeña que reduce una API de seis a tres funciones sin cambiar ninguna salida probada.
Por qué es importante
Aprenderás a exigir eliminaciones justificadas y evidencia, en lugar de aceptar código nuevo porque el agente afirma que está limpio.
Repositorio o archivos iniciales
Clona aulafy/taller y abre cursos/codex-programadores/laboratorios/higiene-repositorio-agentes. Los datos son sintéticos y no hay dependencias.
Pasos
- 1. Ejecuta npm test y confirma que las tres pruebas pasan.
- 2. Ejecuta npm run auditar y conserva el fallo inicial esperado.
- 3. Entrega a Codex el encargo acotado de la lección.
- 4. Ejecuta de nuevo pruebas y auditoría sin modificar la suite.
- 5. Lee git diff --numstat y el diff completo; justifica cada eliminación.
Encargo listo para Codex
Objetivo: reduce la redundancia de src/tasks.mjs sin cambiar comportamiento. Lee AGENTS.md y las pruebas. Modifica solo src/tasks.mjs; no cambies tests ni package.json; no añadas dependencias o abstracciones. Termina solo cuando npm test y npm run auditar pasen. Revisa el diff, explica cada eliminación y señala riesgos.
Resultado esperado
Tres funciones públicas, las mismas salidas, tres pruebas verdes y una auditoría estructural superada.
Comando de verificación
npm test && npm run auditar && git diff --numstat -- src/tasks.mjs
Comprobación manual
Comprueba que solo cambió src/tasks.mjs, que no se debilitaron pruebas y que el resultado es más legible, no solo más corto.
Mini ejercicio
Añade primero una prueba para owner vacío y repite la refactorización; decide si el valor por defecto pertenece a createTask o normalizeText.
Ver solución
Conserva normalizeText, createTask y formatTask. Llama directamente a normalizeText desde createTask y retira los tres wrappers sin consumidores.
Evidencia que debes guardar
Guarda salidas antes y después, el fallo inicial de auditoría, el diff numérico, el diff completo y una explicación de las tres eliminaciones.
Fuentes oficiales y versión probada
Si has guardado la evidencia de esta lección, continúa con «Controla permisos, red y secretos». Si no, repite la comprobación antes de avanzar.