Skip to content

CICS: WEB OPEN / CONVERSE / CLOSE, the HTTP client, on a stated peer (Part of #4767) - #4877

Merged
squid-protocol merged 4 commits into
mainfrom
feat/4767-web-client
Oct 11, 2026
Merged

squid-protocol merged 4 commits into
mainfrom
feat/4767-web-client

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

Part of #4767 (zECS, #4270). Slice 2 of the zECS cluster plan. Independent of #4873 (both off main); together they make ECS001 translate whole (105/105, compiles).

Design (the issue's open question, settled)

The HTTP server is not part of the region, so it is a stated fact: http_peers (case or scenario) lists each peer's scheme, host, port, the CLIENT URIMAP naming it and that URIMAP's path, and the response to each request (method + path + query matched, in order, each answering once). Both runtimes read it (CicsTask.withHttpPeers, $GGCICS_HTTP); a connection to a peer, or a request, the run does not state is refused at run time. Every request the program sends is recorded as a WEB-CONVERSE event (host, method, path, query, media type + body when there is a body, RESP/RESP2) and compared exactly by the equivalence harness. The exchange is in the program's own characters, so CLIENTCONV and its CVDAs change nothing within the model (register X35).

What

  • Spec first: gitgalaxy/standards/cics/commands/web.py (WEB OPEN / CONVERSE / CLOSE full entries: options, groups, IBM's conditions with RESP2 -- OPEN LENGERR 21, INVREQ 40 / 138; CONVERSE NOTOPEN 27, INVREQ 33 / 34 / 54 / 76, LENGERR 5 / 8 / 16 / 50 / 57 / 59; CLOSE NOTOPEN 27 -- refusals with reasons, the fact, runtime refusals); removed from api.py's name-only list.
  • det translator (det/cics.py Cics.web), stub translator (equivalence_cics.py _web), CicsTask (webOpenHost / webOpenUrimap / webConverse / webClose) and ggcics.c (GGCWOPN / GGCWCNV / GGCWCLS).
  • Equivalence harness: http_peers checked, stated to both sides, the WEB-CONVERSE event parsed and compared.
  • Refused by name (IBM silent, or unused by zECS): two conditions at once (IBM orders none), TRACE / OPTIONS, MAXLENGTH 0, PORTNUMBER < 1, no PATH on a HOST session, a blank MEDIATYPE with a body, a reason phrase longer than STATUSLEN (LENGERR 58 leaves the area unstated), lengths past their area (X6), and CERTIFICATE / CODEPAGE / CHARACTERSET / DOCTOKEN / CONTAINER / SET / NOTRUNCATE / TOCONTAINER / a CONVERSE URIMAP ...

Measured (det survey, zECS only; main 0ad5dba)

program main this PR this PR + #4873
ECS001 100/105 104/105 105/105 whole, compiles
ZECS000 166/173 169/173 170/173
ZECS001 528/561 533/561 534/561
ZECS003 65/73 68/73 69/73
ZECSPLT 27/27 27/27 27/27

zECS translated whole: 1/5 -> 2/5 with both PRs. Left after both: ZECS000 READ GTEQ (templated file name, #4771) + WEB PARSE x2; ZECS003 READ GTEQ, DELETE GENERIC, WEB PARSE, WEB SEND; ZECS001 the server side (RECEIVE / EXTRACT / READ+WRITE HTTPHEADER / SEND), GETMAIN / FREEMAIN / SET ADDRESS, CALL ZUIDSTCK, GET COUNTER, WEB PARSE (and a pre-existing compile error, duplicate FILLER names, unrelated to WEB).

Evidence

  • Tests first: test_det_translate (translation + refusals + RESP sample), test_equivalence_cics (stub calls; http_peers check, the cfg, the event read back and compared exactly), test_cics_runtimes (one step list run on the C stub and on CicsTask, answered line for line alike, and the same refusals), test_cics_spec (counts).
  • pr_gates.py --fast 5/5; --ratchets 7/7 (none skipped). det_port.py check: 104/104 ports unchanged (DetCics untouched on purpose).
  • No cics-crucible case: its SPEC has no WEB-CONVERSE event (a crucible SPEC change, separate PR; no tag / pin bump here). ECS001 equivalence case is the next step for the proof.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AUWeQX7v4QBdErFbghEEEX

squid-protocol and others added 2 commits October 10, 2026 23:14
…(Part of #4767)

zECS: ECS001's client and ZECS000 / ZECS001 / ZECS003's replication talk
HTTP through WEB OPEN (URIMAP or HOST / HOSTLENGTH / PORTNUMBER / SCHEME),
WEB CONVERSE and WEB CLOSE. The server is a stated fact (http_peers: scheme,
host, port, CLIENT URIMAP, and the response to each request); each request
sent is recorded (WEB-CONVERSE) and compared. Spec entry first
(commands/web.py), both translators, CicsTask and ggcics.c (one step list,
answered alike), the equivalence harness's peers and event. IBM's
conditions with their RESP2; what IBM leaves open refused by name.
Register X35.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AUWeQX7v4QBdErFbghEEEX
…Part of #4767)

A new DetCics method would mark every CICS det port changed (90 re-proofs)
for code none of them calls; the PastFrom check now sits in the generated
statement instead. ruff format of web.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AUWeQX7v4QBdErFbghEEEX
@squid-protocol squid-protocol added enhancement New feature, sensor, or structural signature legacy-modernization COBOL refractor, dead-code extraction, and JCL forging priority: medium labels Oct 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🐦‍⬛ Muninn Security Scan

✅ No security issues found.

🐦‍⬛ Powered by Muninn · Skald Lab

# Conflicts:
#	docs/language_status/oracle_assumptions.md
#	tests/cobol_mainframe/test_det_translate.py
#	tests/cobol_mainframe/test_equivalence_cics.py
@squid-protocol squid-protocol added the shepherd:merge Maintainer: merge when green (auto-merge, squash). Guide: docs/ci.md label Oct 11, 2026
@squid-protocol

Copy link
Copy Markdown
Owner Author

No description provided.

@squid-protocol
squid-protocol marked this pull request as ready for review October 11, 2026 10:46
@squid-protocol
squid-protocol enabled auto-merge (squash) October 11, 2026 10:46
@squid-protocol

Copy link
Copy Markdown
Owner Author

No description provided.

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 legacy-modernization COBOL refractor, dead-code extraction, and JCL forging priority: medium shepherd:merge Maintainer: merge when green (auto-merge, squash). Guide: docs/ci.md

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant