Skip to content

det + forge: CICS programs nothing starts are CICS; SET pointer TO NULL -- whole 96 -> 98 (Part of #4270) - #4738

Merged
squid-protocol merged 2 commits into
mainfrom
fix/4270-whole-programs-next
Oct 9, 2026
Merged

squid-protocol merged 2 commits into
mainfrom
fix/4270-whole-programs-next

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

Part of #4270.

Two non-CICS-command gaps from the blockers census (cics_census.py blockers --all-programs, baseline 63c1a6a = main after #4729), picked by programs made whole.

1. A CICS program nothing in the estate starts or LINKs to was generated as a plain service

is_cics_program (transaction forge) only saw a CICS program through an entry transaction, an EXEC CICS resource, a COMMAREA contract, a container or an incoming LINK / XCTL. CBSA's ACCTCTRL (LINKed from outside the estate) and cics-java-recgen's EDUPGM (LINKed from Java) had none, so their service had no runTask(CicsTask), every EXEC CICS was a hole (EXEC CICS (no reason given)) and EIBCALEN was no such item. A program that declares 01 DFHCOMMAREA in its LINKAGE SECTION (the COMMAREA name the CICS translator uses), or whose EXEC CICS ABEND / HANDLE / SYNCPOINT the engine extracted (uow_handlers source CICS), is now a CICS program. Over all 176 surveyed COBOL skeletons exactly these two flip (plus one PL/I program that does issue EXEC CICS, dsf R001SP01).

2. SET pointer TO NULL

Refused with every other use of NULL (CBSA CREACC SET COMM-PCB-POINTER TO NULL). Now binary zeros over the pointer's bytes: GnuCOBOL's NULL is a zero void *, IBM's NULL a fullword of zeros; only the width differs, as oracle_assumptions.md C9 already states (C9 extended). A POINTER now gets a Field over its bytes (dropped when unused, so no other port changes), which also makes SET p TO q compile -- CBSA DELCUS translated it before onto Fields that were never declared. Every other use of NULL (comparison, MOVE, VALUE) and SET ADDRESS OF on a read pointer stay refused by name.

Measured

  • blockers --all-programs: translated whole 96 -> 98 / 179 (non-burned 10 -> 11); ACCTCTRL 15/18 -> 18/18, EDUPGM 22/25 -> 30/30 (both ports compile against their built estates in det_survey).
  • CREACC 290/292 -> 291/292: its only gap left is LINK SYNCONRETURN (the slice in flight), so it becomes whole when that lands (-> 99).
  • compare --before-baseline --verb RETURN (CICS programs): translated whole 77 -> 79 (non-burned 5 -> 6).

Proofs / gates

  • tests/cobol_mainframe/test_det_whole_programs_4270.py: is_cics_program cases; SET TO NULL / NULLS on an elementary, a subscripted and a level-01 pointer, SET p TO q, write-only pointers, refusals -- and end to end vs cobc (EQUIVALENCE_E2E=1, bytes / typed / groups): 16 passed.
  • det translator suites (test_det_programs / translate / layout / source_4462) and CICS forge suites (endpoints, facade, region, conversation, opaque COMMAREA, service calls): pass.
  • det_port.py check --base-ref origin/main: 79/79 ports unchanged, so no proof or evidence record is stale and proof_sweep --det-only has nothing to re-run.
  • pr_gates --fast: 5/5 pass. --ratchets: 6/7 pass; ports failed only under the shell's default JDK 21 -- rerun with equivalence_env.py (JDK 17): all 45 committed ports compile.

Not fixed (filed)

🤖 Generated with Claude Code

https://claude.ai/code/session_01MQNoe4wPJgr7dbUvs3DG6D

… pointer TO NULL (Part of #4270)

- is_cics_program also takes a LINKAGE DFHCOMMAREA (the COMMAREA name the CICS
  translator uses) or an EXEC CICS handler / ABEND the engine extracted: CBSA's
  ACCTCTRL (LINKed from outside the estate) and cics-java-recgen's EDUPGM (LINKed
  from Java) got a plain service, so every EXEC CICS was a hole and EIBCALEN
  `no such item`. Over all 176 surveyed COBOL skeletons only these two flip (plus
  one PL/I program with EXEC CICS, dsf R001SP01).
- SET pointer TO NULL: binary zeros over the pointer's bytes (C9; GnuCOBOL's NULL
  is a zero void *, IBM's a fullword of zeros). Every other use of NULL stays
  refused by name. A POINTER now has a Field over its bytes, so SET p TO q
  (CBSA DELCUS) -- translated before onto Fields never declared -- compiles.

Translated whole 96 -> 98 / 179 (non-burned 10 -> 11); CREACC is left with
LINK SYNCONRETURN only. det_port check: 79/79 ports unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MQNoe4wPJgr7dbUvs3DG6D
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

🐦‍⬛ Muninn Security Scan

✅ No security issues found.

🐦‍⬛ Powered by Muninn · Skald Lab

@squid-protocol
squid-protocol marked this pull request as ready for review October 9, 2026 02:28
@squid-protocol
squid-protocol merged commit 08b43bb into main Oct 9, 2026
37 checks passed
@squid-protocol
squid-protocol deleted the fix/4270-whole-programs-next branch October 9, 2026 02:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant