Skip to content

Mainframe fact channel: async CICS: RUN/START TRANSID children, FETCH joins, RETRIEVE #3449

Closed

Description

@squid-protocol

Problem

Only RUN TRANSID reaches call_site_data. The CICS asynchronous API's join points (FETCH ANY, FETCH CHILD), START TRANSID / RETRIEVE data passing, and DELAY / POST / WAIT aren't modelled, so a fan-out/fan-in pattern appears as an unconnected child start.

Evidence

CBSA's credit-agency flow uses EXEC CICS RUN TRANSID(WS-RUN-TRANSID), then EXEC CICS FETCH ANY(WS-ANY-CHILD-FETCH-TKN), EXEC CICS RETRIEVE, and EXEC CICS DELAY FOR SECONDS(n) (CRDTAGY1–5 and the parent program).

Proposal

An async task graph: parent → child transid, the channel and containers passed, the fetch/join points (with the token), and RETRIEVE / START pairs. Link it to transaction_data and cics_resource_data (containers).

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

Activity

  1. added
    enhancementNew feature, sensor, or structural signature
    core-engineModifications to the central physics and parsing engine
    legacy-modernizationCOBOL refractor, dead-code extraction, and JCL forging
    on Sep 24, 2026
  2. squid-protocol commented on Sep 24, 2026

    @squid-protocol
    OwnerAuthor

    Done. It landed on main through #3459. That PR was merged into #3458's branch, so the "Closes" keyword never fired.

    What shipped

    • core/cics_tasks.py → the cics_task_data table: one row per RUN / START / START ATTACH / FETCH CHILD / FETCH ANY / FREE CHILD / RETRIEVE / CANCEL / DELAY / POST / WAIT / ENQ / DEQ command.
    • STRING-built transaction ids are kept as patterns sized by the operand's PIC: CBSA's OCR[0-9] reaches OCR1–5 and deliberately not OCRA.
    • GalaxyIR.async_tasks() maps each spawn to the CSD transactions and programs it reaches, the containers passed on its channel, and the FETCH that collects it. CBSA: CRECUST runs OCR1–5 → CRDTAGY1–5, collected by FETCH ANY.

    Acceptance

    • Independent reader: cobol_answer_key.py add-cics-tasks.
    • Scored fields CICS task control and async children. The engine matches the key exactly: CBSA 24/24 commands and 5/5 children; CardDemo 3/3.
    • Blind census: Ground truth: blind census of the fact-channel key sections (#3445) #3467, every file, 0 key errors. Both fields are now cross_verified.
    • Fact-channel spine: extractor, table, delta restore, IR reader and SCOPE.

    Follow-up: #3453 added TD trigger-level starts (tdq_trigger_starts), another async edge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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