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)
Part of #3445.
🤖 Generated with Claude Code
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
MOVEstatements across the three corpora, plusCOMPUTE,STRING/UNSTRINGandINITIALIZE.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)
tests/tools/cobol_answer_key.py. It must not import the engine;test_draft_readers_never_import_the_parsers_they_gradeenforces this.tests/tools/cross_verify.py census, with every disagreement ruled against the source.tests/tools/ground_truth_ledger.py, somainframe-ground-truth.ymlfails CI on any regression.gitgalaxy/core/how_to_add_a_fact_channel.md: extractor,*_datatable, delta restore,galaxy_ir.EngineFilereader and SCOPE update.Part of #3445.
🤖 Generated with Claude Code