Inteligência de modernização COBOL
A maioria dos projetos de modernização fracassa porque as ferramentas leem o código como texto, não como topologia. O CodeGraph parseia o seu patrimônio de mainframe em um grafo de conhecimento tipado e resolve o fecho transitivo completo de dependências de uma mudança, atravessando copybooks, REDEFINES, COMP-3, DB2 e JCL, com proveniência arquivo:linha em cada aresta e uma prova de quanto conseguiu resolver. O mapa é o produto. A tradução é um caso de uso a jusante.
9/9 vs 3/9
Dependências recuperadas: grafo vs janela de arquivo único
No fixture TRN-LIMIT, contra um conjunto de verdade de referência conhecido
97.1%
Referências resolvidas (33 de 34), 1 sinalizada para revisão
Portão de completude determinístico, o mesmo resultado a cada execução
47 / 70
Nós e arestas em 7 tipos de nó
O fixture bancário sintético enviado
Esta é uma demonstração executável. O patrimônio é sintético e elaborado para a demonstração, o grafo está em memória mais SQLite, e as visões de DB2, JCL e de arquivo único ingênuo são fixtures de arquivo e simulações, não conectores ao vivo.
O modo de falha é a cegueira contextual, e um modelo maior não a remove.
70 to 80% dos projetos de modernização de mainframe fracassam em atingir seus objetivos (meta-análise do setor, 2025). Não porque a tradução esteja errada, mas porque as ferramentas tratam o código como texto em vez de topologia. Um tradutor commodity lê o único arquivo que consegue ver. O fato que realmente importa é invisível em uma janela de contexto de arquivo único.
Os riscos não são acadêmicos. Cerca de 220 bilhões de linhas de COBOL ainda rodam em produção, sustentando cerca de 95% das transações em ATM, 43% dos sistemas bancários e 3 trilhões de dólares de atividade por dia (Reuters, 2017), contra uma dívida técnica acumulada dos EUA estimada em 1.52 trilhão de dólares (CISQ, 2022). Este é o núcleo da pilha bancária e de seguros, e é exatamente o código que ninguém quer tocar às cegas.
A parábola concreta é um programa de transferência eletrônica que calcula sobre um campo chamado TRN-LIMIT. No único arquivo que um tradutor consegue ver, a aritmética parece trivial. Mas TRN-LIMIT é um decimal compactado COMP-3 definido a três copybooks de distância, sua interpretação é escolhida por um flag definido em um programa diferente, e esse flag é gravado por um job batch JCL às 2h da manhã que roda antes do job de transferência. Com apenas os fatos visíveis, um modelo emite um long simples, o Java compila, passa nos testes unitários e então corrompe o banco de dados na primeira transferência eletrônica ao vivo. Essa falha de integridade referencial aparece no UAT. A falha foi cegueira contextual.
Isso não desaparece à medida que os modelos melhoram. Um patrimônio real tem de 1 a 10 milhões de linhas ou mais e não cabe em nenhuma janela de contexto, presente ou futura. A parte difícil é recuperar exatamente a fatia transitiva que uma mudança toca e provar que você encontrou tudo. Isso é um problema de topologia, recuperação e evidência, não um problema de qualidade de raciocínio. Agentes aconselham, o código decide.
Faça o parse do patrimônio em um grafo tipado e então execute análises determinísticas. Nenhum LLM fica no caminho crítico.
O pipeline executa o patrimônio fixture, depois o parse (COBOL, copybooks, JCL, DB2 DDL), depois constrói um grafo de conhecimento tipado, depois o impacto de fecho transitivo mais proveniência, depois as análises determinísticas, depois uma auditoria e a exportação de evidências, depois o painel interativo. No carregamento, o aplicativo executa isso ao vivo via Server-Sent Events, de modo que cada estágio narra com sua latência real medida em um console, os painéis se preenchem progressivamente, e um trilho persistente de estágios permite abrir o rastreio de Entrada, Processamento e Saída de qualquer estágio. Um único controle reproduz a execução inteira.
Construído com networkx e mantido em memória mais SQLite, o grafo tem sete tipos de nó (programa, copybook, variável, tabela, jcl, dataset e um placeholder não resolvido) e arestas tipadas como DEFINES, IMPORTS, REDEFINES, CONTROLS_TYPE_OF, WRITES_VAR, REFERENCES, CALLS, READS e WRITES, EXECUTES, USES_DATASET e PRECEDES. No fixture enviado o grafo tem 47 nós e 70 arestas: 14 programas, 5 copybooks, 17 variáveis, 3 tabelas DB2, 3 jobs JCL, 4 datasets e 1 nó não resolvido.
São algoritmos de grafo simples, não chamadas a modelo, então o mesmo fixture produz o mesmo resultado a cada execução.
A fatia de dependência transitiva de uma mudança, com cada aresta carregando sua origem arquivo:linha, para que você veja não só o que é afetado, mas onde a evidência vive.
O fecho do grafo pontuado contra o conjunto de verdade de referência conhecido do fixture, versus uma janela simulada de arquivo único, que é o que uma ferramenta baseada em texto realmente alimenta a um modelo.
Uma pontuação de acoplamento e raio de impacto por programa (acoplamento ponderado três, armadilhas COMP-3 ponderadas dois, criticidade JCL ponderada dois, calls não resolvidos ponderados cinco) que ranqueia uma ordem segura de migração por figueira-estranguladora.
Todo PERFORM, CALL, COPY e referência DB2 deve resolver ou ser sinalizado como precisa de revisão, nunca descartado em silêncio. Parágrafos inalcançáveis são relatados como ilustração, não pontuados como métrica de destaque.
Um único seletor torna a diferença tangível. Marque a visão de contexto de IA ingênua e o grafo se reduz ao arquivo-fonte único com algumas linhas de contexto. Seis dos nove fatos da transferência eletrônica desaparecem, um banner vermelho declara a consequência, e voltar restaura 9/9 com comprovantes. Esse seletor é uma ilustração do que a camada de recuperação precisa fornecer, não a fonte de valor.
Quando você termina, Export JSON grava um arquivo migration-evidence.json, e Evidence report renderiza um Relatório de Topologia e Completude da Base de Código imprimível: o resumo de nós e arestas, os fechos por módulo com proveniência arquivo:linha, o resultado e o método de recall, a sequência de extração ranqueada, a lista de código morto e um carimbo de data/hora. Posicionamos isso como um inventário de ativos de TIC da DORA e um comprovante de controle de mudanças SOC-2. Uma camada opcional Pydantic-AI pode responder perguntas sobre o fecho, mas está desligada por padrão e protegida por chave, e a demonstração determinística registra o resultado sem nenhuma chave.
Uma mudança em um campo, resolvida contra um conjunto de verdade de referência conhecido. Cada imagem abaixo é uma captura de tela do aplicativo em execução.
A visão padrão abre no subsistema de transferência eletrônica com TRN-LIMIT selecionado. O painel de impacto mostra a recuperação pelo grafo em 9/9 (100%) contra um contexto ingênuo de arquivo único de 3/9 (33%), pontuado contra o conjunto de verdade de referência conhecido do fixture. Três fatos são visíveis no único arquivo: WIRETXN usa TRN-LIMIT em um COMPUTE (WIRETXN.cbl:33), o copybook CBACCT é importado pelo nome (WIRETXN.cbl:13), e ocorre um UPDATE na tabela DB2 ACCOUNTS (WIRETXN.cbl:37). Os seis que decidem a correção não estão: TRN-LIMIT é um decimal compactado PIC S9(9)V99 COMP-3 que deve se tornar um BigDecimal e não um long (CBACCT.cpy:11), TRN-LIMIT-ALPHA o REDEFINES como texto sobre os mesmos seis bytes (CBACCT.cpy:12), LIMIT-TYPE-FLAG decide qual interpretação está ativa (CBACCT.cpy:13), dois programas (LIMITSET e BATCHUPD) gravam esse flag, e o job JCL NIGHTLY às 02:00 roda antes de WIREJOB para que o flag esteja definido antes de a transferência rodar.
Marque a visão de contexto de IA ingênua e o grafo se reduz ao que vive dentro de WIRETXN.cbl. O tipo COMP-3, a sobreposição REDEFINES, o flag de controle, seus dois gravadores entre módulos e o predecessor JCL às 02:00 todos ficam acinzentados, e um banner vermelho declara a consequência: com apenas os três fatos visíveis, um modelo emite um TRN_LIMIT long simples e grava bytes corrompidos em ACCOUNTS.TRN_LIMIT, que é a falha de UAT. Esta é exatamente a lacuna de cegueira contextual que uma ferramenta de janela de texto estruturalmente não consegue fechar, tornada visível em um clique.
A visão de extração ranqueia todos os 14 programas por uma pontuação de acoplamento e raio de impacto. AUDITLOG é a primeira extração segura no posto 1 com pontuação de risco 0 e acoplamento zero. WIRETXN fica no posto 11 (risco 4, uma armadilha COMP-3 mais criticidade JCL). DISPATCH fica no posto 12 (risco 5) pelo seu CALL dinâmico não resolvido, e o programa-deus ACCTMGR extrai por último no posto 14 (acoplamento 5, risco 15). Essa é uma ordem de figueira-estranguladora que você pode defender, menor risco primeiro, maior acoplamento por último.
A aba de auditoria relata 97.1% das referências resolvidas, que é 33 de 34, com exatamente uma sinalizada para revisão e não descartada em silêncio. Essa uma é o CALL dinâmico WS-PROGNAME do DISPATCH, cujo alvo é computado em tempo de execução (DISPATCH.cbl:15) e portanto não pode ser resolvido estaticamente. A aba também lista código morto por alcançabilidade: o parágrafo LEGACY-FORMAT do AUDITLOG e o parágrafo OLD-LIMIT-CHECK do WIRETXN são inalcançáveis. Recusar-se a forjar uma resolução é o comportamento honesto, e é o comportamento que um regulador quer ver.
Tudo acima é exportado para um Relatório de Topologia e Completude da Base de Código imprimível: o resumo de 47 nós e 70 arestas, a cobertura de 97.1%, os nove fatos de dependência de TRN-LIMIT com sua visibilidade em arquivo único e proveniência arquivo:linha, a sequência de extração ranqueada e um carimbo de data/hora de geração. Como o patrimônio é sintético e elaborado, o conjunto verdadeiro de dependências é conhecido por construção, o que torna a figura de recall uma medição rotulada reproduzível em vez de uma alegação. Atribuímos 9/9, 3/9 e 97.1% a este fixture enviado, nunca como garantia de mundo aberto sobre patrimônios COBOL arbitrários.
O mesmo seletor que a demonstração compara, lado a lado, no fixture de transferência eletrônica.
| Dimensão | Janela de contexto de arquivo único | Grafo de conhecimento CodeGraph |
|---|---|---|
| Dependências TRN-LIMIT recuperadas | 3 de 9 | 9 de 9, contra um conjunto de verdade de referência conhecido |
| Tipo COMP-3 entre copybooks | Invisível | Resolvido com proveniência arquivo:linha |
| Sobreposição REDEFINES e flag de controle | Invisível | Resolvido, incluindo gravadores entre módulos |
| Aresta de ordenação só-JCL (NIGHTLY antes de WIREJOB) | Invisível | Modelada como uma aresta PRECEDES |
| Prova de completude | Nenhuma | 97.1% resolvido, não resolvido sinalizado para revisão |
| Ordem segura de extração | Nenhuma | Ranqueada por acoplamento e raio de impacto |
| Artefato de auditoria | Nenhum | Relatório exportável de topologia e completude |
Não. O CodeGraph é a camada de entendimento, não um tradutor, e deliberadamente não cola COBOL e emite Java. Ele constrói um grafo de dependências tipado do seu patrimônio e resolve exatamente a fatia transitiva que uma mudança toca, com proveniência arquivo:linha e uma prova de completude. A tradução é um caso de uso a jusante, e toda ferramenta de tradução ainda precisa deste mapa para saber o que uma mudança realmente toca.
Não, e esse é o ponto durável. Um patrimônio real tem de 1 a 10 milhões de linhas ou mais e não cabe em nenhuma janela de contexto, presente ou futura. A parte difícil é recuperar exatamente a fatia transitiva e provar que você encontrou tudo, o que é um problema de topologia, recuperação e evidência, não um problema de qualidade de raciocínio. Um modelo perfeito ainda não consegue provar a um regulador quais dependências foram recuperadas, ainda precisa de uma ordem segura de extração e ainda precisa apresentar um inventário de ativos de TIC.
O portão de completude exige que todo PERFORM, CALL, COPY e referência DB2 ou se resolva ou seja sinalizado para revisão, nunca descartado em silêncio. No fixture enviado isso é 33 de 34 referências resolvidas, que é cobertura de 97.1%, com a única referência irresolvível sinalizada. Você pode exportar um Relatório de Topologia e Completude da Base de Código imprimível com o resumo de nós e arestas, os fechos por módulo com proveniência arquivo:linha, o resultado e o método de recall, a sequência de extração ranqueada e a lista de código morto, posicionado como um inventário de ativos de TIC da DORA e um comprovante de controle de mudanças SOC-2.
Ela é sinalizada para revisão, não descartada em silêncio, e esse comportamento de honestidade é o ponto. No fixture a única referência irresolvível é o CALL dinâmico WS-PROGNAME do DISPATCH, cujo alvo é computado em tempo de execução (DISPATCH.cbl:15), então não pode ser resolvido estaticamente. O CodeGraph a registra como precisa de revisão e ranqueia o DISPATCH perto do fim da ordem segura de extração exatamente por esse motivo.
Não nesta demonstração. O grafo está em memória mais SQLite, e as entradas de DB2, JCL e do agendador são fixtures de arquivo, enquanto a visão ingênua de arquivo único é uma janela de contexto simulada. Uma implantação em produção nomearia uma plataforma de grafo como Neo4j ou Memgraph e leria o seu patrimônio real, mas nada aqui implica um pipeline z/OS ao vivo. A demonstração comprova o mecanismo em um patrimônio sintético, não uma implantação.
Não reivindicamos superar o parser da IBM ou de um integrador de sistemas, e o parser da demonstração cobre um subconjunto sintético realista de COBOL, não todo dialeto, ALTER ou OCCURS DEPENDING ON. A distinção é o entregável: um grafo de conhecimento consciente do repositório mais uma prova de completude e uma ordem segura de extração, em vez de uma tradução por arquivo. É a camada de entendimento de que qualquer esforço de tradução precisa primeiro, e é a camada que um modelo-base melhor não remove.
É uma demonstração executável que comprova o mecanismo, não um pipeline implantado. O patrimônio do banco é sintético e elaborado para esta demonstração, então o conjunto verdadeiro de dependências é conhecido por construção, o que torna a métrica de recall uma medição rotulada reproduzível em vez de uma alegação. O parse, o grafo e as quatro análises são Python puro determinístico (FastAPI mais networkx, UI Cytoscape.js) que rodam sem chave de API e sem banco de dados. Existe uma camada LLM opcional para perguntas e respostas, mas está desligada por padrão, e o valor não depende dela.
A pesquisa por trás desta demonstração — a arquitetura, o desenho de verificação e o blueprint empresarial.
Solução completa
Explore a solução de Modernização COBOL Legado →A camada de entendimento é a parte difícil. Nós construímos o mapa primeiro.
Se a sua equipe está avaliando como modernizar um patrimônio COBOL sem uma surpresa de UAT vinda de uma dependência que ninguém conseguia ver, gostaríamos genuinamente de ouvir como vocês estão pensando nisso. O problema é de todo o setor e as respostas também serão.