Inteligencia de modernización COBOL

Construimos el mapa de su base de código antes de tocar una sola línea.

La mayoría de los proyectos de modernización fracasan porque las herramientas leen el código como texto, no como topología. CodeGraph analiza su patrimonio de mainframe en un grafo de conocimiento tipado y resuelve el cierre transitivo completo de dependencias de un cambio, a través de copybooks, REDEFINES, COMP-3, DB2 y JCL, con procedencia archivo:línea para cada arista y una prueba de cuánto pudo resolver. El mapa es el producto. La traducción es un caso de uso posterior.

9/9 vs 3/9

Dependencias recuperadas: grafo vs ventana de un solo archivo

En el fixture TRN-LIMIT, frente a un conjunto de verdad de referencia conocido

97.1%

Referencias resueltas (33 de 34), 1 marcada para revisión

Puerta de completitud determinista, el mismo resultado en cada ejecución

47 / 70

Nodos y aristas a través de 7 tipos de nodo

El fixture bancario sintético publicado

Esta es una demo ejecutable. El patrimonio es sintético y creado para la demo, el grafo está en memoria más SQLite, y las vistas de DB2, JCL y de un solo archivo ingenuo son fixtures de archivo y simulaciones, no conectores en vivo.

La modernización fracasa en la comprensión, no en la traducción

El modo de fallo es la ceguera contextual, y un modelo más grande no la elimina.

Entre el 70 y el 80 % de los proyectos de modernización de mainframe no cumplen sus objetivos (meta-análisis del sector, 2025). No porque la traducción sea incorrecta, sino porque las herramientas tratan el código como texto en lugar de topología. Un traductor genérico lee el único archivo que puede ver. El hecho que realmente importa es invisible en una ventana de contexto de un solo archivo.

Lo que está en juego no es académico. Unas 220 mil millones de líneas de COBOL siguen en producción, que transportan alrededor del 95 % de las transacciones de cajeros automáticos, el 43 % de los sistemas bancarios y 3 billones de dólares de actividad al día (Reuters, 2017), frente a una deuda técnica acumulada estimada de 1,52 billones de dólares en EE. UU. (CISQ, 2022). Este es el núcleo de la pila bancaria y de seguros, y es exactamente el código que nadie quiere tocar a ciegas.

La parábola concreta es un programa de transferencias electrónicas que calcula sobre un campo llamado TRN-LIMIT. En el único archivo que un traductor puede ver, la aritmética parece trivial. Pero TRN-LIMIT es un decimal empaquetado COMP-3 definido a tres copybooks de distancia, su interpretación la elige un indicador establecido en un programa distinto, y ese indicador lo escribe un trabajo por lotes JCL a las 2 a. m. que se ejecuta antes del trabajo de transferencias. Con solo los hechos visibles, un modelo emite un long simple, el Java compila, pasa las pruebas unitarias y luego corrompe la base de datos en la primera transferencia electrónica en vivo. Ese fallo de integridad referencial aparece en UAT. El fallo fue ceguera contextual.

Esto no desaparece a medida que mejoran los modelos. Un patrimonio real tiene de 1 a 10 millones de líneas o más y no cabe en ninguna ventana de contexto, presente o futura. Lo difícil es recuperar exactamente el corte transitivo que toca un cambio y demostrar que lo encontró todo. Eso es un problema de topología, recuperación y evidencia, no un problema de calidad de razonamiento. Los agentes aconsejan, el código decide.

Cómo funciona CodeGraph

Analice el patrimonio en un grafo tipado y luego ejecute análisis deterministas. Ningún LLM se sienta en el camino crítico.

El pipeline recorre el patrimonio fixture, luego el parse (COBOL, copybooks, JCL, DB2 DDL), luego construye un grafo de conocimiento tipado, luego el impacto por cierre transitivo más procedencia, luego los análisis deterministas, luego una auditoría y exportación de evidencia, luego el panel interactivo. Al cargar, la aplicación ejecuta esto en vivo sobre Server-Sent Events, de modo que cada etapa narra con su latencia real medida en una consola, los paneles se llenan de forma progresiva, y un riel persistente de etapas le permite abrir la traza de Entrada, Procesamiento y Salida de cualquier etapa. Un único control reproduce toda la ejecución.

La interfaz de CodeGraph ejecutando su pipeline de análisis en vivo sobre el programa WIRETXN, con la latencia por etapa mostrada en la consola: escaneo, parse, construcción del grafo, cierre de impacto, recuperación de hechos, y plan y auditoría.
El pipeline en vivo: escaneo, parse, construcción del grafo, cierre de impacto, recuperación de hechos, y plan y auditoría, cada etapa con su latencia real medida.

