Repository navigation
Estate compile/runtime options as one input: options files, one resolver, evidence fingerprint (Part of #4704, slice 1) - #4719
Merged
Conversation
…er, evidence fingerprint (Part of #4704) Slice 1. tests/equivalence/estate_options/<corpus>.json holds an estate's compiler product/version, installation defaults, compile-step PARM (per-program overrides), LE, Db2 and CICS options, every value with provenance (file:line or "assumed: ..."), for the six burned estates. gitgalaxy.core.estate_options.effective_options is the one resolver (installation defaults < PARM < case compiler_options < CBL/PROCESS cards); the oracle's cobc flag builder, det trunc_std / numproc_pfd and det_port route through it with the same flags and ports. "options" joins the evidence fingerprint as a BLOCKING input; records from before it stay current while no option cobc acts on changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MQNoe4wPJgr7dbUvs3DG6D
…4704) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MQNoe4wPJgr7dbUvs3DG6D
…the dead-key audit reads) (Part of #4704) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MQNoe4wPJgr7dbUvs3DG6D
Contributor
…ce-read ratchet) (Part of #4704) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MQNoe4wPJgr7dbUvs3DG6D
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #4704 (slice 1). Policy: #4702 ("IBM is the reference; GnuCOBOL is the instrument").
What
tests/equivalence/estate_options/<corpus>.json(beside the cases, one per corpus incorpora.json, so a case'scorpusfinds its file). Compiler product / version / installation defaults, default PARM plus per-program PARM, LE runtime options, Db2 precompile / bind / format / CCSID, CICS region / program / translator options. Every value is{value, source, note}:sourceis<corpus path>:<line>(found; a test reads that line at the corpus pin and checks the quoted text) orassumed: IBM default | owner decision | not stated in the corpus.tests/cobol_mainframe/test_estate_options.pyvalidates the schema..gitignoregets a!exception.compilerblock stays in itscase.json(touching it would stale the record) and overrides the estate's compiler; the estate file carries the same IGY.V6R1M0 fact.gitgalaxy.core.estate_options.effective_options(case)+compiler_options.effective_with_defaults. Precedence, IBM's order (Enterprise COBOL Programming Guide, "Compiler options": PROCESS/CBL override the PARM, which overrides the installation defaults): installation defaults < estate PARM (per-program PARM replaces the default) < the case'scompiler_options< the program's CBL/PROCESS cards; anything unnamed is IBM's default.equivalence_common.compile_options/numproc/compiler_version,det.program.trunc_std/numproc_pfd, anddet_port.py/equivalence_java.py(the options handed to the translator) all read it. No other reader of NUMPROC/TRUNC remains (ARITH is not read by the det translator today).optionsis inINPUTSandBLOCKING. It hashes the resolved options (no provenance, so a changed note is not a changed option; the program's own cards are source, fixed by the corpus pin). A record from before the input stays current while the estate file changes no option cobc acts on (semantic_sha256vs the same computed without the estate file); it changes to stale when one does. New records store the input; no existing record needed a re-prove or a rewrite (all 45 are unchanged onoptions; their harness/generator staleness is the existing scheduled-job kind).Finding (declared difference)
CBSA's build PARM is
TRUNC(OPT)(etc/install/base/buildjcl/CICS.jcl:7); GnuCOBOL has no TRUNC(OPT), so the proof runs TRUNC(STD) for CBSA programs without their ownTRUNC(STD)card (CUSTCTRL, DELACC, INQACC among the cases). The file recordsvalue: OPTwithapplied_value: STD+applied_note, andEffectiveOptions.deviations()lists it. Follow-up: #4706.Proof of no behaviour change
numproc, blanked-source hash,trunc_std,numproc_pfdfor all 79 cases: identical before (origin/main) and after (cmpof the JSON dumps).det_port.py check --base-ref origin/main: 79/79 ports unchanged.test_equivalence*.py,test_det_translate.py,test_evidence.py,test_numproc.py, new tests: pass (517 passed, 11 skipped, + new).pr_gates.py --ratchets: 7 pass.pr_gates.py --fast: gauntlet / audits / secrets / xray pass; lint's only NEW finding was fixed (the FYI "no longer flagged" entries are not from this PR).New test asserts per case that the oracle's flags and the det port resolve the same effective options.
Follow-ups
#4706 (compiler option table: ZONEDATA/INVDATA, CODEPAGE, SSRANGE/NUMCHECK, OPTIMIZE, TRUNC(OPT), ARITH(EXTEND)), #4707 (LE / Db2 / CICS option table), #4708 (evidence report shows options per program; after #4705), #4709 (estate-intake checklist).
🤖 Generated with Claude Code
https://claude.ai/code/session_01MQNoe4wPJgr7dbUvs3DG6D