Repository navigation
equivalence: CICS tasks with no COMMAREA and a per-scenario COMMAREA length (#4270) - #4642
Merged
Merged
Conversation
…length (#4270) - "commarea": null: a program that takes no COMMAREA (EIBCALEN 0 on both sides, no DTO; the det service's handleLink() is the java-facade entry). A missing or empty commarea is refused by name (was KeyError / IndexError), as is a COMMAREA in a scenario or an event of such a case. - "commarea_length": N (oracle_assumptions.md X23): the program is given exactly N bytes. The stub's GGCAREA puts them before a guard page; the det port cuts DFHCOMMAREA's storage to N (CicsTask.withExactCommarea). A reference past EIBCALEN is refused on both sides, and the task is judged up to it, as X6 judges a WRITEQ past FROM. A judged task now passes only when both sides stopped at the same refusal. - GenApp: short-COMMAREA scenarios for LGACDB01, LGACDB02, LGDPDB01, LGIPDB01. - New cases for the async credit-card estate: asynccc-getpol, asynccc-getspnd, asynccc-updcsdb. - The generated test imports ScreenModel only in an estate with BMS maps. - Coverage ledger and the GenApp evidence report refreshed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
…r entries (#4270) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…els-nocommarea # Conflicts: # docs/language_status/oracle_assumptions.md # tests/cobol_mainframe/test_equivalence_cics.py # tests/equivalence/det_sweep_coverage.json # tests/tools/equivalence_cics.py
squid-protocol
marked this pull request as ready for review
October 7, 2026 21:08
This was referenced Oct 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #4270.
This is part 1: tasks with no COMMAREA and a COMMAREA length stated per scenario. Input channels and output containers come in part 2.
What changed
No COMMAREA. A case can now say
"commarea": nullfor a program with an empty LINKAGE SECTION.null.handleLink(), which takes no arguments.commarea_fieldsor an IndexError incommarea_class. Now these are refused by name: a missingcommarea,"segments": [], a scenario that gives a COMMAREA anyway, and a RETURN / XCTL COMMAREA in such a case.ScreenModelonly when the estate has BMS maps. The async credit-card estate has none, so its Java side did not compile.Per-scenario COMMAREA length (new oracle_assumptions.md X23). A scenario can set
"commarea_length": N, from 1 to the record's length. The caller then passes only the record's first N bytes.GGCAREAplaces those N bytes at the end of a page, followed by an inaccessible page (commarea.exact). The driver passes the program the area it chose. A read or write past EIBCALEN faults at that statement, and the stub stops the run (98, "COMMAREA past EIBCALEN: not modelled").eibcalenconstructor plusCicsTask.withExactCommarea().runTaskcuts DFHCOMMAREA's storage to N bytes for the task. A reference past them throwsDetCics.PastFrom.Storage.bytesis no longer final.x6withassumes: "X23". The evidence page states X23 the way it states X6.Cases.
asynccc-getpol,asynccc-getspnd,asynccc-updcsdb. Each is DELAY then RETURN with no COMMAREA, entered byhandleLink(). DELAY is not an event on either side, because a task takes no time (X4), so the RETURN is what is compared.short-commarea.short-commarea-insert-fails.short-commareaandshort-commarea-delete-fails.endowment-short-commarea-select-fails.Numbers, before -> after
Local det sweeps with Db2, covering only the changed cases. "Before" is main at 821d6e6. The harness and cases are unchanged on main since then; main now only differs in docs and CI.
Det sweep: proven 5/5 -> 8/8 (the 3 new cases). Coverage:
proof_blockers (survey census-cache fc2ab73, with the sweeps above):
--branches): proven 11 -> 18.coverage: branch outcomesas the only gap: 9 -> 6.no case: 34 -> 31.Not reached, and why: LGACDB01 line 314 and LGUCDB01 line 208 (
IF EIBCALEN < 91true).Gates
pr_gates.py --ratchets: 6/6 pass.pr_gates.py --fast: 5/5 pass (lint, audits, secrets, xray, gauntlet).det_coverage_ledger.py updatefor the 8 cases;check: as expected.evidence_report.py --refresh: the GenApp report changed (scenario counts).Db2 re-proof: CI's det-sweep runs --skip-db2, so the 13 other Db2 CICS cases were re-proven locally under this harness. They are carddemo-cotrtlic, cotrtupc, cbsa-custctrl, dbcrfun, delacc, inqacc, updacc, updacc-generated, xfrfun, genapp-lgapdb01, lgicdb01, lgupdb01 and mortgage-cmort. All 13 are proven, and their verdicts and coverage are identical to the X6 (#4634) and EIBTASKN sweeps. Their ledger entries are added (the ledger had none for them); the evidence reports did not change.
Not swept locally (owner rule: only changed cases)
The driver change (the program now runs on the area
GGCAREAchose) and the detrunTaskchange (the X23 block, inert unlesswithExactCommarea) reach every CICS case.Merged with main (after #4636 / #4608 / #4627). The PR conflicted, so I merged origin/main in (no force push).
pr_gates --fast5/5 and--ratchets7/7.Follow-ups
🤖 Generated with Claude Code