


Editar un generador de documentos con agentes de IA sin confundir su pila actual y la heredada
Úsalo cuando una IA cambie una app multiagente que genera documentos y conserva una pila antigua. Busca el comando de inicio real, prefiere el código a documentos viejos, no cambia nombres de configuración, sigue los cambios entre Python y Node y hace las pruebas mínimas útiles.
Para usar estas reglas de IA
## Buscar primero en el código los comandos de inicio y la configuración reales
Empieza por los metadatos del paquete, los puntos de entrada de consola, los cargadores de configuración, el manejo de variables de entorno y el código que crea espacios de trabajo durante la ejecución. Cuando entran en conflicto con la documentación, estos elementos ejecutables tienen prioridad.
- Confirma qué comando inicia la aplicación principal.
- Confirma qué comando expone cualquier servicio heredado o compatible con MCP.
- Sigue cada comando hasta su módulo y función reales.
- Localiza las plantillas de configuración y el comportamiento predeterminado del espacio de trabajo.
- Verifica que todas las rutas mencionadas existan en la copia de trabajo actual.
Trata cualquier descripción general obsoleta como contexto histórico, no como prueba de la ruta de inicio actual.
## Decidir si el cambio corresponde a la pila actual o a la heredada
Un repositorio puede distribuir una pila de producto actual junto con una biblioteca de una generación anterior que aún presta servicio a un punto de acceso especializado. Antes de editar, identifica qué pila es responsable.
La pila actual puede ser responsable de:
- la interfaz de línea de comandos y el flujo de incorporación;
- la orquestación y la ejecución multiagente;
- los agentes de investigación, generación y diseño;
- las herramientas al estilo MCP para búsqueda, reflexión, conversión y gestión de tareas;
- las utilidades de configuración, registro y espacios de trabajo;
- la conversión de HTML mediante navegador y un módulo auxiliar de Node;
- las pruebas orientadas a la integración.
La pila heredada puede seguir siendo responsable de la generación basada en plantillas, la inducción de diseños, el análisis, la evaluación y un servidor de compatibilidad. No supongas que cambiar un concepto compartido en una pila actualiza la otra.
## Mantener un diseño simple con menos casos especiales y funciones cortas
Prefiere diseños que conviertan los casos límite en casos normales, en lugar de acumular ramas condicionales. Resuelve el problema real del repositorio, no un problema de arquitectura hipotético.
- Elige una solución directa y operativamente ligera cuando satisfaga el requisito real.
- Mantén las funciones cortas, enfocadas y con nombres claros.
- Trata la complejidad innecesaria como un defecto.
- Más de 3 niveles de sangría indican que se debe reestructurar el código.
- No ocultes el flujo de control normal dentro de manejadores de excepciones amplios sin un modo de fallo concreto.
- Mantén las críticas en el plano técnico y dirígelas al código, el diseño o los supuestos, no a las personas.
El buen criterio se manifiesta en menos casos especiales, superficies más pequeñas y comportamientos fáciles de verificar.
## Añadir anotaciones de tipo y reducir las dependencias al mínimo
Aplica convenciones coherentes en toda la pila mantenida:
- añade anotaciones de tipo a las funciones y los métodos;
- redacta la documentación técnica y los comentarios del código en el idioma definido por el repositorio;
- usa el gestor de dependencias, las herramientas de búsqueda del repositorio, las funciones del lenguaje y las API de biblioteca compatibles que estén vigentes;
- prefiere las interfaces actuales de serialización y validación a las formas obsoletas;
- reduce al mínimo las dependencias y la cantidad total de código;
- mantén la definición del paquete raíz centrada en el producto principal;
- coloca las dependencias de los subproyectos realmente aislados en sus archivos de dependencias locales.
No traslades una dependencia solo por orden. Sepárala únicamente cuando exista una frontera real de ejecución y mantenimiento.
## Seguir un cambio por todas las partes conectadas, incluidos Python y Node
Examina toda la ruta responsable del comportamiento que se va a cambiar:
- para el comportamiento de línea de comandos, examina en conjunto las definiciones de comandos, los módulos auxiliares compartidos y la carga de configuración;
- para la orquestación, examina el coordinador principal y la implementación del agente pertinente;
- para el comportamiento de MCP, decide si la responsabilidad corresponde a los servidores de herramientas actuales o al servidor de compatibilidad heredado;
- para la exportación y la conversión, examina tanto el lado de orquestación en Python como el lado de conversión en Node;
- para los conceptos de generación duplicados, cambia solo la pila responsable, a menos que la tarea abarque explícitamente ambas.
Mantén acotado el cambio. No refactorices ambas pilas solo porque aparezcan nombres parecidos en cada una.
## Conservar los nombres de configuración y las ubicaciones de workspace existentes
Las claves de configuración, las variables de entorno, el comportamiento de incorporación, las configuraciones de ejemplo y las ubicaciones de los espacios de trabajo existentes forman un contrato de ejecución. Conserva sus nombres salvo que la tarea incluya explícitamente una migración.
Las dependencias de navegador y contenedor pueden ser requisitos normales de ejecución para las rutas de conversión, y no extras opcionales de desarrollo. Las herramientas de conversión nativas, las credenciales de modelos, la automatización del navegador y las imágenes de contenedor también pueden determinar qué pruebas de integración se pueden ejecutar.
Al cambiar una ruta de ejecución:
1. Identifica todas las fuentes de configuración y los valores predeterminados.
2. Sigue cómo el proceso de incorporación y los ejemplos rellenan esos valores.
3. Comprueba el componente que realiza la llamada en Python y cualquier módulo auxiliar de conversión externo.
4. Conserva la compatibilidad o proporciona una ruta de migración explícita.
## Comprobar los documentos viejos con el código y clasificar las pruebas por lo que necesitan
Antes de confiar en lo que afirma la documentación, contrástalo con el árbol de archivos actual y los puntos de entrada ejecutables. Los documentos antiguos pueden seguir explicando conceptos útiles aunque mencionen archivos eliminados o flujos de inicio obsoletos.
Clasifica las pruebas según sus requisitos:
- pruebas unitarias para lógica aislada;
- pruebas de analizadores o pruebas marcadas para rutas de datos especializadas;
- pruebas de integración para herramientas de entorno aislado, conversión mediante navegador o a PDF, procesamiento de imágenes y utilidades externas;
- pruebas respaldadas por modelos que requieren credenciales o servicios en red.
La ausencia de un navegador, una imagen de contenedor, un conversor nativo o credenciales de modelos es una limitación de la validación, no una prueba de que un código ajeno esté roto.
## Ejecutar las pruebas mínimas útiles e informar lo que no se pudo ejecutar
Sigue una secuencia de cambios bien acotada:
1. Confirma qué pila y qué punto de entrada son responsables del comportamiento.
2. Edita la superficie completa más pequeña.
3. Ejecuta el subconjunto de pruebas significativo más reducido.
4. Amplía el alcance únicamente a rutas de Python, Node, navegador, contenedor o compatibilidad que estén acopladas directamente.
5. Informa de cualquier dependencia o requisito del entorno que haya impedido la validación.
Revisa las diferencias finales para detectar cambios accidentales en la otra pila, contratos de configuración renombrados, referencias a documentación obsoleta, refactorizaciones ajenas y fronteras multilingües sin probar.
Informa de qué cambió, qué ruta se ejercitó, qué comprobaciones se superaron y cuáles no pudieron ejecutarse. No afirmes que la validación está completa cuando no esté disponible una dependencia necesaria para la ejecución.
