Repository navigation
det: EXEC CICS READ GTEQ / GENERIC (#4270) - #4636
Merged
Merged
Conversation
Spec first: READ honours GTEQ and GENERIC (gitgalaxy/standards/cics/commands/files.py), with IBM's option rules (EQUAL | GTEQ; GENERIC needs KEYLENGTH), NOTFND RESP2 80 for the search, and the GENERIC KEYLENGTH refusal (INVREQ 25 / 42) registered as X22. - det/cics.py: Cics._search -> CicsTask.readSearch over DetCics.Store.search (first key, in key order, equal to / greater than RIDFLD's full or generic key); READ UPDATE holds the record found; refusals by name for a non-constant / out-of-range KEYLENGTH and a short RIDFLD. - ggcics.c GGCREAD: the same search (GG-FLAGS GTEQ / GENERIC), NOTFND RESP2 80. - SEND TEXT LENGTH past FROM sends the bytes after FROM in its record (DetCics.withinRecord), as CICS does; the port used to cut the text at FROM's end (GenApp LGICVS01). - equivalence harness: a case / scenario states "startcode", "terminal" and "ts" (TS queues) on both sides; READQ-TS and RECEIVE events compared on both sides. - tests/equivalence/genapp-lgicvs01: key on file, next key, past the end, random key: PROVED. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…4270) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
squid-protocol
force-pushed
the
det/4270-read-gteq
branch
from
October 7, 2026 19:03
5c68aff to
4425740
Compare
Contributor
From a det sweep of the case (proven on 4 scenarios, 1/1 paragraphs, 6/12 branches), written with det_coverage_ledger.py update; ledger check as expected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
squid-protocol
marked this pull request as ready for review
October 7, 2026 20:08
This was referenced Oct 7, 2026
squid-protocol
added a commit
that referenced
this pull request
Oct 7, 2026
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.
The last translation gap for GenApp LGICVS01:
EXEC CICS READ ... GTEQ, plusREAD GENERIC GTEQ(LGIPVS01).Spec entry (
gitgalaxy/standards/cics/commands/files.py, READ)GTEQ,GENERIC(withKEYLENGTH). IBM, EXEC CICS READ (https://www.ibm.com/docs/en/cics-ts/6.x?topic=summary-read):EQUAL|GTEQ(at most one);GENERICrequiresKEYLENGTH.oracle_assumptions.md(summary row and section).Translator and both runtimes
det/cics.py:Cics._searchemitsCicsTask.readSearchoverDetCics.Store.search. The search takes the first record in key order whose key, or its first KEYLENGTH bytes, equals RIDFLD's or (with GTEQ) is greater. READ UPDATE holds the record it found. RIDFLD is not updated, because IBM documents that only for READNEXT / READPREV.ggcics.cGGCREADruns the same search (GG-FLAGSGTEQ/GENERIC,read_search) and gives NOTFND RESP2 80.equivalence_cics.pypasses the flags and applies the same option rules.test_the_stub_read_gteq_and_generic_search_as_ibm_documents,test_cics_task_read_search_answers_as_the_stub_does).Found on the way (needed to prove LGICVS01)
SEND TEXT FROM(x) LENGTH(n)with n past FROM's end cut the text at FROM's end. CICS sends n bytes starting at FROM (LGICVS01:FROM(WRITE-MSG-H) X(14) LENGTH(24)). The port now usesDetCics.withinRecord, which takes the bytes that follow FROM inside its record. Past the record it refuses with equivalence: WRITEQ TS events on both sides, judge tasks up to X6 (Fixes #4607, #4270) #4634's X6 mechanism (DetCics.PastFrom). A LENGTH that fits within FROM translates exactly as before."startcode"(X19),"terminal"(input to an unformatted RECEIVE) and"ts"(the TS queues the task starts with) on both sides, as the cics-crucible runner does. READQ-TS and RECEIVE events are now compared on both sides, next to equivalence: WRITEQ TS events on both sides, judge tasks up to X6 (Fixes #4607, #4270) #4634's WRITEQ-TS events, and their queue, item, resp and data are compared the same way.Proof:
tests/equivalence/genapp-lgicvs01(new, LGCF terminal task, GENACNTL seeded as LGSETUP leaves it)det_port.py run genapp-lgicvs01: 51/51 translated, PROVED. Coverage is 1/1 paragraphs and 6/12 branches. Not covered: an empty GENACNTL (it reaches the X6 WRITEQ LENGTH past FROM) and the COMMAREA path, which no GenApp program takes.det_port.py check: no other port's translated code moved. OnlyDetCics.javachanged for them, and those changes are additive methods. As a sample I re-proved genapp-lgucvs01, carddemo-cardview and cbsa-inqacc: all PROVED.Numbers (baseline ab94c6c -> after survey)
blockers --baselinebefore:READ GTEQwas the only gap for 1 burned program and touched 3;READ GENERIC GTEQwas the only gap for 1.usage READ: GTEQ in 4 programs (all burned: lgicvs01, lgipvs01, ZECS000, ZECS003), GENERIC in 1 (lgipvs01).READ FILE(ZF-FCT) GTEQ. The file is named only at run time, so its key length is unknown ("not a known file").Crucible companion
None. The cics-crucible runner has no file control yet (the
files.cfgit writes is empty), so a hand-traced READ case first needs a runner slice. Follow-up.Rebase (onto main 6b9720a: #4634, #4633, #4603, #4638)
equivalence_cics.py: equivalence: WRITEQ TS events on both sides, judge tasks up to X6 (Fixes #4607, #4270) #4634's WRITEQ-TS events and X6 judged-to handling, plus my READQ-TS / RECEIVE events and the startcode / terminal / ts facts._cobol_readuses equivalence: WRITEQ TS events on both sides, judge tasks up to X6 (Fixes #4607, #4270) #4634'sRESP_NAMES.DetCics.java: equivalence: WRITEQ TS events on both sides, judge tasks up to X6 (Fixes #4607, #4270) #4634'swithin/PastFrom, plus myStore.searchandwithinRecord, which now throwsPastFrom.test_equivalence_cics.py: both sets of tests.evidence_report.py --refresh, and--checkpasses.python -m gitgalaxy.standards.cics regen.Gates (local)
pr_gates.py --fast5/5 pass andpr_gates.py --ratchets6/6 pass, both re-run after the rebase; targeted tests pass (det translate, equivalence_cics, spec, spec equality, spec status, runtimes).🤖 Generated with Claude Code