El grafo de conocimiento tipado

Construido con networkx y mantenido en memoria más SQLite, el grafo tiene siete tipos de nodo (programa, copybook, variable, tabla, jcl, dataset y un marcador de posición no resuelto) y aristas tipadas como DEFINES, IMPORTS, REDEFINES, CONTROLS_TYPE_OF, WRITES_VAR, REFERENCES, CALLS, READS y WRITES, EXECUTES, USES_DATASET y PRECEDES. En el fixture publicado el grafo tiene 47 nodos y 70 aristas: 14 programas, 5 copybooks, 17 variables, 3 tablas DB2, 3 trabajos JCL, 4 datasets y 1 nodo no resuelto.

Cuatro análisis deterministas

Estos son algoritmos de grafo simples, no llamadas a un modelo, de modo que el mismo fixture produce el mismo resultado en cada ejecución.

1. Cierre de impacto con procedencia

El corte de dependencia transitiva de un cambio, con cada arista llevando su origen archivo:línea, de modo que puede ver no solo qué se ve afectado sino dónde vive la evidencia.

2. Recall ingenuo versus recall del grafo

El cierre del grafo puntuado contra el conjunto conocido de dependencias de verdad de referencia del fixture, frente a una ventana de un solo archivo simulada, que es lo que una herramienta basada en texto realmente alimenta a un modelo.

3. Secuenciación de extracción

Una puntuación de acoplamiento y radio de explosión por programa (acoplamiento ponderado tres, trampas COMP-3 ponderadas dos, criticidad JCL ponderada dos, llamadas no resueltas ponderadas cinco) que establece un orden de migración strangler-fig seguro.

4. Alcanzabilidad de código muerto y puerta de completitud

Cada PERFORM, CALL, COPY y referencia DB2 debe resolverse o marcarse como necesita revisión, nunca descartarse en silencio. Los párrafos inalcanzables se reportan como una ilustración, no se puntúan como una métrica principal.

Un interruptor hace tangible la diferencia. Active la vista de contexto de IA ingenua y el grafo se atenúa al único archivo fuente con unas pocas líneas de contexto. Seis de los nueve hechos de la transferencia electrónica desaparecen, un banner rojo enuncia la consecuencia, y al volver se restauran 9/9 con comprobantes. Ese interruptor es una ilustración de qué contexto debe suministrar la capa de recuperación, no la fuente de valor.

Cuando termina, Export JSON escribe un archivo migration-evidence.json, y Evidence report renderiza un Informe de topología y completitud de la base de código imprimible: el resumen de nodos y aristas, los cierres por módulo con procedencia archivo:línea, el resultado de recall y el método, la secuencia de extracción ordenada, la lista de código muerto y una marca de tiempo. Lo posicionamos como un inventario de activos TIC DORA y un comprobante de control de cambios SOC-2. Una capa opcional Pydantic-AI puede responder preguntas sobre el cierre, pero está desactivada por defecto y protegida por clave, y la demo determinista registra el resultado sin ninguna clave.

El cierre de transferencia electrónica TRN-LIMIT, trabajado de extremo a extremo

Un cambio en un campo, resuelto contra un conjunto de verdad de referencia conocido. Cada imagen debajo es una captura de pantalla de la aplicación en ejecución.

Nueve hechos, y seis que un solo archivo no puede ver

La vista predeterminada aterriza en el subsistema de transferencias electrónicas con TRN-LIMIT seleccionado. El panel de impacto muestra recuperación por grafo en 9/9 (100 %) frente a un contexto ingenuo de un solo archivo de 3/9 (33 %), puntuado contra el conjunto conocido de dependencias de verdad de referencia del fixture. Tres hechos son visibles en el único archivo: WIRETXN usa TRN-LIMIT en un COMPUTE (WIRETXN.cbl:33), el copybook CBACCT se importa por nombre (WIRETXN.cbl:13), y ocurre un UPDATE en la tabla DB2 ACCOUNTS (WIRETXN.cbl:37). Los seis que deciden la corrección no lo son: TRN-LIMIT es un decimal empaquetado PIC S9(9)V99 COMP-3 que debe convertirse en un BigDecimal y no en un long (CBACCT.cpy:11), TRN-LIMIT-ALPHA lo REDEFINES como texto sobre los mismos seis bytes (CBACCT.cpy:12), LIMIT-TYPE-FLAG decide qué interpretación está activa (CBACCT.cpy:13), dos programas (LIMITSET y BATCHUPD) escriben ese indicador, y el trabajo JCL NIGHTLY a las 02:00 se ejecuta antes de WIREJOB para que el indicador esté establecido antes de que corra la transferencia.

El panel de impacto de TRN-LIMIT: recuperación por grafo 9/9 versus un solo archivo ingenuo 3/9, con los hechos F1 a F3 marcados en el archivo y F4 a F9 marcados ocultos y críticos o altos, cada uno con su procedencia archivo:línea.
Recuperación por grafo 9/9 versus un solo archivo ingenuo 3/9. Los tres hechos visibles están en el archivo; los seis que deciden el tipo están ocultos para una vista de un solo archivo, cada uno con procedencia archivo:línea.

El golpe de efecto: cambie a una ventana de un solo archivo y vea desaparecer seis hechos

Active la vista de contexto de IA ingenua y el grafo se atenúa a lo que vive dentro de WIRETXN.cbl. El tipo COMP-3, la superposición REDEFINES, el indicador de control, sus dos escritores entre módulos y el predecesor JCL de las 02:00 se atenúan en gris, y un banner rojo enuncia la consecuencia: con solo los tres hechos visibles, un modelo emite un TRN_LIMIT long simple y escribe bytes corruptos en ACCOUNTS.TRN_LIMIT, que es el fallo de UAT. Esta es exactamente la brecha de ceguera contextual que una herramienta de ventana de texto no puede cerrar estructuralmente, hecha visible en un clic.

La vista de contexto ingenua de un solo archivo: un banner rojo explica que solo 3 de 9 hechos viven dentro de WIRETXN.cbl, y los hechos F4 a F9 aparecen en gris, incluido el tipo COMP-3, la superposición REDEFINES, el indicador de control y el predecesor JCL de las 02:00.
La vista ingenua de un solo archivo: seis hechos se atenúan y un banner rojo enuncia el fallo de producción resultante. Vuelva atrás y 9/9 regresa con comprobantes.

Un orden seguro de extracción, clasificado por radio de explosión

La vista de extracción clasifica los 14 programas por una puntuación de acoplamiento y radio de explosión. AUDITLOG es la primera extracción segura en el puesto 1 con una puntuación de riesgo de 0 y acoplamiento cero. WIRETXN está en el puesto 11 (riesgo 4, una trampa COMP-3 más criticidad JCL). DISPATCH ocupa el puesto 12 (riesgo 5) por su CALL dinámico no resuelto, y el programa dios ACCTMGR se extrae al final en el puesto 14 (acoplamiento 5, riesgo 15). Ese es un orden strangler-fig que puede defender, menor riesgo primero, mayor acoplamiento al final.

La tabla de secuencia de extracción que clasifica 14 programas por acoplamiento, trampas COMP-3, criticidad JCL y puntuación de riesgo, con AUDITLOG primero en riesgo 0 y el programa dios ACCTMGR al final en riesgo 15, junto a una vista de diff de legado a modernizado.
El orden strangler-fig: AUDITLOG primero en riesgo 0, ACCTMGR al final en riesgo 15, con la razón de cada puesto mostrada en las columnas de acoplamiento, trampas y JCL.

Una puerta de completitud que marca lo que no puede resolver

La pestaña de auditoría reporta el 97.1% de referencias resueltas, que es 33 de 34, con exactamente una marcada para revisión y no descartada en silencio. Ese es el CALL dinámico WS-PROGNAME de DISPATCH, cuyo destino se calcula en tiempo de ejecución (DISPATCH.cbl:15) y por eso no puede resolverse estáticamente. La pestaña también lista código muerto por alcanzabilidad: el párrafo LEGACY-FORMAT de AUDITLOG y el párrafo OLD-LIMIT-CHECK de WIRETXN son inalcanzables. Negarse a fingir una resolución es el comportamiento honesto, y es el comportamiento que un regulador quiere ver.

La pestaña de auditoría que muestra el 97.1% de referencias resueltas y 1 marcada para revisión, con el CALL dinámico WS-PROGNAME de DISPATCH señalado como marcado no descartado en silencio, y una lista de código muerto que nombra AUDITLOG LEGACY-FORMAT y WIRETXN OLD-LIMIT-CHECK.
97.1% resuelto, 1 marcado. El CALL dinámico irresoluble se marca para revisión, no se descarta, y la lista de código muerto se reporta junto a ello.

Un artefacto de auditoría exportable

Todo lo anterior se exporta a un Informe de topología y completitud de la base de código imprimible: el resumen de 47 nodos y 70 aristas, la cobertura del 97.1%, los nueve hechos de dependencia TRN-LIMIT con su visibilidad de un solo archivo y procedencia archivo:línea, la secuencia de extracción ordenada y una marca de tiempo de generación. Como el patrimonio es sintético y creado, el conjunto verdadero de dependencias se conoce por construcción, que es lo que hace de la cifra de recall una medición etiquetada reproducible en lugar de una afirmación. Atribuimos 9/9, 3/9 y 97.1% a este fixture publicado, nunca como una garantía de mundo abierto sobre patrimonios COBOL arbitrarios.

El Informe de topología y completitud de la base de código imprimible que muestra 47 nodos, 70 aristas, 97.1% de referencias resueltas, los hechos de dependencia TRN-LIMIT F1 a F9 con visibilidad de un solo archivo y procedencia, y la secuencia de extracción strangler-fig.
El Informe de topología y completitud de la base de código exportable: resumen de nodos y aristas, los nueve hechos de dependencia con procedencia, y la secuencia de extracción ordenada, posicionado como un inventario de activos TIC DORA.

Una ventana de contexto de un solo archivo versus el grafo

El mismo interruptor contra el que compara la demo, lado a lado, en el fixture de transferencias electrónicas.

Dimensión Ventana de contexto de un solo archivo Grafo de conocimiento CodeGraph
Dependencias TRN-LIMIT recuperadas 3 de 9 9 de 9, contra un conjunto de verdad de referencia conocido
Tipo COMP-3 a través de copybooks Invisible Resuelto con procedencia archivo:línea
Superposición REDEFINES e indicador de control Invisible Resuelto, incluidos los escritores entre módulos
Arista de orden solo JCL (NIGHTLY antes de WIREJOB) Invisible Modelada como una arista PRECEDES
Prueba de completitud Ninguna 97.1% resuelto, lo no resuelto marcado para revisión
Orden seguro de extracción Ninguna Ordenado por acoplamiento y radio de explosión
Artefacto de auditoría Ninguna Informe de topología y completitud exportable

Lo que esta demo no hace

  • ✓ No traduce COBOL a Java. CodeGraph es la capa de comprensión, el mapa. La traducción es un caso de uso posterior que deliberadamente no realiza.
  • ✓ No usa conectores en vivo. El grafo está en memoria más SQLite, las entradas de DB2, JCL y del programador son fixtures de archivo, y la vista ingenua de un solo archivo es una ventana de contexto simulada. Neo4j o Memgraph es la ruta de producción nombrada, no publicada aquí.
  • ✓ No presenta el banco, sus programas ni ningún número como la base de código de un cliente real. El patrimonio es sintético y creado para esta demo. No hay caso de estudio ni resultado de despliegue.
  • ✓ No reivindica cobertura completa del dialecto IBM Enterprise COBOL. El analizador cubre un subconjunto sintético realista, no todos los dialectos, ALTER u OCCURS DEPENDING ON, y no reivindica superar el analizador de ningún proveedor.
  • ✓ No presenta 9/9, 3/9 ni 97.1% como garantías de mundo abierto. Son mediciones sobre el fixture sintético de transferencias electrónicas publicado, cuyo conjunto de verdad de referencia se conoce por construcción.
  • ✓ No incluye clientes, casos de estudio, testimonios ni cifras de ROI. Aún no existen. Esta es una demo que prueba el mecanismo.

Preguntas que los compradores realmente hacen

¿Es esto un traductor de COBOL a Java?

No. CodeGraph es la capa de comprensión, no un traductor, y deliberadamente no pega COBOL y emite Java. Construye un grafo de dependencias tipado de su patrimonio y resuelve el corte transitivo exacto que toca un cambio, con procedencia archivo:línea y una prueba de completitud. La traducción es un caso de uso posterior, y toda herramienta de traducción sigue necesitando este mapa para saber qué toca realmente un cambio.

¿Acaso una ventana de contexto más grande o un modelo mejor no resuelven esto?

No, y ese es el punto duradero. Un patrimonio real tiene de 1 a 10 millones de líneas o más y no cabe en ninguna ventana de contexto, presente o futura. Lo difícil es recuperar el corte transitivo exacto y demostrar que lo encontró todo, lo cual es un problema de topología, recuperación y evidencia, no un problema de calidad de razonamiento. Un modelo perfecto aún no puede demostrar a un regulador qué dependencias se recuperaron, aún necesita un orden seguro de extracción, y aún debe un inventario de activos TIC.

