Mistral usa agentes de IA para migrar 40 mil linhas de Fortran 77 para C++

Em 9 de setembro, a Mistral publicou um retrospecto de projeto contando como usou seus próprios agentes de IA para migrar o simulador de reservatório de uma operadora de energia europeia de Fortran 77 para C++. O código completo tem 300 mil linhas; desta vez foram mexidas 40 mil. No início do projeto praticamente não havia nada em mãos: nem suíte de testes, nem documentação reunida em um só lugar.

As dificuldades do Fortran 77 estão bem listadas no relatório: sem módulos, sem namespaces, sem tipos estruturados; o estado do programa fica em blocos COMMON, equivalente a uma memória global compartilhada por todo o programa; variáveis recebem tipo implícito pela primeira letra; nomes de variáveis limitados a 6 caracteres, o que torna a leitura quase um exercício de adivinhação.

A primeira tentativa foi entregar a tarefa inteira ao agente para rodar sozinho — levou uma semana e não deu certo. Depois, mudaram para uma abordagem com humano no loop, dividida por módulo, cada módulo distribuído entre quatro papéis: planejamento, escrita de código, testes e revisão de qualidade do código, seguindo o fluxo "planejar → implementar → testar → nova rodada". O papel principal do humano no loop era destravar o agente quando ele empacava.

Primeiro completar a documentação, depois mexer no código

A etapa de documentação foi feita colocando mais de cem agentes para rodar em paralelo via Vibe CLI. Cada agente podia puxar os PDFs relevantes para leitura através de uma biblioteca de documentos e do Mistral OCR — as premissas físicas em software industrial costumam estar registradas apenas em relatórios impressos ou digitalizados, e essa foi a parte que mais consumiu esforço num projeto sem documentação centralizada.

Para a divisão em módulos foi definido um limiar empírico: manter cada módulo de código Fortran em cerca de 10 mil linhas ou menos.

Usando a consistência numérica como critério de aceitação

O que sustentou este projeto foi um mecanismo de verificação cruzada. Ele tem três partes: um conjunto de sub-rotinas capazes de exportar o estado de execução da base de código Fortran, um framework de testes que carrega esses checkpoints em C++, e vários arquivos Skill.md que orientam os agentes a usar corretamente as duas primeiras partes.

O exemplo dado no relatório é bem concreto: o agente insere uma linha no código Fortran para imprimir o valor da variável RHOG; naquela execução, o valor foi 42,71834; em seguida, esse mesmo número é usado como checkpoint de referência para testar o módulo em C++ já migrado.

"Numerical agreement is the cheapest, most convincing proof that a module is done."

Os números baterem é a prova mais barata — e mais convincente — de que um módulo está pronto.

Para leitores em outros lugares, o ponto central talvez não esteja em qual modelo a Mistral usou. Em setores como energia elétrica, petróleo e gás, meteorologia e aviação, o código de cálculo central ainda tem uma quantidade enorme de Fortran das décadas de 1970 e 1980, também sem testes, sem documentação, com os autores originais já aposentados há muito tempo. Por mais de uma década, falar em "reescrever" costumava travar na aceitação: sem uma baseline, quem assina embaixo do código reescrito? A abordagem da Mistral transfere esse poder de assinatura para checkpoints numéricos — e esse passo não tem relação com qual agente de IA se usa; basta ter o código antigo executável para poder montar isso por conta própria.

As condições prévias também estão no relatório. A Mistral reconhece que as condições iniciais deste caso foram favoráveis: a base de código Fortran era autossuficiente e executável. O relatório original lista três categorias de casos que seriam claramente mais difíceis — código que depende de sistemas externos, casos sem uma baseline executável disponível, e casos em que as premissas físicas simplesmente não têm nenhum registro documental. Quanto mais rápido isso é em comparação com reescrever manualmente, o relatório não informa.

Fontes: blog oficial da Mistral, CocoLoop; número de linhas de código, limiar de divisão de módulos, distribuição de papéis dos agentes e o valor do checkpoint RHOG foram verificados a partir do retrospecto oficial.