Repository navigation
det/CICS: EXEC CICS WEB family (SEND, RECEIVE, EXTRACT, READ/WRITE HTTPHEADER, PARSE URL, OPEN, CONVERSE, CLOSE) -- zECS needs HTTP (design first) #4767
Description
Part of #4270 (burned estate zECS). After the ZECSPLT slice, four of zECS's five programs (ECS001, ZECS000, ZECS001, ZECS003) are held by the same family: EXEC CICS WEB .... zECS is a key/value cache served over HTTP, so these programs fundamentally need HTTP; they should not be half-modelled.
Measured on current main (det survey, zECS only; statements): WEB SEND 11, WEB CONVERSE 7, WEB OPEN 4, WEB CLOSE 4, WEB PARSE 4, WEB RECEIVE 2, WEB EXTRACT 1, WEB READ 1, WEB WRITE 1. Per program: ECS001 (OPEN/CONVERSE/CLOSE: HTTP client), ZECS000 and ZECS003 (PARSE + OPEN/CONVERSE/CLOSE + SEND), ZECS001 (all of them: the HTTP server side, RECEIVE/EXTRACT/READ HTTPHEADER/SEND/WRITE HTTPHEADER).
Design question to settle first (spec entry + decision before code): the harness has to STATE the HTTP peer. Server side: the inbound request (method, URL pieces, headers, body) as a fact of the task, and the response captured as an event. Client side (WEB OPEN/CONVERSE/CLOSE): a stated peer script (request -> response) per host/path, refused when a program talks to a peer the run did not state. IBM refs: WEB RECEIVE, WEB SEND, WEB EXTRACT, WEB READ/WRITE HTTPHEADER, WEB PARSE URL, WEB OPEN, WEB CONVERSE, WEB CLOSE. Needs a cics-crucible SPEC addition (new events, additive) and cases.
Programs made whole by this family alone: 0 of 4 (each also needs DOCUMENT, see the DOCUMENT issue, and others listed on the zECS umbrella). Do the two together.
Remaining slices (as of 2026-10-18)
Done so far: 6 merged PRs (#5378, #5214, #4877, #4898, #4938, #5026).
- (verify) Runner HTTP driver: WEB-RECEIVE / WEB-SEND events and WEB-OPEN/CONVERSE/CLOSE peer events on the stub and
CicsTask(tests/tools/cics_crucible.py). Check: cics-cruciblegt-http-inboundis served instead of refused;tests/cics_cruciblestays green. Blocked on the owner ruling below (PR docs: register X37 records why gt-http-inbound is not servable yet (Part of #4767) #5378, register X37). (1 PR) (register X35/X37: gt-web-* are pinned ledger rows at v0.10.0, no new DIFFERS (Part of #4767) #6304) - Pin bump +
gt-web-*cases: bumpPINNED_REFintests/_cics_crucible_pin.pypast v0.9.0 and re-baseline the ledger (owner OK needed, per the 2026-10-14 comment). Check: no new DIFFERS for gt-web-parse-url, gt-web-server-receive, gt-web-server-send, gt-web-client. (1 PR) (register X35/X37: gt-web-* are pinned ledger rows at v0.10.0, no new DIFFERS (Part of #4767) #6304) - (verify) Client-side crucible WEB events (peer host/query/headers in the SPEC). Check: a
gt-web-clientscenario runs on both runtimes with an equal log. Skip if the runner-driver slice covers it. (1 PR) (crucible: gt-web-client equal log on cobol-stub and both java sides, asserted in one run (Part of #4767) #6487) - ZECS001 and ZECS000/003 equivalence case, evidence record and ladder move. Waits on det/CICS: zECS file-name templates (READ GTEQ / DELETE GENERIC), GETMAIN/FREEMAIN pointers, CALL ZUIDSTCK #4771 (pointer holes) and the DOCUMENT issue. Check: a case exists and
evidence.py proverecords a level. (1 PR)
Done when: every EXEC CICS WEB command the burned zECS programs use is modelled or refused by name, and the crucible'sgt-web-*cases pass on both runtimes (per the X37 survey zECS shows no WEB hole, 922/939 statements).
Owner decision needed: should the runner accept WEB SEND/RECEIVE CHARACTERSET / HOSTCODEPAGE and literal MEDIATYPE('...')? (docs: register X37 records why gt-http-inbound is not servable yet (Part of #4767) #5378 calls them both "out of scope (owner ruling)" and "blocked by the two rulings".) Also: OK for the pin bump.
Out of scope here: WEB EXTRACT / READ HTTPHEADER crucible events (no burned program needs them).
Drafted 2026-10-18 by a Sonnet triage pass from this issue, its comments and the bodies of its "Part of" PRs; (verify) items were not checked against main. Tick boxes as slices merge; edit freely.
Activity
[-]det/CICS: EXEC CICS WEB family (SEND, RECEIVE, EXTRACT, READ/WRITE HTTPHEADER, PARSE URL, OPEN, CONVERSE, CLOSE) -- zECS needs HTTP (design first):priority[/-][+]det/CICS: EXEC CICS WEB family (SEND, RECEIVE, EXTRACT, READ/WRITE HTTPHEADER, PARSE URL, OPEN, CONVERSE, CLOSE) -- zECS needs HTTP (design first)[/+]CICS: WEB OPEN / CONVERSE / CLOSE, the HTTP client, on a stated peer …
CICS: WEB SEND, the server's response, on a stated request (Part of #…
CICS: WEB PARSE URL's escape check reads ASCII hex only (cultural gau…
CICS: WEB PARSE URL and WEB SEND (server), zECS 2/5 -> 4/5 whole (Par…
CICS: GET DCOUNTER INCREMENT [WRAP] and WEB SEND DOCTOKEN (Part of #4767
CICS: the server reads its request -- WEB EXTRACT / RECEIVE / HTTPHEA…
squid-protocol commentedon Oct 12, 2026
Sibling gaps from PR #4938 filed: #4940 (WEB READ FORMFIELD/QUERYPARM + browse forms), #4941 (WEB RETRIEVE); pointer lane, CALL ZUIDSTCK and the run-time file-name template for the ZECS000/ZECS003 cases are #4771.
squid-protocol commentedon Oct 14, 2026
Crucible-first backfill steps (cics-crucible, Sonnet ~20-30 min each)
Owner 2026-10-14: these cases are written as churn backfill while gitgalaxy CI is busy. cics-crucible has no gating CI, so a PR there costs almost nothing on the shared runner pool. Each step is one case with expected logs hand-derived from cited IBM docs (cics-crucible AGENTS.md), gated by
tools/validate.py, as one PR there. The tag and gitgalaxy pin bump are a separate step that needs owner OK.Owner decision first: C2-C5 need a stated HTTP peer model (SPEC change). Only C1 can start now.
WEB PARSE URLneeds no peer, so no SPEC change (breadcrumb). Scenarios: a full http URL with SCHEME / HOST / PORT / PATH / QUERYSTRING; the default port; https; a malformed URL gives INVREQ (find the RESP2). Cite: CICS TS 6.x "WEB PARSE URL". Depends: none.httptrigger via URIMAP (sibling:gt-urimap-browse), a WEB-SEND response event, and a stated client peer script (talking to a peer the script doesn't state is a defined failure). Cite: "WEB RECEIVE (server)", "WEB SEND (server)".Release (shared): batch the merged case PRs, run gitgalaxy's
cics_cruciblerunner against crucible main and review the baseline ledger. With owner OK, tag the next version after v0.5.0, bumpPINNED_REFintests/_cics_crucible_pin.py, and re-baseline: oneci-lane item when CI is calm.38 remaining items
crucible: committed deterministic port of GTWCLI; gt-web-client passe…
squid-protocol commentedon Oct 24, 2026
#6457 merged: a partial slice of [c:5ddf2663] "(verify) Client-side crucible WEB events (peer host/query/headers in the SPEC). Check: a
gt-web-clientscenario runs on both runtimes with an equal log. Skip if the runner-driver slice covers it. (1"; left: the java-ported and java-facade cells of gt-web-client now pass with the crucible's equal log (det port committed); the barejavacell is the generated skeleton and fails for every case by design, and baseline.json is unchanged because the default runner reads ports/, not det-ports/ (same as pc-re (promoter-bot)WEB PARSE URL: IPv6 host and LENGERR on both runtimes; gt-web-parse-u…
squid-protocol commentedon Oct 24, 2026
#6472 merged: a partial slice of [c:5ddf2663] "(verify) Client-side crucible WEB events (peer host/query/headers in the SPEC). Check: a
gt-web-clientscenario runs on both runtimes with an equal log. Skip if the runner-driver slice covers it. (1"; left: GTWPARS det port (java-ported / java-facade of gt-web-parse-url); server cells wait on the CHARACTERSET / HTTPHEADER ruling; ZECS001 waits on #4771 (promoter-bot)cics-crucible: re-ledger the det-port-only cells and the report (Part…
crucible: committed deterministic port of GTWPARS; gt-web-parse-url p…
squid-protocol commentedon Oct 24, 2026
#6479 merged: a partial slice of [c:5ddf2663] "(verify) Client-side crucible WEB events (peer host/query/headers in the SPEC). Check: a
gt-web-clientscenario runs on both runtimes with an equal log. Skip if the runner-driver slice covers it. (1"; left: GTWPARS det port done; server cells wait on the CHARACTERSET / HTTPHEADER ruling; ZECS001 waits on #4771 (promoter-bot)squid-protocol commentedon Oct 24, 2026
Churn run
4767-20261024T1516Z(host nyx) ended without a PR. No code: remaining work overlaps #6484 or belongs in cics-crucible. Proposed checklist lines 1-4 on #4767; line 1 ticks when #6484 merges.cics-crucible: det-port-only cases run their deterministic port in th…
squid-protocol commentedon Oct 24, 2026
#6484 merged: a partial slice of [c:5ddf2663] "(verify) Client-side crucible WEB events (peer host/query/headers in the SPEC). Check: a
gt-web-clientscenario runs on both runtimes with an equal log. Skip if the runner-driver slice covers it. (1"; left:gt-web-clientnow passes java-ported/java-facade 2/2 each in the default run (client WEB events on the Java runtime); the "equal log on both runtimes" check was already covered by cobol-stub, nothing further known (promoter-bot)squid-protocol commentedon Oct 24, 2026
#6484 merged: a partial slice of [c:e120cf84] "ZECS001 and ZECS000/003 equivalence case, evidence record and ladder move. Waits on #4771 (pointer holes) and the DOCUMENT issue. Check: a case exists and
evidence.py proverecords a level. (1 PR)"; left: not worked on beyond this wiring (waits on #4771 / DOCUMENT) (promoter-bot)crucible: gt-web-client e2e asserts cobol-stub and both java sides in…
squid-protocol commentedon Oct 24, 2026
Churn run
4767-20261024T1618Z(host nyx) ended without a PR. Item already done on main (#6487); no PR. Remaining ZECS lines blocked on owner CHARACTERSET/HOSTCODEPAGE/HTTPHEADER ruling.