Skip to content

Mainframe fact channel: unit of work and error handling: SYNCPOINT/COMMIT points, HANDLE CONDITION handlers #3453

Closed

Description

@squid-protocol

Problem

Commit and rollback points and error handlers only feed risk-signal counts. The engine can't say where a program's unit of work ends, or which condition goes to which handler, which is the information needed to preserve transactional behaviour in a migration.

Evidence

About 410 EXEC CICS HANDLE ABEND/CONDITION and DFHRESP(...) checks, and about 67 EXEC CICS SYNCPOINT / EXEC SQL COMMIT / ROLLBACK, across CBSA and CardDemo.

Proposal

A per-file channel: commit and rollback points (verb, line, owning unit); HANDLE CONDITION pairs (condition → handler paragraph); HANDLE ABEND handlers (the LABEL already feeds reachability); and RESP checks tied to the command they check.

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