Skip to content

equivalence: cases for the CBSA programs made whole (Part of #4270) - #4810

Merged
squid-protocol merged 9 commits into
mainfrom
equiv/4270-cbsa-whole-cases
Oct 9, 2026
Merged

squid-protocol merged 9 commits into
mainfrom
equiv/4270-cbsa-whole-cases

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

Part of #4270. These are equivalence cases for the CBSA programs that now translate whole but had no case. Every case below is PROVED in a full local det sweep (Db2 local, proof_sweep.py --det-only; the result was "sweep: as expected", 92 proved, only the 3 baseline cases not proven). The coverage ledger was re-measured from that sweep. The rendered evidence report is not committed (#4703).

The "before" level is L1: translated whole in the census of main 5242878, with no case. The committed report still shows L0 for the BNK1 / CREACC / ACCTCTRL programs because its survey is frozen from an earlier commit. The "after" levels come from evidence_report.py --baseline --sweep <local sweep>.

program case scenarios (+ enumerated SQL faults) level before → after gaps left
BNKMENU cbsa-bnkmenu 18: first entry; options 1-7 and A (RETURN IMMEDIATE); invalid / lower-case / blank action; MAPFAIL; PA1, PF3, PF12, CLEAR, other key L1 → L2 (paragraphs 19/25, branches 35/62) failure branches after SEND / RETURN, ABEND-THIS-TASK: no fault injectable
BNK1CAC cbsa-bnk1cac 26 + 7: create CURRENT / ISA / MORTGAGE / LOAN / SAVING, lower-case types, DEEDIT; every type / rate / overdraft check; CREACC fail codes 1, 8, 9; MAPFAIL abend; AID keys L1 → L3 (25/25, 60/97) failure branches after SEND / RETURN / LINK; customer number with no digit (DEEDIT not modelled)
CREACC cbsa-creacc 18 + 8: each account type, type prefix / case / blank / invalid, customer not found, ten accounts, the '9' count path, ACCOUNT INSERT -803, PROCTRAN and CONTROL SELECT / UPDATE failures (ABNDPROC + HNCS / HWPT) L1 → L3 (34/34, 26/38) ENQ / DEQ failures (not injectable); February leap-year branch (clock is 1 Oct)
BNK1CRA cbsa-bnk1cra 22 + 3: credit / debit / unsigned, payment (origin NONE) insufficient funds and mortgage, account not found / NULL date / zero, sign and amount checks L1 → L3 (28/28, 52/67) failure branches after SEND / RETURN / LINK / INQUIRE
BNK1DAC cbsa-bnk1dac 17 + 5: inquire found / mortgage / not found / empty / DEEDIT; delete, delete LOAN, not found, NULL statement (HRAC), delete without inquiry; AID keys L1 → L3 (31/31, 44/60) DELACC fail code 2; failure branches after SEND / RETURN / LINK
BNK1DCS cbsa-bnk1dcs 22: first entry UCTRAN / NOUCTRAN, inquire found / not found / no number / DEEDIT, PF10 amend and its checks, PF5 with customer 0, update OK / Dr / bad title / blank address / not found, AID keys with UCTRANST restore L1 → L2 (46/51, 62/102) valid PF5 delete: DELCUS is not whole (4 holes); a RECEIVE after SET UCTRANST (refused, X26)
ACCTCTRL cbsa-acctctrl 3: count, caller data initialised, SELECT -913 L0* → L4 (7/7, 2/2) mutants (#4628)
GETCOMPY / GETSCODE cbsa-getcompy / cbsa-getscode 3 each L1 → L4 mutants
INQCUST cbsa-inqcust 25 L1 → L2 (88.0% paragraphs) RLS abend exit (not injectable)
CRDTAGY1-5 cbsa-crdtagy1..5 7 each L1 → L2 (57.1% paragraphs) DELAY failure / POPULATE-TIME-DATE, PUT CONTAINER failure (not injectable)

* ACCTCTRL's census row showed 3 holes in the committed report's frozen survey. It is whole on main.

The eight cases on the last three rows come from the paused branch equiv/4270-cbsa-cases. Its prerequisite #4647 has merged, and they are re-proved here on main. As a side effect of the sweep's ledger update, INQACCCU also moves L1 → L2: its existing Db2 case now has a current ledger entry.

Refused by name (no case, a bug filed or updated)

Harness fixes (own commit 2baebcc, tests/tools/equivalence_cics.py)

  1. The task's terminal, stated: a case's or scenario's "termid", "uctranst" and "origin". They go to EIBTRMID, $GGCICS_FACILITY / terminals.cfg, $GGCICS_UCTRANST and $GGCICS_ORIGIN on the stub, and to withTermid / withUctranst / withOrigin on CicsTask, as the cics-crucible runner already does. When unstated, nothing changes (RETURN IMMEDIATE, INQUIRE TERMINAL UCTRANST and INQUIRE ASSOCIATION stay refused).
  2. SEND CONTROL compared: the stub's SEND-CONTROL line is now a COBOL-side event, so options and cursor are compared. Before, every CLEAR key differed by a missing event.
  3. SQL after a SYNCPOINT ROLLBACK: the task's Db2 connection is rolled back there and then, and later SQL commits with the task, as the oracle's Db2 does. Before, the whole transaction was marked rollback-only, which lost CREACC's INSERTs after INQACCCU's rollback; this was found by the enumerated SQL faults. The register's Q3 says so.

Unit tests are in test_equivalence_cics.py. A regression run of genapp-lgtestp1/3, carddemo-menu, genapp-lgicvs01 and cbsa-dbcrfun proved, and the full sweep above found no new failure. No det/ translator change.

Every rate or amount a case types into NUMVAL → COMP-1 / COMP-2 is a binary fraction (C6: IBM's HFP and the oracle's IEEE agree only on those). The register gives the new proofs as evidence for C12, X24, L3, X26, X27, X29 and Q3 (entry files plus the rendered page).

Gates

pr_gates.py --fast 5/5 PASS, --ratchets 7/7 PASS (JDK 17). The targeted tests pass (EVIDENCE_REPORT_ADVISORY=1, as in CI). evidence.py status --ci rc 0: the harness change leaves records stale only for the scheduled refresh.

🤖 Generated with Claude Code

squid-protocol and others added 4 commits October 9, 2026 12:49
…ompared, SQL after a SYNCPOINT ROLLBACK kept (#4270)

Harness fixes the CBSA BMS front-end cases need (Part of #4270):
- A case's or scenario's "termid" / "uctranst" / "origin": the task's terminal (EIBTRMID, $GGCICS_FACILITY and
  terminals.cfg / CicsTask.withTermid), its UCTRANST and its origin data, stated on both sides as the cics-crucible
  runner states them. Unstated, None: RETURN IMMEDIATE, INQUIRE TERMINAL UCTRANST and INQUIRE ASSOCIATION are refused
  by both runtimes, as before.
- SEND CONTROL: the stub's SEND-CONTROL line is now an event on the COBOL side (CicsTask already recorded one), its
  options and CURSOR compared. Before, a CLEAR key's SEND CONTROL ERASE FREEKB differed by a missing event.
- SYNCPOINT ROLLBACK rolls the task's Db2 connection back there and then; the SQL after it is a new unit of work
  committed with the task, as the COBOL side's Db2 does (CBSA INQACCCU's cursor failing inside CREACC's task).
  Before, the whole Db2 transaction was marked rollback-only and the caller's later INSERTs were lost on the Java
  side. oracle_assumptions.md Q3 says so; X27 names the cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fifteen new CBSA cases, each proved in a local det sweep (Db2 local):
- BMS front ends, each with its LINKed back ends run in the task: cbsa-bnkmenu, cbsa-bnk1cac (CREACC, INQCUST,
  INQACCCU, ABNDPROC), cbsa-bnk1cra (DBCRFUN; INQUIRE ASSOCIATION from a stated origin), cbsa-bnk1dac (INQACC,
  DELACC), cbsa-bnk1dcs (INQCUST, UPDCUST; INQUIRE / SET TERMINAL UCTRANST from a stated terminal).
- LINKed services: cbsa-creacc, cbsa-acctctrl.
- From the paused equiv/4270-cbsa-cases branch (its channel prerequisite #4647 has merged), re-proved on main:
  cbsa-getcompy, cbsa-getscode, cbsa-inqcust, cbsa-crdtagy1..5.
- det_sweep_coverage.json re-measured by a full local det sweep (as expected; the harness fingerprints moved).
- Register: C12, X24, L3 (prior art), X26, X27, X29 and Q3 name the new proofs.

Not cased (refused by name): BNK1TFN, BNK1UAC, BNK1CCS (#4695: RETURN LENGTH past the DTO; BNK1UAC also
#4806), BNK1CCA (#4807: BMS OCCURS map).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-cases

# Conflicts:
#	tests/equivalence/det_sweep_coverage.json
@squid-protocol squid-protocol added enhancement New feature, sensor, or structural signature testing Unit, integration, and E2E pipeline verification priority: medium labels Oct 9, 2026
@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 and others added 2 commits October 9, 2026 14:05
…-cases

# Conflicts:
#	tests/equivalence/det_sweep_coverage.json
…uivalence_cics: terminal facts + URIMAPs / case clock kept together

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
squid-protocol and others added 2 commits October 9, 2026 17:38
… from the 24-case sweep under the merged harness

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TBJdDBRtJis5hzE244NQKV
@squid-protocol

Copy link
Copy Markdown
Owner Author

CI shepherd: this PR conflicts with main, so no checks ran. Merge origin/main into it and regenerate generated files with their tools (never hand-merge them; see .claude/agents/gitgalaxy-pr-worker.md), then push.

…cases; split --base + update from the sweep

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TBJdDBRtJis5hzE244NQKV
@squid-protocol
squid-protocol marked this pull request as ready for review October 9, 2026 23:07
@squid-protocol
squid-protocol merged commit f8fc283 into main Oct 9, 2026
29 checks passed
@squid-protocol
squid-protocol deleted the equiv/4270-cbsa-whole-cases branch October 9, 2026 23:07
squid-protocol added a commit that referenced this pull request Oct 9, 2026
…e; ledger re-applied from its sweeps

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TBJdDBRtJis5hzE244NQKV
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature, sensor, or structural signature priority: medium testing Unit, integration, and E2E pipeline verification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant