Skip to content

det + stub: BIF DEEDIT, INQUIRE / SET TERMINAL UCTRANST with DFHVALUE CVDAs (#4415 slice 1) - #4728

Merged
squid-protocol merged 4 commits into
mainfrom
feat/4415-dfhvalue-deedit
Oct 9, 2026
Merged

squid-protocol merged 4 commits into
mainfrom
feat/4415-dfhvalue-deedit

Conversation

@squid-protocol

@squid-protocol squid-protocol commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Part of #4415 (slice 1). Part of #4270.

What

The issue lists DFHVALUE(...) in SET / INQUIRE / ASSIGN operands and EXEC CICS BIF DEEDIT. Measured on origin/main first: DFHVALUE(name) already translated in expressions (MOVE, comparisons; det/cvda.py is IBM's CVDA table), and every name the corpora use is in the table. What kept those programs from translating was the commands the CVDA is the operand or result of, and the stub (cobol-stub side), which did not substitute DFHVALUE at all.

  • BIF DEEDIT FIELD(f) [LENGTH(n)], per IBM (CICS TS 6.x, EXEC CICS BIF DEEDIT): non-digits removed, the digits right-aligned and zero padded in the same field, in the region's EBCDIC page (DetCics.deedit, GGCDEED); a trailing minus or CR gives the rightmost byte the negative zone X'D'; a rightmost byte with zone A-F is returned unaltered (IBM's 14-6704/B -> 00146704B); a 1-byte field is unaltered; LENGERR (RESP 22, no RESP2 listed) for LENGTH below 1.
  • INQUIRE TERMINAL UCTRANST / SET TERMINAL UCTRANST as the CVDAs UCTRAN 450 / NOUCTRAN 451 / TRANIDONLY 452: CicsTask.inquireUctranst / setUctranst and GGCINQT / GGCSETT. The terminal's value is a stated fact (withUctranst, $GGCICS_UCTRANST; the runner takes it from the case TYPETERM's UCTRAN), never a default. INVREQ RESP2 43 (bad CVDA), TERMIDERR RESP2 1 (INQUIRE) / 23 (SET).
  • Stub: DFHVALUE(name) becomes IBM's CVDA number; an unknown name is refused by name.
  • Refused by name (register X26, with IBM's pages): a DEEDIT field with no digit left, a character beyond 7-bit ASCII, a LENGTH past the field; a terminal RECEIVE after a SET (IBM does not say when it takes effect); the UCTRANST of a terminal other than the task's; every other option of the two TERMINAL commands.
  • Assumed (X26, ASSUMED): LENGTH defaults to the field's length (CBSA gives none); a trailing sign/CR beats the zoned-byte rule; UCTRAN(YES|NO|TRANID) maps to UCTRAN / NOUCTRAN / TRANIDONLY name for name. The crucible case depends on none of them except the last (listed in its README lower-confidence table).

Proof

New cics-crucible case condition-handling/hc-deedit-uctranst (companion PR below), 3 scenarios traced by hand from IBM's pages: cobol-stub 3/3, java-ported (det port, HCDEED 75/75 statements, 0 holes) 3/3. det_port.py check vs origin/main: only DetCics.java changed in every port (the runtime copy), no translation moved; proof_sweep.py --det-only (Db2 cases included) re-run for it: "sweep: as expected" (mortgage-mpmt NOT PROVEN, a baseline entry). pr_gates --ratchets 7/7, --fast 5/5; CI green at the head. Unit tests for the translator, the CicsTask / DetCics runtime, the stub C, the harness, the spec entries.

Census (before -> after, translation only, burned + census corpora, base b9d955c)

  • BIF DEEDIT: 5 programs (BNK1CAC, BNK1CRA, BNK1DAC, BNK1DCS, BNK1TFN), holes naming the verb 5 -> 0; statements translated 383/389 -> 385/389, 311/317 -> 312/317, 337/345 -> 338/345, 635/648 -> 641/648, 343/349 -> 345/349.
  • INQUIRE TERMINAL / SET TERMINAL UCTRANST (BNK1CCS, BNK1DCS): 563/573 -> 569/573, 635/648 -> 641/648; holes naming SET 3 -> 1, INQUIRE 9 -> 7 (ASSOCIATION, PATH, URIMAP, PROGRAM STATUS stay).
  • Programs translated whole: 78 -> 78 (non-burned 5 -> 5). This slice makes no program whole: each of the 5 CBSA programs has other gaps. Next blockers they name: RETURN IMMEDIATE (5 of them), LINK SYNCONRETURN (5), COMPUTE FUNCTION NUMVAL in a float expression (3), SET ... NULL pointers (2), RECEIVE MAP ... ASIS (1).

Remaining from #4415 (slice 2)

FORMATTIME YYDDD / DATE / MILLISECONDS, DELETEQ TS, DUMP, QUERY.

Cross-repo

Companion: squid-protocol/cics-crucible#12 (the case); merge it first, then a crucible release + pin bump (not done here; the pin is untouched, so CI's cics-crucible job does not see the new case until then). The proofs above ran against the case branch with --unpinned.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MQNoe4wPJgr7dbUvs3DG6D

squid-protocol and others added 2 commits October 8, 2026 19:29
…h DFHVALUE CVDAs (#4415 slice 1)

BIF DEEDIT edits FIELD in place in the region's EBCDIC page as IBM describes
(DetCics.deedit, GGCDEED); LENGERR for LENGTH below 1. INQUIRE / SET TERMINAL
UCTRANST answer and change the terminal's CVDA (UCTRAN 450, NOUCTRAN 451,
TRANIDONLY 452) from a stated fact (CicsTask.withUctranst, $GGCICS_UCTRANST),
INVREQ RESP2 43 / TERMIDERR RESP2 1 and 23 as IBM lists them. The stub now
substitutes DFHVALUE(name) with IBM's CVDA number. What IBM leaves open is
refused by name (register X26).

Part of #4415, Part of #4270.

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

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

🐦‍⬛ Muninn Security Scan

✅ No security issues found.

🐦‍⬛ Powered by Muninn · Skald Lab

def test_the_csd_names_each_terminals_uctran():
"""#4415 (register X26): a TYPETERM's UCTRAN is the terminal's UCTRANST, YES / NO / TRANID as UCTRAN / NOUCTRAN /
TRANIDONLY; a terminal whose TYPETERM says nothing has none stated (INQUIRE TERMINAL UCTRANST is refused)."""
import cics_crucible as runner
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MQNoe4wPJgr7dbUvs3DG6D
@squid-protocol
squid-protocol marked this pull request as ready for review October 9, 2026 00:40
@squid-protocol
squid-protocol merged commit caffff0 into main Oct 9, 2026
40 checks passed
@squid-protocol
squid-protocol deleted the feat/4415-dfhvalue-deedit branch October 9, 2026 00:40
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants