Skip to content

Mainframe fact channel: field-level data lineage (MOVE / COMPUTE / STRING) #3452

Description

@squid-protocol

Problem

There is no field → field lineage, so the engine can't trace a screen field through the COMMAREA to a DB column or file record. That trace is what automated conversion and impact analysis need.

Evidence

About 7,700 MOVE statements across the three corpora, plus COMPUTE, STRING / UNSTRING and INITIALIZE.

Proposal

Per-program flow edges (source item → target item, with the statement kind and line), resolved against record_data. That means handling qualification (OF / IN), REDEFINES, group moves and reference modification. This is the largest channel in the epic: do it after the access channels (SQL, MQ, IMS), which give it endpoints to connect.

Acceptance (ground truth, as for every channel since #3210)

  • An independent draft reader in tests/tools/cobol_answer_key.py. It must not import the engine; test_draft_readers_never_import_the_parsers_they_grade enforces this.
  • A new answer-key section, drafted for all three pinned corpora (zopeneditor, CBSA, CardDemo).
  • A blind census of that section with tests/tools/cross_verify.py census, with every disagreement ruled against the source.
  • A new scored field in tests/tools/ground_truth_ledger.py, so mainframe-ground-truth.yml fails CI on any regression.
  • The channel follows gitgalaxy/core/how_to_add_a_fact_channel.md: extractor, *_data table, delta restore, galaxy_ir.EngineFile reader and SCOPE update.

Part of #3445.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    core-engineModifications to the central physics and parsing engineenhancementNew feature, sensor, or structural signaturelegacy-modernizationCOBOL refractor, dead-code extraction, and JCL forging

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions