Skip to content

CICS: file update TOKEN (READ UPDATE / REWRITE / DELETE / UNLOCK TOKEN); DELCUS translates whole (Part of #5078) - #5090

Merged
squid-protocol merged 3 commits into
mainfrom
churn/5078-20261014T0405Z
Oct 14, 2026
Merged

squid-protocol merged 3 commits into
mainfrom
churn/5078-20261014T0405Z

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

Part of #5078

CBSA DELCUS (READ UPDATE TOKEN x2, DELETE TOKEN x2) was refused whole because the spec had no TOKEN option. It now translates whole (det_survey: 140/140 statements, port compiles). Not proven end to end: no equivalence case exists for DELCUS (its LINK targets and Db2 work are separate cases), see Sibling gaps.

What changed

  • Spec (standards/cics/commands/files.py): TOKEN on READ (area_out, fullword; implies UPDATE), REWRITE, DELETE; new modelled UNLOCK (removed from the name-only refused list in api.py); READNEXT / READPREV UPDATE / TOKEN refused by name.
  • Both runtimes answer one step list alike: ggcics.c (token table, GGCUNLK, GGCREAD / GGCREWR / GGCDELT) and CicsTask (holdToken / rewriteToken / deleteToken / unlockToken); a SYNCPOINT / ROLLBACK ends every token. The det port (det/cics.py) and the stub's translator (equivalence_cics.py) emit them; REWRITE now always sets GG-FLAGS (a stale TOKEN flag could otherwise leak in).
  • Semantics, per IBM (READ / REWRITE / DELETE / UNLOCK pages, CICS TS 6.x): a token matching none in use (never issued, spent, another file's) is INVREQ RESP2 47. Register X52 records what is ASSUMED (the token's value: 1, 2, 3, ...; the tokenless hold being separate) and what is refused.

Class table

Member Status
READ UPDATE TOKEN modelled (both runtimes, det port, stub translator)
REWRITE TOKEN modelled; FROM with another key refused (IBM silent)
DELETE TOKEN modelled; with RIDFLD or GENERIC refused (IBM silent)
UNLOCK TOKEN modelled (new spec entry, GGCUNLK, unlockToken)
READNEXT / READPREV UPDATE [TOKEN] refused by name: RLS only (X52)
UNLOCK without TOKEN refused by name; sibling gap (#5079)

Tests

  • tests/cics_crucible/test_update_token_runtimes_5078.py: 18 scenarios on the stub and on CicsTask (valid, invalid, reused, interleaved, wrong-file token, tokenless REWRITE with a token held, NOTFND issues none, UNLOCK then DELETE, SYNCPOINT, key-change refusal).
  • tests/cobol_mainframe/test_update_token_translate_5078.py: translation of each member on both sides, the by-name refusals, the spec.
  • One assertion in test_equivalence_cics.py updated for REWRITE's new MOVE SPACES TO GG-FLAGS.

Gates

pr_gates --fast 6/6; --ratchets 7/7 (0 skipped). det_port.py check: every CICS port's CicsTask.java changed (63 added lines, nothing else); re-proved carddemo-userupd, carddemo-userdel, cbsa-updcust, genapp-lgupvs01, zecs-zecsplt: all PROVED. Golden masters not touched.

Cross-repo

None.

🤖 Generated with Claude Code

…CK TOKEN (Part of #5078)

Co-Authored-By: Claude Sonnet 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 and others added 2 commits October 14, 2026 00:44
… for their refused UPDATE / TOKEN (Part of #5078)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
#5078)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@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