Skip to content

equivalence: cases for GenApp's front-end and test programs (#4270) - #4653

Merged
squid-protocol merged 3 commits into
mainfrom
equiv/4270-genapp-front-ends
Oct 8, 2026
Merged

squid-protocol merged 3 commits into
mainfrom
equiv/4270-genapp-front-ends

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

Part of #4270.

Equivalence cases for the 11 GenApp programs whose only proof gap was "no case" (proof_blockers on b8e6430). All 11 prove (local det sweep with Db2, proof_sweep.py --det-only: 11/11, "as expected"); ledger entries added, evidence report refreshed.

program case scenarios (incl. SQL-fault tasks) paragraphs branches level before → after (local sweep)
LGACUS01 genapp-lgacus01 8 3/3 4/8 L1 (no case) → L3
LGAPOL01 genapp-lgapol01 11 2/2 5/8 L1 → L3
LGDPOL01 genapp-lgdpol01 12 3/3 8/12 L1 → L3
LGICUS01 genapp-lgicus01 6 4/4 4/8 L1 → L3
LGIPOL01 genapp-lgipol01 19 2/2 3/6 L1 → L3
LGUCUS01 genapp-lgucus01 6 4/4 5/8 L1 → L3
LGUPOL01 genapp-lgupol01 17 4/4 13/16 L1 → L3
LGTESTP1 genapp-lgtestp1 25 7/10 14/19 L1 → L2
LGTESTP2 genapp-lgtestp2 25 7/10 14/19 L1 → L2
LGTESTP3 genapp-lgtestp3 25 7/10 14/19 L1 → L2
LGTESTP4 genapp-lgtestp4 23 7/9 17/22 L1 → L2

The committed report still shows L1 for these programs. They are Db2 cases, which CI's det-sweep skips, so this matches the other GenApp Db2 cases. proof_blockers with the sweep: every one of the 11 moves from "no case" to "coverage: branch outcomes no scenario runs" (plus "live paragraphs" for LGTESTP*).

Cases. Each front end runs its whole back-end chain in one task through "programs": the Db2 service, the VSAM service and LGSTSQ. It reuses the back-end case's inputs and adds its own paths: no COMMAREA, a short COMMAREA, a wrong or unknown request id, and a failing back end. LGTESTP1-4 run 12 programs per task with the SSMAP BMS maps. Their scenarios cover inquire, add, delete, inquire-then-update, CLEAR, PF3, MAPFAIL and an invalid option, and LGTESTP4 also has its four kinds of inquiry.

Uncovered, and why. Every program's WRITE-ERROR-MESSAGE IF EIBCALEN > 0 arm is dead in practice, because the paragraph only runs when EIBCALEN is 0. In LGACUS01 and LGICUS01, the '98' short-COMMAREA branch can't be reached without first writing past EIBCALEN: MOVE '00' TO CA-NUM-POLICIES writes bytes 91-93 before the check runs (X23). The remaining gaps sit after a back-end failure. Those paths all LINK LGSTSQ first, so they are judged only up to its refused WRITEQ (X6): LGDPOL01 line 127, and NO-ADD / NO-DELETE / NO-UPD in LGTESTP*.

Harness / translator fixes (each with a test):

  • stage_copybooks no longer stages a .bms map source as <NAME>.cpy. GenApp's ssmap.bms was hiding the generated symbolic map that COPY SSMAP refers to.
  • det translator: a program with no DFHCOMMAREA now gets EIBCALEN from the task's area. Before, the Java side had 0, so LGTESTP's IF EIBCALEN > 0 GO TO A-GAIN went the wrong way.
  • det translator: an integer literal compared with an alphanumeric item now keeps its digits as written. For LGTESTP4's ENP4CNOO Not = 0000000000, the Java side was comparing against "0".
  • Each LINKed SQL program's GG-SQL-IDs now start at the next free hundred. The old ranges of 1000 per program overflowed PIC 9(4) at the tenth program.
  • ggsql.c now refuses, by name, a statement the Db2 CLI fails in the client (its own native code -99999; the JDBC side gives -4220). This is oracle_assumptions Q10.

Left out: LGTESTP4's successful add. Its CA-BROKERID / CA-PAYMENT fields are space-filled and moved to binary (GnuCOBOL 931773840, det port 0; C11), filed as #4652.

Note: this changes the harness and oracle fingerprints, so existing ledger entries go stale-warn until the next scheduled refresh. #4647 also touches equivalence_cics.py; whichever PR lands second rebases.

🤖 Generated with Claude Code

squid-protocol and others added 3 commits October 7, 2026 20:37
Eleven GenApp programs whose only proof gap was 'no case':
- the front ends LGACUS01, LGAPOL01, LGDPOL01, LGICUS01, LGIPOL01, LGUCUS01,
  LGUPOL01, each running its whole back-end chain (Db2 service, VSAM
  service, LGSTSQ) in the task, with the back-end cases' inputs plus the
  front end's own paths (no COMMAREA, short COMMAREA, wrong request id);
- the BMS test transactions LGTESTP1-4 (SSMAP maps, twelve programs per
  task): inquire / add / delete / update, CLEAR, PF3, MAPFAIL, bad option.

Harness / translator fixes, each with a test:
- stage_copybooks no longer stages a .bms map source as <NAME>.cpy (it
  shadowed the generated symbolic map COPY SSMAP means);
- a program with no DFHCOMMAREA still gets EIBCALEN from the task's area
  (LGTESTP's IF EIBCALEN > 0 GO TO A-GAIN);
- an integer literal compared with an alphanumeric item keeps its digits
  as written (ENP4CNOO Not = 0000000000);
- each LINKed SQL program's GG-SQL-IDs start at the next free hundred
  (1000 x its place ran past PIC 9(4) at the tenth program);
- ggsql.c refuses a statement the CLI fails in the client (-99999, Q10).

LGTESTP4's successful add is left out: #4652 (C11).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-end cases (#4270)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…#4647 (#4270)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@squid-protocol
squid-protocol force-pushed the equiv/4270-genapp-front-ends branch from cacc05b to f5f9ecd Compare October 8, 2026 00:59
@github-actions

github-actions Bot commented Oct 8, 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 8, 2026 14:33
@squid-protocol
squid-protocol merged commit a3a992f into main Oct 8, 2026
37 checks passed
@squid-protocol
squid-protocol deleted the equiv/4270-genapp-front-ends branch October 8, 2026 14:33
squid-protocol added a commit that referenced this pull request Oct 8, 2026
squid-protocol added a commit that referenced this pull request Oct 8, 2026
Main's #4653 Lit.digits and #4665's NumLit both pass a numeric literal
compared with a nonnumeric item as its characters. Measured against cobc
3.1.2 -std=ibm (IF and EVALUATE): unsigned integer literals as written
agree on both; a signed literal is compared with its sign character
('12' is not +12/-12, '+12' is +12, '-12' is -12), which main's
sign-stripping digits got wrong and IBM differs on (C13: refused); a
decimal literal against an alphanumeric item is its digits as written
('012' = 0.12, which main got wrong). Kept NumLit/literal_text as the one
path and dropped Lit.digits.

New measurement: a numeric-edited item compared for equality with a
literal of more decimal places than its own is decided by cobc when it
compiles (ZZ9 holding 125: not = 12.5, NOT = 12.5, yet neither < nor >),
so that shape is refused by name too (C13); IBM rejects the non-integer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MQNoe4wPJgr7dbUvs3DG6D
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