det translator: PL/I CICS programs (dsf: 575 era-1 PL/I CICS files untranslatable today)

Open
#6,066 3 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Clearly specified
Activity status
Active
Tech stack
python
Domain
tooling

Research direction

Start with gitgalaxy/tools/cobol_to_java/det/, det_survey.py, and cics_census.py; read the existing COBOL translation path and the linked PL/I work (#2502, #3491, #3720, #4509). The issue maps a broad front end, CICS and DLI translation, and census changes, but says work is blocked on an owner decision about burning a PL/I estate and choosing a runner. Done means PL/I programs and translation holes appear in the survey and census, with execution evidence gated on that decision.

Written by the indexing model from the issue text.

Description

enhancement era:1 legacy-modernization priority: low scope:frontier

Why

The deterministic translator (gitgalaxy/tools/cobol_to_java/det/) takes COBOL only; cics_census.py --pli already flags PL/I programs as untranslatable. Real CICS estates are often PL/I. In dsf (NAV's Det Sentrale Folketrygdsystemet, in production 1967–2018, local non-burned corpus), 1,473 of the source files are PL/I and 575 of them use EXEC CICS. Only its 7 COBOL batch programs reach the det survey, so the 2026-10-22 non-burned survey (#6064) misses almost all of that estate.

Era profile of dsf's 575 PL/I CICS files (grep of era_tags.py's own tells; the tagger is COBOL-only and reports no tell on PL/I):

  • Era 1: HANDLE CONDITION 254, DL/I (EXEC DLI / PLITDLI) 111, HANDLE AID 67
  • Era 2: RESP( 1, SYSID 3, EXEC SQL 0
  • Eras 0, 3 and 4: none (no macro level, MQ, LE callable services, channels/containers or WEB)
  • Shape: classic 3270 command-level application: SEND MAP 186, EXEC CICS LINK/XCTL 438

What exists already

  • Engine reading of PL/I: #2502 (language), #3250/#3720/#3728 (DECLARE record layouts, storage widths, COMMAREA), #3491 (CICS call sites, handlers, UOW parity), #3577 (answer key).
  • #3623 (closed): PL/I through the skeleton Java generation pipeline, not the det statement translator.
  • #4509 (open, Gap Atlas): equivalence harness for PL/I. Blocked on a runner: no mature free PL/I compiler (Iron Spring PL/I, or z/OS capture via #4050).

Scope

  1. Det front end for PL/I: procedures and BEGIN blocks; DECLARE (structures, BASED/pointers, DEFINED, INITIAL, FIXED DEC/FIXED BIN/CHAR VARYING/BIT, UNALIGNED) onto the same storage model COBOL ports use (#3720's layouts); assignments, IF/SELECT/DO loops, CALL, built-ins (SUBSTR, INDEX, LENGTH, UNSPEC, ADDR, …); ON-conditions as named holes until modelled.
  2. EXEC CICS in PL/I onto the existing CICS runtime model (the same commands COBOL ports use), including era-1 HANDLE CONDITION / HANDLE AID semantics (the PL/I flavour of #5856-class work) and EXEC DLI / PLITDLI.
  3. Survey and census: det_survey.py and cics_census.py count PL/I programs as translatable, with holes by reason, so non-burned PL/I estates show up in #6064's numbers.

Evidence constraints (read first)

  • No burned estate has any PL/I (0 .pli/.pl1 files in all 6). Under the burned-only rule there is no estate to build cases or proofs on. This work is translation-level only (L1 at best) until a burned PL/I estate exists or the owner burns one.
  • No oracle: PL/I execution needs #4509's runner decision (Iron Spring or z/OS via #4050). Without it nothing reaches L2. Don't fake a runner.
  • Owner decision needed before launch: whether to burn a PL/I CICS estate (dsf is the obvious candidate) and which runner #4509 uses. Until then this is frontier: mapped, not built.

Related: #4509, #4515, #4050, #6064, #6065, #5865.

Dominant language
Python
Stars
57
Forks
11
Avg merge
1h 35m
Merged PRs (30d)
975

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from squid-protocol/gitgalaxy

All issues in squid-protocol/gitgalaxy

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.