Inteligência de modernização COBOL

Construímos o mapa da sua base de código antes de tocar em uma única linha.

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.

A modernização fracassa no entendimento, não na tradução

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.

Como o CodeGraph funciona

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.

A interface do CodeGraph executando seu pipeline de análise ao vivo sobre o programa WIRETXN, com a latência por estágio mostrada no console: varrer, parsear, construir grafo, fecho de impacto, recuperar fatos, e planejar e auditar.
O pipeline ao vivo: varrer, parsear, construir grafo, fecho de impacto, recuperar fatos, e planejar e auditar, cada estágio com sua latência real medida.

O grafo de conhecimento tipado

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.

Quatro análises determinísticas

São algoritmos de grafo simples, não chamadas a modelo, então o mesmo fixture produz o mesmo resultado a cada execução.

1. Fecho de impacto com proveniência

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.

2. Recall ingênuo versus recall do grafo

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.

3. Sequenciamento de extração

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.

4. Alcançabilidade de código morto e portão de completude

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.

O fecho TRN-LIMIT da transferência eletrônica, percorrido de ponta a ponta

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.

Nove fatos, e seis que um único arquivo não consegue ver

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.

O painel de impacto de TRN-LIMIT: recuperação pelo grafo 9/9 versus arquivo único ingênuo 3/9, com os fatos F1 a F3 marcados como no arquivo e F4 a F9 marcados como ocultos e críticos ou altos, cada um carregando sua proveniência arquivo:linha.
Recuperação pelo grafo 9/9 versus arquivo único ingênuo 3/9. Os três fatos visíveis estão no arquivo; os seis que decidem o tipo estão ocultos de uma visão de arquivo único, cada um com proveniência arquivo:linha.

O momento decisivo: mude para uma janela de arquivo único e veja seis fatos desaparecerem

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 contexto de arquivo único ingênuo: um banner vermelho explica que apenas 3 de 9 fatos vivem dentro de WIRETXN.cbl, e os fatos F4 a F9 estão acinzentados, incluindo o tipo COMP-3, a sobreposição REDEFINES, o flag de controle e o predecessor JCL às 02:00.
A visão ingênua de arquivo único: seis fatos se apagam e um banner vermelho declara a falha de produção resultante. Volte e 9/9 retorna com comprovantes.

Uma ordem segura de extração, ranqueada por raio de impacto

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 tabela de sequência de extração ranqueando 14 programas por acoplamento, armadilhas COMP-3, criticidade JCL e pontuação de risco, com AUDITLOG primeiro em risco 0 e o programa-deus ACCTMGR por último em risco 15, ao lado de uma visão de diff legado-para-modernizado.
A ordem de figueira-estranguladora: AUDITLOG primeiro em risco 0, ACCTMGR por último em risco 15, com o motivo de cada posto mostrado nas colunas de acoplamento, armadilhas e JCL.

Um portão de completude que sinaliza o que não consegue resolver

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.

A aba de auditoria mostrando 97.1% das referências resolvidas e 1 sinalizada para revisão, com o CALL dinâmico WS-PROGNAME do DISPATCH destacado como sinalizado e não descartado em silêncio, e uma lista de código morto nomeando AUDITLOG LEGACY-FORMAT e WIRETXN OLD-LIMIT-CHECK.
97.1% resolvido, 1 sinalizado. O CALL dinâmico irresolvível é marcado para revisão, não descartado, e a lista de código morto é relatada ao lado.

Um artefato de auditoria exportável

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 Relatório de Topologia e Completude da Base de Código imprimível mostrando 47 nós, 70 arestas, 97.1% das referências resolvidas, os fatos de dependência F1 a F9 de TRN-LIMIT com visibilidade em arquivo único e proveniência, e a sequência de extração por figueira-estranguladora.
O Relatório de Topologia e Completude da Base de Código exportável: resumo de nós e arestas, os nove fatos de dependência com proveniência, e a sequência de extração ranqueada, posicionado como um inventário de ativos de TIC da DORA.

Uma janela de contexto de arquivo único versus o grafo

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

O que esta demonstração não faz

  • ✓ Ela não traduz COBOL para Java. O CodeGraph é a camada de entendimento, o mapa. A tradução é um caso de uso a jusante que ela deliberadamente não executa.
  • ✓ Ela não usa conectores ao vivo. O grafo está em memória mais SQLite, as entradas de DB2, JCL e do agendador são fixtures de arquivo, e a visão ingênua de arquivo único é uma janela de contexto simulada. Neo4j ou Memgraph é o caminho de produção nomeado, não enviado aqui.
  • ✓ Ela não apresenta o banco, seus programas ou quaisquer números como a base de código de um cliente real. O patrimônio é sintético e elaborado para esta demonstração. Não há estudo de caso e nenhum resultado de implantação.
  • ✓ Ela não reivindica cobertura completa do dialeto IBM Enterprise COBOL. O parser cobre um subconjunto sintético realista, não todo dialeto, ALTER ou OCCURS DEPENDING ON, e não reivindica superar o parser de nenhum fornecedor.
  • ✓ Ela não apresenta 9/9, 3/9 ou 97.1% como garantias de mundo aberto. São medições no fixture sintético de transferência eletrônica enviado, cujo conjunto de verdade de referência é conhecido por construção.
  • ✓ Ela não traz clientes, estudos de caso, depoimentos ou cifras de ROI. Nenhum existe ainda. Esta é uma demonstração que comprova o mecanismo.

Perguntas que os compradores realmente fazem

Isto é um tradutor de COBOL para Java?

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.

Uma janela de contexto maior ou um modelo melhor simplesmente não resolveria isso?

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.

Como você prova a um auditor que encontrou cada dependência?

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.

O que acontece com uma dependência que você não consegue resolver, como um CALL dinâmico?

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.

Isto se conecta ao nosso mainframe, DB2 ou agendador z/OS?

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.

Como isso é diferente do IBM watsonx Code Assistant ou da cadeia de ferramentas de uma grande SI?

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.

Isto é um produto ao vivo ou uma demonstração?

É 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.

Pesquisa técnica

A pesquisa por trás desta demonstração — a arquitetura, o desenho de verificação e o blueprint empresarial.

Planejando uma modernização de mainframe?

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.

Avaliação de topologia

  • ✓ Mapear até onde uma mudança pode alcançar através de copybooks, DB2 e JCL
  • ✓ Resolver o fecho transitivo com proveniência arquivo:linha
  • ✓ Pontuar o recall da recuperação de dependências contra um conjunto de verdade de referência
  • ✓ Produzir a prova de completude de que seus auditores precisam

Construir o mapa

  • ✓ Um grafo de conhecimento tipado sobre o seu patrimônio real
  • ✓ Um portão de completude que sinaliza o que não consegue resolver
  • ✓ Uma ordem de extração por figueira-estranguladora ranqueada e defensável
  • ✓ Um relatório exportável de ativos de TIC da DORA e de controle de mudanças SOC-2
Redes sociais

Também publicado em