Skip to content

det/CICS: BLL SET(cell) class and OS/VS COBOL chained storage areas (Part of #5119) - #5196

Merged
squid-protocol merged 6 commits into
mainfrom
churn/5119-20261015T1611Z
Oct 15, 2026
Merged

squid-protocol merged 6 commits into
mainfrom
churn/5119-20261015T1611Z

Conversation

@squid-protocol

@squid-protocol squid-protocol commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

Part of #5119 (OS/VS COBOL era 1: BLL cells / SERVICE RELOAD). Remainder after #5159 (X56) and #5175 (X58).

What changed

  1. SET(cell) on the locate-mode read commands. det/CICS: OS/VS COBOL BLL cells and SERVICE RELOAD on the pointer lane (Part of #5119) #5159's lowering already makes a BLL cell a POINTER, so READ / READNEXT / READPREV / RECEIVE / RETRIEVE / READQ TS SET(cell) are CICS SET(ptr) pointer-lane siblings: RECEIVE, RETRIEVE, READQ TS, GET CONTAINER, READ/READNEXT/READPREV (Part of #5042) #5175's SET(pointer) forms. Each member now has a test: the det port calls DetCics.setBlock with that command's key and the oracle calls the same stub entry with the cell. The forms CICS SET(ptr) pointer-lane siblings: RECEIVE, RETRIEVE, READQ TS, GET CONTAINER, READ/READNEXT/READPREV (Part of #5042) #5175 refuses stay refused under the command's own message, and LOAD PROGRAM SET stays refused by name (Siblings of #4771: CICS pointer lane (SET(ptr) commands, pointer arithmetic, ADDRESS OF subordinate) #5042).
    One asymmetry found and fixed: det's parse_exec read IBM's own order READ UPDATE DATASET(...) (APRM p. 22) as the verb "READ UPDATE" and refused it, while the oracle accepted it. UPDATE after READ / READNEXT / READPREV is now an option, never a second verb word (det/cics.py).
  2. IBM's chained storage areas (CICS/MVS 2.1.2 APRM SC33-0512-1, p. 22: MOVE NEXTAREA TO USERPTR. ANYNAME.). Before this PR they were refused.
    • (a) Re-addressing at a paragraph name. A record whose cell changes with no SERVICE RELOAD later in its paragraph is reloaded from its cell at the head of every paragraph and section ("Insertion of a paragraph name causes the compiler to generate code to reestablish addressability").
    • (b) An address held in a fullword. MOVE cell TO fullword / MOVE fullword TO cell become CALL 'GGCBLLP' / 'GGCBLLG'.
      • Both runtimes hold the same token (ASSUMED: 0 = NULL, the n-th distinct address = n × 65536).
      • Implemented in ggcics.c and CicsTask.bllToken / bllPointer, via DetCics.bllToData / bllFromData.
      • A value that no cell gave is refused at run time, so an address computed in data (e.g. ADD 4096 to a token) is refused, never followed to a wrong area.
    • Refused by name:
      • a long record re-addressed at a paragraph name before its secondary cells are reset
      • a cell moved to or from an item that is no plain fullword
      • DECLARATIVES in a program whose records are re-addressed at paragraph names
      • a paragraph name in a COPY member
      • a cell compared with ZERO (the det translator refuses NULL in conditions)
  3. Register X56 extended: IBM's p. 22 and p. 25 text, the model, assumptions (5)-(7) and the refusals. New runtime rule RT-CICS-BLL-ADDRESS (cobolrt_rules.json); refusal_map note.

Class table

Member Before This PR
GETMAIN SET(cell), SERVICE RELOAD, ADD 4096, MOVE cell TO cell #5159 unchanged
READ / READ UPDATE SET(cell) READ tested; READ UPDATE DATASET refused by det only tested; parse fixed
READNEXT / READPREV / RECEIVE / RETRIEVE / READQ TS SET(cell) untested tested: translates whole, own refusals kept
LOAD PROGRAM SET(cell) refused still refused by name (#5042)
re-addressing at a paragraph name refused modelled
address held in data refused modelled (token, ASSUMED)
cell compared with ZERO / NULL refused refused (sibling gap: det NULL conditions)
ADDRESS CWA / TWA / TCTUA / CSA into a cell refused out of scope (#5079)

Evidence

  • EQUIVALENCE_E2E=1 proofs against GnuCOBOL (test_bll_cells_5119.py), each proven, SEND TEXT as hand-traced:
    • BLLDEMO (unchanged)
    • BLLCHAIN: three GETMAIN areas linked through a fullword, walked via MOVE NEXTAREA TO USERPTR and the paragraph WALK → THRE TWO ONE
    • BLLREAD: READQ TS SET(cell) + SERVICE RELOAD → QUEUED-ITEM1 12
  • Token step lists answered alike by the stub C and CicsTask (tests/cics_crucible/test_bll_tokens_5119.py, 10 cases incl. the refusals).
  • Related suites: 878 passed (pointer lane 4771/5042, cics runtimes, det translate, cobolrt rules, cics spec).
  • pr_gates --fast 6/6 PASS, pr_gates --ratchets 8/8 PASS (0 skipped), via heavy-run with JDK 17.
  • det_port.py check: no port's translated service changed. 98 of 112 ports differ only in the shared runtime files: additive DetCics (+28 lines) and CicsTask (+35 lines) methods that none of them calls. No re-sweep was run: those methods are new and no existing port calls them, so behaviour can't move. No golden master: nothing in the engine or parser changed.

Cross-repo

None.

🤖 Generated with Claude Code

CodeQL fix (shepherd round)

CodeQL py/uninitialized-local-variable flagged through in bll.py (assigned only inside if cells is not None:, read under a second such guard). It is now initialised to set() before the block; behaviour unchanged. Merged origin/main (no conflicts). pr_gates --fast 6/6, --ratchets 8/8, BLL tests 91 passed.

Lessons for agents

  • CodeQL "may be used before it is initialized" on a local assigned inside one if and read under a later separate if: initialise it before the first block, even if the two guards are logically identical.

squid-protocol and others added 3 commits October 15, 2026 12:30
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uff format (Part of #5119)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@squid-protocol

Copy link
Copy Markdown
Owner Author

No description provided.

@squid-protocol
squid-protocol marked this pull request as ready for review October 15, 2026 16:45
@squid-protocol
squid-protocol enabled auto-merge (squash) October 15, 2026 16:45
@github-actions

Copy link
Copy Markdown
Contributor

🐦‍⬛ Muninn Security Scan

✅ No security issues found.

🐦‍⬛ Powered by Muninn · Skald Lab

Comment thread gitgalaxy/tools/cobol_to_java/det/bll.py Fixed
@squid-protocol

Copy link
Copy Markdown
Owner Author

PR #5196 @ f4b7aac: 1 failed check(s)

== CodeQL (failure) -- real
https://github.com/squid-protocol/gitgalaxy/runs/116556009168
repro: no local equivalent; read the check page
log tail:

@squid-protocol squid-protocol added the shepherd:needs-fix Bot: a real failure on this head; see the digest comment. Guide: docs/ci.md label Oct 15, 2026
squid-protocol and others added 2 commits October 15, 2026 13:11
…alized-local-variable) (Part of #5119)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@squid-protocol squid-protocol added shepherd:merge Maintainer: merge when green (auto-merge, squash). Guide: docs/ci.md and removed shepherd:merge Maintainer: merge when green (auto-merge, squash). Guide: docs/ci.md shepherd:needs-fix Bot: a real failure on this head; see the digest comment. Guide: docs/ci.md labels Oct 15, 2026
@squid-protocol

Copy link
Copy Markdown
Owner Author

No description provided.

1 similar comment
@squid-protocol

Copy link
Copy Markdown
Owner Author

No description provided.

@squid-protocol squid-protocol added the shepherd:retrying Bot: an infra/flake rerun is pending on this head. Guide: docs/ci.md label Oct 15, 2026
@squid-protocol

Copy link
Copy Markdown
Owner Author

PR #5196 @ 7703777: 2 failed check(s)

== db2 3/4 (failure) -- infra
https://github.com/squid-protocol/gitgalaxy/actions/runs/38777039369/job/116580715311
repro: tests/tools/box/heavy-run.sh python tests/tools/proof_sweep.py --det-only --db2-only --cases --work /tmp/gitgalaxy-scratch/ci-digest/sweep
errors:
fail-on-cache-miss: false
Traceback (most recent call last):
equivalence_db2.Db2ImagePullError: INFRASTRUCTURE (not a code defect): could not pull the pinned Db2 image icr.io/db2_community/db2@sha256:2de8151713c261843868c5c3411b57be6ae79d99d70a5b3022337836776bfda6 after 4 attempts: docker pull -q icr
##[error]the background Db2 start did not finish
##[error]Process completed with exit code 1.
log tail:
Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.15/x64
LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.12.15/x64/lib
GITGALAXY_ORACLE_PREBUILT: 1
DB2_JOBS: 4
GITGALAXY_DB2_POOL: 4
JAVA_HOME: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.20-1/x64
JAVA_HOME_17_X64: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.20-1/x64
MAVEN_ARGS: -ntp
##[endgroup]
Multiple search paths detected. Calculating the least common ancestor of all paths
The least common ancestor is /home/runner/work/_temp. This will be the root directory of the artifact
With the provided path, there will be 1 file uploaded
Artifact name is valid!
Root directory input is valid!
Uploading artifact: det-sweep-db2-logs-2.zip
Beginning upload of artifact content to blob storage
Uploaded bytes 596
Finished uploading artifact content to blob storage!
SHA256 digest of uploaded artifact is 16ba373af2e48850935f988caad46cfb46a07fcfbb3bd3955f8d1504c3f4e0e4
Finalizing artifact upload
Artifact det-sweep-db2-logs-2 successfully finalized. Artifact ID 11996384120
Artifact det-sweep-db2-logs-2 has been successfully uploaded! Final size is 596 bytes. Artifact ID is 11996384120
Artifact download URL: https://github.com/squid-protocol/gitgalaxy/actions/runs/38777039369/artifacts/11996384120
Post job cleanup.
Post job cleanup.
[command]/usr/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/work/_temp/df775cef-18a6-4d24-8295-4ea8b98d0c9c' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/usr/bin/git config --global --add safe.directory /home/runner/work/gitgalaxy/gitgalaxy/gitgalaxy
Removing SSH command configuration
[command]/usr/bin/git config --local --name-only --get-regexp core.sshCommand
[command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
Removing HTTP extra header
[command]/usr/bin/git config --local --name-only --get-regexp http.https://github.com/.extraheader
[command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http.https://github.com/.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
Removing includeIf entries pointing to credentials config files
[command]/usr/bin/git config --local --name-only --get-regexp ^includeIf.gitdir:
[command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
Cleaning up orphan processes

== det (failure) -- real
https://github.com/squid-protocol/gitgalaxy/actions/runs/38777039369/job/116592079938
repro: tests/tools/box/heavy-run.sh python tests/tools/proof_sweep.py --det-only --skip-db2 --cases cbsa-bnk1ccs,cbsa-bnk1tfn,cbsa-crecust,mortgage-csmrt,mortgage-mpmt,zecs-zecs003 --work /tmp/gitgalaxy-scratch/ci-digest/sweep
det cases not proven: cbsa-bnk1ccs,cbsa-bnk1tfn,cbsa-crecust,mortgage-csmrt,mortgage-mpmt,zecs-zecs003
errors:
det mortgage-csmrt NOT PROVEN proven on 5 scenarios, covering 1/1 paragraphs and 1/2 branches
det mortgage-mpmt NOT PROVEN
det zecs-zecs003 NOT PROVEN
det cbsa-bnk1ccs NOT PROVEN proven on 89 scenarios, covering 33/33 paragraphs and 112/143 branches
det cbsa-bnk1tfn NOT PROVEN proven on 46 scenarios, covering 28/28 paragraphs and 53/72 branches
det cbsa-crecust NOT PROVEN
##[error]Process completed with exit code 1.
log tail:
compression-level: 6
overwrite: false
include-hidden-files: false
archive: true
env:
pythonLocation: /opt/hostedtoolcache/Python/3.12.15/x64
PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.12.15/x64/lib/pkgconfig
Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.15/x64
Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.15/x64
Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.12.15/x64
LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.12.15/x64/lib
##[endgroup]
With the provided path, there will be 105 files uploaded
Artifact name is valid!
Root directory input is valid!
Uploading artifact: det-sweep-ledger.zip
Beginning upload of artifact content to blob storage
Uploaded bytes 82926
Finished uploading artifact content to blob storage!
SHA256 digest of uploaded artifact is b65aee81e669bed048f6b383d0e68b8465a436dd86adcd242228401dd51d7cb2
Finalizing artifact upload
Artifact det-sweep-ledger successfully finalized. Artifact ID 11997880505
Artifact det-sweep-ledger has been successfully uploaded! Final size is 82926 bytes. Artifact ID is 11997880505
Artifact download URL: https://github.com/squid-protocol/gitgalaxy/actions/runs/38777039369/artifacts/11997880505
Post job cleanup.
[command]/usr/bin/git version
git version 2.55.0
Temporarily overriding HOME='/home/runner/work/_temp/df9faffc-7729-4808-8cff-038d3f9c73f9' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/usr/bin/git config --global --add safe.directory /home/runner/work/gitgalaxy/gitgalaxy
Removing SSH command configuration
[command]/usr/bin/git config --local --name-only --get-regexp core.sshCommand
[command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
Removing HTTP extra header
[command]/usr/bin/git config --local --name-only --get-regexp http.https://github.com/.extraheader
[command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http.https://github.com/.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
Removing includeIf entries pointing to credentials config files
[command]/usr/bin/git config --local --name-only --get-regexp ^includeIf.gitdir:
[command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
Cleaning up orphan processes

@squid-protocol squid-protocol added the shepherd:needs-fix Bot: a real failure on this head; see the digest comment. Guide: docs/ci.md label Oct 15, 2026
@squid-protocol squid-protocol removed shepherd:needs-fix Bot: a real failure on this head; see the digest comment. Guide: docs/ci.md shepherd:retrying Bot: an infra/flake rerun is pending on this head. Guide: docs/ci.md shepherd:merge Maintainer: merge when green (auto-merge, squash). Guide: docs/ci.md labels Oct 15, 2026
@squid-protocol

Copy link
Copy Markdown
Owner Author

CI shepherd: the head of this PR (e321fd5) is not the one a maintainer labelled shepherd:merge on (new commits, or never approved), so the label was removed and nothing merges unreviewed code. Re-add the label when the new head is ready (shepherd:reapprove marks this PR until then).

@squid-protocol squid-protocol added the shepherd:reapprove Bot: new commits dropped shepherd:merge; re-add it to merge this head. Guide: docs/ci.md label Oct 15, 2026
@squid-protocol squid-protocol added shepherd:merge Maintainer: merge when green (auto-merge, squash). Guide: docs/ci.md and removed shepherd:reapprove Bot: new commits dropped shepherd:merge; re-add it to merge this head. Guide: docs/ci.md labels Oct 15, 2026
@squid-protocol

Copy link
Copy Markdown
Owner Author

No description provided.

@squid-protocol
squid-protocol enabled auto-merge (squash) October 15, 2026 18:44
@squid-protocol

Copy link
Copy Markdown
Owner Author

No description provided.

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

Labels

shepherd:merge Maintainer: merge when green (auto-merge, squash). Guide: docs/ci.md

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants