Repository navigation
oracle policy: IBM is the reference, GnuCOBOL the instrument — audit register entries + z/OS calibration oracle #4702
Copy link
Copy link
Open
Labels
enhancementNew feature, sensor, or structural signatureNew feature, sensor, or structural signaturelegacy-modernizationCOBOL refractor, dead-code extraction, and JCL forgingCOBOL refractor, dead-code extraction, and JCL forgingpriority: highCore feature broken, but workarounds existCore feature broken, but workarounds existscope:coreBlocks a burned-estate program's next evidence rung, or the 4th-estate one-shot trialBlocks a burned-estate program's next evidence rung, or the 4th-estate one-shot trialtestingUnit, integration, and E2E pipeline verificationUnit, integration, and E2E pipeline verification
Description
Owner policy (2026-10-08): IBM is the reference; GnuCOBOL is the instrument.
- Where IBM documents a result under the estate's compile options (TRUNC, NUMPROC, ARITH, ZONEDATA, ...), the det port follows IBM. The oracle (cobc 3.1.2
-std=ibm) is configured to match through cobc options, config or a wrapper; if that's impossible, the shape is a declared oracle-vs-IBM difference the comparator expects. Proofs are never loosened. - Where IBM's result is undefined (e.g. non-digit data, divide by zero without ON SIZE ERROR, which can abend S0CB), the port refuses by name or follows cobc, and the register says so explicitly.
- GnuCOBOL stays the bulk oracle: free, in CI, reproducible by purchasers. A real z/OS (Enterprise COBOL) is a calibration oracle: run the probe and fuzz corpus there occasionally to replace "IBM side ASSUMED" with measured results. It is not in CI.
Part 1: audit register entries that chose "match GnuCOBOL"
For each entry: the IBM reference (cited), whether IBM documents it under which options, what cobc can be made to do, the chosen behaviour, and the register entry updated.
- C2 (det runtime: arithmetic intermediates are not truncated as the oracle's ARITHMETIC-OSVS (IBM's fixed-point decimal places) truncates them (register C2) #4287 / det runtime: truncate arithmetic intermediates as cobc's ARITHMETIC-OSVS does (#4287) #4654, merged): OSVS intermediate truncation, where the oracle departs from IBM's Appendix A rule; the 30-digit cap is not modelled.
- C4 (det runtime: a result overflowing a binary receiver's bytes (no ON SIZE ERROR) is stored unlike GnuCOBOL #4684 / det: an unsigned binary ADD / SUBTRACT wraps as cobc's native arithmetic does; lifted COMP-5 under TRUNC(STD) (#4684) #4689): unsigned binary ADD/SUBTRACT. Decided: IBM absolute value (on det: an unsigned binary ADD / SUBTRACT wraps as cobc's native arithmetic does; lifted COMP-5 under TRUNC(STD) (#4684) #4689).
- C11 (equivalence: LGTESTP4's add moves a space-filled CA-BROKERID / CA-PAYMENT to binary (GnuCOBOL 931773840, det port 0; C11) #4652 / equivalence: model the oracle's MOVE of a non-digit zoned item to a binary item (#4652) #4663 merged, equivalence: the rest of C11 -- non-digit zoned data in arithmetic, comparisons, edited and zoned MOVEs differs from the oracle #4662 / equivalence: non-digit zoned data as MOVE sender, operand, comparand; the oracle's sign rewrite (#4662) #4693): non-digit zoned data. Mostly undefined in IBM's docs; check ZONEDATA (Enterprise COBOL 6) and NUMPROC.
- C13 (det runtime: numeric-edited item compared with a numeric literal numerically; GnuCOBOL compares it as text #4665 / det: a numeric-edited item compared with a number is a text comparison (#4665) #4668, merged): numeric-edited vs numeric comparisons. The IBM side is ASSUMED; confirm against the Language Reference.
- C14 (det runtime: a zero divisor without ON SIZE ERROR throws in the port; the oracle leaves the receiver unchanged #4655 / det runtime: a zero divisor leaves the receivers unchanged, as the oracle (#4655) #4677, det runtime: a floating-point zero divisor still throws ArithmeticException (Hfp.divide) #4675 / det: a float zero divisor is libcob's NaN; a phrase binds to the innermost open statement (#4675, #4676) #4686): size errors and divide by zero (undefined or S0CB on IBM), and
0 ** -n(IBM says size error, the oracle returns 0). - Batch Sysout: DISPLAY of a hex-literal byte >= X'80' is not byte-identical under a non-latin-1 record charset (cp037/cp1047/cp1252) #4698: non-latin-1 batch DISPLAY bytes and line terminator.
Part 2: z/OS calibration oracle (blocked on access and legal)
- Candidates: IBM Wazi as a Service (z/OS dev/test on IBM Cloud), ZD&T (licensed dev/test emulation), IBM Z Xplore (free; its terms likely don't cover commercial validation), or a customer's or partner's mainframe. z/OS on Hercules is not an option (licence ties z/OS to IBM hardware).
- Legal questions for counsel first: do the licence terms allow using outputs to validate a commercial translator, and may results be published (relates to the publishing hold, legal Q16)?
- Deliverable: a probe corpus (the register shapes plus the det fuzz kits) runnable on Enterprise COBOL with recorded results, and a "z/OS-calibrated" marker per register entry and in the evidence report.
🤖 Generated with Claude Code
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature, sensor, or structural signatureNew feature, sensor, or structural signaturelegacy-modernizationCOBOL refractor, dead-code extraction, and JCL forgingCOBOL refractor, dead-code extraction, and JCL forgingpriority: highCore feature broken, but workarounds existCore feature broken, but workarounds existscope:coreBlocks a burned-estate program's next evidence rung, or the 4th-estate one-shot trialBlocks a burned-estate program's next evidence rung, or the 4th-estate one-shot trialtestingUnit, integration, and E2E pipeline verificationUnit, integration, and E2E pipeline verification
Activity
[-]oracle policy: make the comparator z/OS-like — audit register entries where the det port follows GnuCOBOL over IBM[/-][+]oracle policy: IBM is the reference, GnuCOBOL the instrument — audit register entries + z/OS calibration oracle[/+]det runtime: an unsigned binary ADD / SUBTRACT stores IBM's absolute …
det: an unsigned binary ADD / SUBTRACT wraps as cobc's native arithme…
det: NUMVAL in a fixed-point statement rounds its store; drop the per…
register: C13, C14, C4 cite IBM's text instead of assuming it (Part of …