Skip to content

CICS: the server reads its request -- WEB EXTRACT / RECEIVE / HTTPHEADER, GET DCOUNTER, WEB SEND DOCTOKEN (Part of #4767) - #4938

Merged
squid-protocol merged 2 commits into
mainfrom
feat/4767-web-server-read
Oct 12, 2026
Merged

squid-protocol merged 2 commits into
mainfrom
feat/4767-web-server-read

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

Part of #4767.

What

The zECS server side, slice 2 (after #4898): the server reads the request it serves, every command per IBM's documentation, every gap ASSUMED or REFUSED by name in the register.

  • WEB EXTRACT (server form: SCHEME HOST HTTPMETHOD HTTPVERSION PATH PORTNUMBER QUERYSTRING REQUESTTYPE + their lengths), WEB RECEIVE INTO / LENGTH / MAXLENGTH / MEDIATYPE / SRVCONVERT / NOSRVCONVERT, WEB READ HTTPHEADER, WEB WRITE HTTPHEADER (recorded as a new WEB-HEADER event and compared). All read the stated http_request. Register X38.
  • GET DCOUNTER INCREMENT [WRAP] (X30 extended): value before the increment, counter + n; WRAP accepted but a counter that would pass 4294967295 is refused (the maximum is not stated by the run).
  • WEB SEND DOCTOKEN (X37 extended): the response is the document the task created.
  • Spec first (commands/web.py, task.py), then CicsTask, the C stub (GGCWEXT/GGCWRCV/GGCWRDH/GGCWWRH/GGCGDCN/GGCWSDC), both translators, http_request_cfg (+ V/B lines).
  • Tests cover each command's whole option class: stub and CicsTask answer one step table line for line (4 request fixtures x every condition, refusal and RESP2), both translators refuse every unmodelled option by name.

Measured (det survey, zECS, compare --before-baseline against origin/main)

ZECS001 544/561 holes=17 -> 549/561 holes=12. ECS001 105/105, ZECS000 173/173, ZECS003 73/73 unchanged (whole). Holes left in ZECS001: CALL ZUIDSTCK (an assembler program the corpus does not ship: its TOD value would have to be stated), GETMAIN, FREEMAIN, SET ADDRESS OF, WEB RECEIVE SET (all the pointer lane). Translated whole 3 -> 3 (no program crosses a line this slice).

(a) ZECS000 / ZECS003 equivalence cases: NOT added, blocked

The http facts are enough, the files are not. Both programs name their files at run time (ZF-FCT = 'ZC' + EIBTRNID(3:2) + 'FILE', ZK-FCT); the estate has the CSD / IDCAMS store only as the pattern ZC@id@FILE with no users, so the generated project has no repository for ZC01FILE and the Java side stops with Hole: CICS file ZC01FILE: the program names no file the generated project stores. A draft case (translates 73/73, reaches Java with peers, request, urimaps and the DOCTEMPLATE stated) is in the handoff. It needs an engine feature (join a run-time file-name template to the instance's store and entity from READ INTO(ZF-RECORD), and a case fact naming the instance id) that moves the golden masters; not guessed here. No proof loosened; the owner rule (a program is not proven while a program it LINKs/CALLs has holes) is untouched.

Gates

  • pr_gates --fast 5/5, pr_gates --ratchets 7/7 (cics-spec, ports, port-surface, estate, fact-crosscheck, completeness, ground-truth), none skipped.
  • det_port.py check: all 104 ports CHANGED, in generated/.../CicsTask.java only (additive methods; +177 lines when checked on the first commit, the later GET DCOUNTER / DOCTOKEN commits add to the same class; no port/ file changed). Re-proved to confirm: zecs-zecsplt, genapp-lgicvs01, carddemo-signon PROVED. The other 101 are left to the CI det sweep (not re-proved locally).
  • Unit/translator suites: 713 passed, 3 skipped (cics_crucible, test_det_translate, test_equivalence_cics, test_cics_spec); the 3 skips were not inspected.
  • Not committed: cics_spec_status.md/json (bot-rendered on main, bot-generate cics_spec_status.md (like the evidence report) and per-case coverage-ledger files, to end merge-main + re-render cycles #4789).

Left open

WEB RECEIVE SET, GETMAIN / FREEMAIN / SET ADDRESS OF (pointer lane), CALL ZUIDSTCK; the file-name template engine feature for the zECS cases.

🤖 Generated with Claude Code

squid-protocol and others added 2 commits October 11, 2026 17:35
…ver reading its stated request (WIP, Part of #4767)

Spec (commands/web.py), CicsTask, the C stub, both translators, the WEB-HEADER event, register X38.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🐦‍⬛ Muninn Security Scan

✅ No security issues found.

🐦‍⬛ Powered by Muninn · Skald Lab

@squid-protocol squid-protocol added the shepherd:merge Maintainer: merge when green (auto-merge, squash). Guide: docs/ci.md label Oct 12, 2026
@squid-protocol

Copy link
Copy Markdown
Owner Author

Reviewed by the churn tick (head e5181c9): register X30/X37/X38 cite IBM per option, gaps ASSUMED/REFUSED by name, no proof loosened; CI 56 pass / 0 fail. Nit for a follow-up: X38 reached still lists GET COUNTER and the DOCTOKEN sends as ZECS001 holds, which commit e5181c9 now models. Sibling gaps: pointer lane / ZUIDSTCK / file-name templates are #4771; DCOUNTER is #4770 (this PR covers GET DCOUNTER INCREMENT/WRAP only); WEB READ FORMFIELD/QUERYPARM + browse forms and WEB RETRIEVE filed separately.

@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

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