Mistral ha completado la migración de 40.000 líneas de código heredado, escritas en el lenguaje Fortran 77, a C++ para un operador energético europeo. El proyecto se centró en un simulador de yacimientos con una alta carga de cálculos físicos que carecía de documentación centralizada y de un conjunto de pruebas (test suite) que permitiera validar su funcionamiento. Esta operación representa el primer sprint de un proyecto más amplio que abarca un total de 300.000 líneas de código.
Limitaciones técnicas de Fortran 77 y refactorización a C++
El desafío técnico radicaba en la naturaleza del lenguaje Fortran 77, estandarizado en 1977, cuyas limitaciones estructurales dificultan la traducción directa. Este lenguaje utiliza bloques COMMON, que actúan como memoria global compartida en todo el programa, y carece de módulos, espacios de nombres (namespaces) o tipos estructurados. Además, Fortran 77 emplea un tipado implícito basado en la letra inicial de la variable, lo que significa que un error tipográfico en el nombre de una variable no genera un error de compilación, sino que crea una nueva variable silenciosamente. Asimismo, la longitud de los nombres de las variables estaba limitada a seis caracteres, lo que resultaba en un código críptico y difícil de mantener.
Para resolver estos problemas, Mistral no se limitó a una traducción sintáctica —tarea que considera ya resuelta por los modelos de lenguaje actuales—, sino que ejecutó una refactorización arquitectónica. Mientras que Fortran 77 es un lenguaje procedimental, C++ permite un enfoque orientado a objetos. Esto permitió sustituir los arrays dispersos de los bloques COMMON por parámetros específicos, como el objeto GasProperties, y desplazar los bucles de rejilla hacia el llamador, eliminando la correspondencia línea a línea y mejorando la eficiencia del sistema.
Validación mediante arnés de paridad numérica
Antes de iniciar la migración, el equipo implementó un arnés de paridad (parity harness). Este sistema fue diseñado para garantizar que el código migrado coincidiera numéricamente con el original. La paridad numérica se definió como la igualdad exacta de los resultados finales y de puntos intermedios críticos identificados por los ingenieros de yacimientos del cliente. Para lograrlo, se insertaron subrutinas en el código Fortran para exportar instantáneas del estado del sistema y se creó un marco de pruebas en C++ capaz de cargar estos puntos de control y verificar la corrección de los módulos migrados.
Documentación automatizada con agentes de IA y OCR
La gestión de la documentación fue otro pilar fundamental. La información del simulador estaba dispersa en archivos PDF antiguos y comentarios internos en el código. Mistral utilizó un analizador personalizado para generar un árbol de llamadas (caller-callee tree) que representara todo el programa. Posteriormente, emplearon la herramienta Vibe CLI para desplegar más de cien agentes de IA. Estos agentes, apoyados por Mistral OCR para leer los PDF, documentaron cada nodo del árbol desde las hojas hacia arriba, abriendo solicitudes de cambio (pull requests) en el repositorio original.
Para supervisar este proceso, se implementó un agente revisor que funcionaba mediante un cron (programador de tareas), detectando nuevas solicitudes de cambio, revisándolas y asignando tareas de corrección cuando era necesario. Este flujo de trabajo permitió rescatar el conocimiento técnico embebido en el código, el cual se vuelve irrecuperable cuando los autores originales del software abandonan la empresa.
Evolución de la metodología de migración y autonomía de agentes
En cuanto a la metodología de migración, Mistral experimentó con tres niveles de autonomía de los agentes. En el primer intento, se otorgó autonomía total: un agente por subrutina de Fortran traduciendo la función a C++ de forma independiente. El resultado fue funcional pero no modernizado; el código mantenía la estructura de Fortran, conservando los bloques COMMON como estructuras globales y el flujo de control basado en instrucciones GOTO en lugar de bucles o retornos anticipados.
En el segundo intento, se sustituyó la autonomía individual por una estructura de equipo de agentes: un planificador, un codificador, un evaluador y un revisor de calidad. Aunque la calidad del código mejoró sustancialmente, los agentes se bloqueaban al encontrar errores complejos sin capacidad de resolución autónoma. Finalmente, se adoptó un modelo híbrido donde un humano opera un flujo de trabajo compuesto por agentes de codificación, prueba y revisión, migrando el sistema módulo por módulo.
Este flujo de trabajo estructurado comienza con la generación de la arquitectura de destino en C++, que es revisada y aprobada por un ingeniero de yacimientos. Una vez aprobada, la arquitectura se divide en una cola de tareas que siguen un ciclo de planificación, implementación y prueba. Un humano revisa las solicitudes de cambio resultantes antes de integrarlas en la rama principal. Los módulos se definieron como subárboles independientes del árbol de llamadas, con un tamaño máximo empírico de 10.000 líneas de Fortran.
Integración de bibliotecas científicas y principios de modernización
La integración de marcos de computación científica modernos, como PetSc (una biblioteca para la resolución de ecuaciones diferenciales parciales a gran escala), fue uno de los objetivos clave de la migración. El paso a C++ permite que el operador energético europeo aproveche ecosistemas de desarrollo activos, evitando el aislamiento tecnológico que supone mantener sistemas en lenguajes sin desarrolladores disponibles en el mercado actual.
Mistral concluye que la modernización de sistemas complejos requiere tres principios fundamentales. Primero, la construcción del arnés de paridad antes de escribir cualquier código de migración, ya que la concordancia numérica es la prueba más económica y convincente de éxito. Segundo, la organización de la documentación antes de emplear agentes, puesto que es imposible migrar código que nadie puede leer. Tercero, el uso de flujos de trabajo estructurados con puertas de revisión humana, que resultan más eficaces que la autonomía total o la intervención manual exhaustiva.
Limitaciones del modelo y aplicaciones en infraestructuras críticas
El éxito de este proyecto se basó en que el código Fortran era autocontenido y ejecutable. Mistral advierte que existen incertidumbres y desafíos adicionales en migraciones que dependen de sistemas externos, que carecen de una base ejecutable para comparativas o que contienen física compleja no documentada en ninguna parte, situaciones que podrían complicar la aplicación de este modelo de agentes.
Para los desarrolladores y empresas de sectores críticos, este caso demuestra que la IA puede ir más allá de la simple traducción de sintaxis. La capacidad de refactorizar la arquitectura de un software mientras se mantiene la integridad numérica permite actualizar infraestructuras críticas sin riesgo de introducir errores de cálculo en simulaciones físicas sensibles.
