You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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.
Activity
Mainframe fact channel: CICS task control and the async task graph (#…
Mainframe fact channel: embedded SQL table access (#3446) (#3458)
Mainframe fact channel: job submission through the internal reader (#…
squid-protocol commentedon Sep 24, 2026
Done. It landed on
mainthrough #3459. That PR was merged into #3458's branch, so the "Closes" keyword never fired.What shipped
core/cics_tasks.py→ thecics_task_datatable: one row per RUN / START / START ATTACH / FETCH CHILD / FETCH ANY / FREE CHILD / RETRIEVE / CANCEL / DELAY / POST / WAIT / ENQ / DEQ command.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
cobol_answer_key.py add-cics-tasks.CICS task controlandasync children. The engine matches the key exactly: CBSA 24/24 commands and 5/5 children; CardDemo 3/3.cross_verified.Follow-up: #3453 added TD trigger-level starts (
tdq_trigger_starts), another async edge.