¿Cómo demuestra que encontró cada dependencia para un auditor?

La puerta de completitud exige que cada referencia PERFORM, CALL, COPY y DB2 se resuelva o se marque para revisión, nunca se descarte en silencio. En el fixture publicado eso es 33 de 34 referencias resueltas, que es una cobertura del 97.1%, con la única referencia irresoluble marcada. Puede exportar un Informe de topología y completitud de la base de código imprimible con el resumen de nodos y aristas, los cierres por módulo con procedencia archivo:línea, el resultado de recall y el método, la secuencia de extracción ordenada y la lista de código muerto, posicionado como un inventario de activos TIC DORA y un comprobante de control de cambios SOC-2.

¿Qué ocurre con una dependencia que no puede resolver, como un CALL dinámico?

Se marca para revisión, no se descarta en silencio, y ese comportamiento de honestidad es el punto. En el fixture la única referencia irresoluble es el CALL dinámico WS-PROGNAME de DISPATCH, cuyo destino se calcula en tiempo de ejecución (DISPATCH.cbl:15), así que no puede resolverse estáticamente. CodeGraph la registra como necesita revisión y sitúa a DISPATCH cerca del final del orden seguro de extracción exactamente por esa razón.

¿Se conecta esto a nuestro mainframe, DB2 o programador z/OS?

No en esta demo. El grafo está en memoria más SQLite, y las entradas de DB2, JCL y del programador son fixtures de archivo, mientras que la vista ingenua de un solo archivo es una ventana de contexto simulada. Un despliegue en producción nombraría una plataforma de grafos como Neo4j o Memgraph y leería su patrimonio real, pero nada aquí implica un pipeline z/OS en vivo. La demo prueba el mecanismo sobre un patrimonio sintético, no un despliegue.

¿En qué se diferencia esto de IBM watsonx Code Assistant o de la cadena de herramientas de un gran SI?

No reivindicamos superar el analizador de IBM ni el de un integrador de sistemas, y el analizador de la demo cubre un subconjunto sintético realista de COBOL, no todos los dialectos, ALTER u OCCURS DEPENDING ON. La distinción es el entregable: un grafo de conocimiento consciente del repositorio más una prueba de completitud y un orden seguro de extracción, en lugar de una traducción por archivo. Es la capa de comprensión que cualquier esfuerzo de traducción necesita primero, y es la capa que un modelo base mejor no elimina.

¿Es esto un producto en vivo o una demo?

Es una demo ejecutable que prueba el mecanismo, no un pipeline desplegado. El patrimonio bancario es sintético y creado para esta demo, de modo que el conjunto verdadero de dependencias se conoce por construcción, que es lo que hace de la métrica de recall una medición etiquetada reproducible en lugar de una afirmación. El parse, el grafo y los cuatro análisis son Python plano determinista (FastAPI más networkx, UI de Cytoscape.js) que se ejecutan sin clave de API y sin base de datos. Existe una capa LLM opcional para preguntas y respuestas pero está desactivada por defecto, y el valor no depende de ella.

Investigación técnica

La investigación detrás de esta demo — la arquitectura, el diseño de verificación y el plano empresarial.

¿Planifica una modernización de mainframe?

La capa de comprensión es la parte difícil. Construimos el mapa primero.

Si su equipo está sopesando cómo modernizar un patrimonio COBOL sin una sorpresa en UAT por una dependencia que nadie pudo ver, nos gustaría de verdad oír cómo lo están pensando. El problema es de toda la industria y las respuestas también lo serán.

Evaluación de topología

  • ✓ Mapear hasta dónde puede llegar un cambio a través de copybooks, DB2 y JCL
  • ✓ Resolver el cierre transitivo con procedencia archivo:línea
  • ✓ Puntuar el recall de recuperación de dependencias contra un conjunto de verdad de referencia
  • ✓ Producir la prueba de completitud que sus auditores necesitan

Construir el mapa

  • ✓ Un grafo de conocimiento tipado sobre su patrimonio real
  • ✓ Una puerta de completitud que marca lo que no puede resolver
  • ✓ Un orden de extracción strangler-fig clasificado y defendible
  • ✓ Un informe exportable de activos TIC DORA y de control de cambios SOC-2
Redes sociales

También publicado en