Skip to content

IBM WCA4Z's published LGACDB01 translation through our equivalence harness - #4177

Merged
squid-protocol merged 2 commits into
mainfrom
exp/ibm-wca4z-lgacdb01
Oct 2, 2026
Merged

squid-protocol merged 2 commits into
mainfrom
exp/ibm-wca4z-lgacdb01

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

What

tests/tools/ibm_wca4z_port.py runs IBM watsonx Code Assistant for Z's published translation of GenApp LGACDB01 (paragraph INSERT-CUSTOMER) through our equivalence harness, as a third port beside our det and model ports.

The source is sandeephans/validation-c2j at 967d00b, the data behind arXiv 2506.10999 / 2504.10548. The repository has no license, so it is fetched at that pinned commit at run time and nothing from it is committed.

The port is our det port of genapp-lgacdb01 with IBM's Lgacdb01.insertCustomer, unmodified, in place of our INSERT-CUSTOMER method. The thin adapter in tests/tools/ibm_wca4z/ (ours) has three parts:

  • host variables marshalled in and out;
  • a JDBC driver for IBM's placeholder endpoint_url that answers with the task's own transaction-bound Db2 connection;
  • a JZOS compile shim that throws on every byte conversion. The adapter never uses those.

Full record: docs/language_status/ibm_wca4z_lgacdb01.md.

Results

Scenario Stock COBOL IBM's INSERT-CUSTOMER
add-with-counter '00'; CUSTOMER row 1000011 Db2 -4461, parameter 4 not set; swallowed; no row
add-without-counter '00'; row 1000001 -4461, parameter 3; no row; CA-CUSTOMER-NUM 0
add-blank-optional-fields '00'; row 1000020 -4461, parameter 4; no row
add-long-email '00'; row 1000030 -4461, parameter 4; no row

Root causes, in IBM's Lgacdb01.java:

  • // ps.setDate(4, …getDateofbirth()); in the counter branch and // ps.setDate(3, …) in the DEFAULT-key branch: DATEOFBIRTH is never bound.
  • // caReturnCode = 90; and // errorMsg.writeErrorMessage(); replaced by System.out.println("[EXCEPTION CAUGHT] " + exception);. The task runs on into LGACDB02, whose CUSTOMER_SECURE insert breaks its foreign key, then into GenApp's LGSTSQ error path, which the harness refuses by name (register X6).
  • equals() returning true is confirmed in the code but not exercised.

IBM's refactored COBOL: its INSERT-CUSTOMER is textually identical to stock. It is not usable as a reference of its own: there is no mainline, the COMMAREA is in WORKING-STORAGE, and every run falls through into WRITE-ERROR-MESSAGE.

IBM's own JUnit does not compile against the published Java: insertCustomer() is called with no arguments, but the method takes three. The recorded run in their repository is 2 empty passes and 2 failures.

Found in our det port: LINK LGSTSQ COMMAREA(ERROR-MSG) is marshalled with CA-ERROR-MSG's DTO and reads past the 71-byte record (StringIndexOutOfBoundsException). This is on GenApp error paths that no proof had reached (M2, #4173). --clamp-error-msg works around it in the scratch copy only, for the diagnostic runs. It needs its own fix in the det emitter.

Tests

  • tests/cobol_mainframe/test_ibm_wca4z_port.py covers the paragraph swap and the clamp, offline.
  • ruff_audit.py --ci is clean.
  • test_source_reads passes.
  • The end-to-end run was reproduced on the committed code: primary run and --junit.

🤖 Generated with Claude Code

https://claude.ai/code/session_01RZE6us7fUL6Hynk59rWLvZ

squid-protocol and others added 2 commits October 2, 2026 17:19
…ce harness

tests/tools/ibm_wca4z_port.py fetches IBM's validation-c2j repository at its pinned commit (no license: nothing of it
is committed). It runs IBM's Lgacdb01.insertCustomer in place of our det port's INSERT-CUSTOMER method, through a
thin adapter (tests/tools/ibm_wca4z):
- the paragraph's host variables, marshalled in and out;
- a JDBC driver for IBM's "endpoint_url" that answers with the task's own Db2 connection;
- a JZOS compile shim that refuses every byte conversion.

Results:
- Not proven on all 4 genapp-lgacdb01 scenarios. IBM's INSERT never binds DATEOFBIRTH (setDate commented out), so
  Db2 refuses it (-4461). The failure is swallowed (println instead of '90' / WRITE-ERROR-MESSAGE / RETURN), and the
  task runs on into GenApp's error path, which the harness refuses (X6).
- IBM's refactored COBOL has the stock INSERT-CUSTOMER, textually identical.
- IBM's own generated JUnit test does not compile against the published Java (insertCustomer() with no arguments).
- Found in our det port: LINK LGSTSQ COMMAREA(ERROR-MSG) is marshalled with CA-ERROR-MSG's DTO and reads past the
  record. This is on error paths no proof had reached; see M2 / #4173. --clamp-error-msg works around it in the
  scratch copy only.

docs/language_status/ibm_wca4z_lgacdb01.md has the method, the per-scenario results, the root causes and the
limits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RZE6us7fUL6Hynk59rWLvZ
# Conflicts:
#	docs/language_status/README.md
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

🐦‍⬛ Muninn Security Scan

✅ No security issues found.

🐦‍⬛ Powered by Muninn · Skald Lab

@squid-protocol
squid-protocol merged commit 45d6dd1 into main Oct 2, 2026
29 checks passed
@squid-protocol
squid-protocol deleted the exp/ibm-wca4z-lgacdb01 branch October 2, 2026 22:13
squid-protocol added a commit that referenced this pull request Oct 2, 2026
…ur own ERROR-MSG bug (#4181), artifact caveats

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RZE6us7fUL6Hynk59rWLvZ
squid-protocol added a commit that referenced this pull request Oct 2, 2026
…d and proven (#4176)

* docs(research): GenApp LGACDB01, two independent translations, scanned and proven (draft)

Post-hoc comparison of the original COBOL, IBM WCA4Z's refactored COBOL and
published Java, and our det port: IBM's published validation, our equivalence
harness, and GitGalaxy's scan. Section 4.3 (IBM's Java through our harness)
pending.

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

* docs(wiki): 05-18 -- the model ports' 46 TODOs are mostly the scaffold's own, about 4 are the model's (per #4169)

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

* docs(research): LGACDB01 -- harness results for IBM's Java (#4177), our own ERROR-MSG bug (#4181), artifact caveats

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
squid-protocol added a commit that referenced this pull request Oct 3, 2026
…ternal-fault experiment (#4194)

* thirdparty_port: Lightyear and SENTINEL IDE CardDemo ports through the equivalence harness; external faults

The pattern of #4177 / #4190: each port fetched at a pinned commit (no licence on
either repository: nothing of theirs committed), built as it ships (SENTINEL: its
program classes compiled as they are, the project's three non-compiling files are
none of them), run on our cases' inputs as text lines, judged by compare_run in
full / data / clock-masked tiers. --external-faults reproduces each case fault that
is an input OPEN failing with status 35 by running the port with that file absent,
for these ports and Devin's eval arms.

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

* docs(research): Lightyear and SENTINEL IDE through the harness; external-fault experiment (with Devin's eval arms)

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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