Skip to content

compile & runtime options as a first-class estate input: one resolver for oracle + det port, provenance, evidence fingerprint #4704

Closed

Description

@squid-protocol

Owner request (2026-10-08). Under the policy "IBM is the reference; GnuCOBOL is the instrument" (#4702), "IBM's result" means IBM's result under the compile and runtime options this estate actually uses. Today we capture only part of those options, and they don't flow through the system as one input.

What exists today (origin/main)

Gaps

  1. Options not captured or modelled, for each: does it change results, can cobc do it, and what does the det port do?
    • Compiler:
      • ZONEDATA (Enterprise COBOL 6.x; INVDATA in 6.4+): how invalid zoned/packed data behaves (C11);
      • CODEPAGE;
      • NSYMBOL / DBCS;
      • DISPSIGN;
      • AFP / FLOAT;
      • SSRANGE and NUMCHECK / INITCHECK (abends vs silent behaviour);
      • OPTIMIZE (undefined-behaviour shapes such as C14 divide by zero);
      • TRUNC(OPT);
      • ARITH(EXTEND).
    • Compiler version (6.1 vs 6.3 vs 6.4 change defaults and behaviour) and the shop's installation defaults (IGYCDOPT). A program with no PARM gets the shop's defaults, not IBM's.
    • Language Environment runtime options:
      • STORAGE(heap / stack init), which decides what uninitialised WORKING-STORAGE holds;
      • TRAP / ABTERMENC (abend behaviour);
      • the CEEOPTS / CEEUOPT source.
    • Db2 precompile and bind:
      • DATE / TIME format (ISO / USA / EUR / JIS / LOCAL), which affects every date string;
      • DEC(15 / 31), DECPT;
      • SQLCCSID / CCSID;
      • ISOLATION.
    • CICS: translator options, the region's code page (SIT / LOCALCCSID), and the abend and EIB conventions it relies on.
  2. No single source of truth. The oracle side (equivalence_common) and the port side (det translator / runtime) each read options their own way. They must resolve the same effective option set per program.
  3. No provenance. We should know whether each option was found (JCL PARM, CBL card, installation defaults listing, LE options member) or assumed (IBM default or a declared assumption).
  4. Not in the evidence chain. A program's effective options aren't part of its evidence record's fingerprint, so a change to them doesn't make the proof stale. The evidence report doesn't show which options a level holds under.

Proposal

  • An estate-level options file (e.g. estate_options.json beside the corpus pin or the case) with:
    • compiler product and version, and installation defaults;
    • default PARM, plus per-program overrides;
    • LE runtime options;
    • Db2 precompile and bind options;
    • CICS region options;
    • for every value, its provenance (source file and line, or "assumed: IBM default" / "assumed: owner decision").
  • One resolver (effective_options(program)) combines the estate defaults, the JCL PARM and the program's CBL / PROCESS cards (IBM's precedence order). Both the oracle flag builder and the det translator / runtime consume it; drop the separate readers.
  • Per option, a row in a table (in oracle_assumptions.md or a new compile_options.md):
  • Evidence: add options to the evidence-record fingerprint as a BLOCKING input, so changed options make the proof stale (tests/tools/evidence.py BLOCKING). Show the effective options and their provenance per program in the evidence report.
  • Intake: an estate checklist for asking a customer for the inputs we need: compile JCL / PARMs, IGYCDOPT listing, CEEOPTS / CEEUOPT, Db2 bind cards, CICS SIT. For the blind 4th estate, a list of what we assume when an input is missing.
  • Calibration hook (oracle policy: IBM is the reference, GnuCOBOL the instrument — audit register entries + z/OS calibration oracle #4702 part 2): the z/OS probe corpus runs under the same effective options, so measured IBM results are tied to the options they hold under.

Acceptance

  • An estate options file exists for each burned estate (CardDemo, CBSA, GenApp, mortgage, async credit-card, zecs). Each value carries provenance, and unknowns are explicitly marked "assumed".
  • The oracle and the det port resolve identical effective options through one resolver; a test asserts it per program.
  • Changing an estate's options makes the affected evidence records stale (CI fails), and the evidence report lists the options per program.
  • The option table covers at least the options in Gap 1. Each one is modelled, honoured by cobc, refused by name, or a declared difference.
  • The estate-intake checklist is documented.

Related: #4702 (IBM reference and z/OS calibration), #3828 / #4102 / #4271 (existing option handling), #4048 (evidence records), #4601 / #4703 (evidence report).

🤖 Generated with Claude Code

Remaining slices (as of 2026-10-18)

Done so far: 3 merged PRs (#4719, #5307, #5385).

Drafted 2026-10-18 by a Sonnet triage pass from this issue, its comments and the bodies of its "Part of" PRs; (verify) items were not checked against main. Tick boxes as slices merge; edit freely.

Activity

  1. added
    enhancementNew feature, sensor, or structural signature
    testingUnit, integration, and E2E pipeline verification
    legacy-modernizationCOBOL refractor, dead-code extraction, and JCL forging
    priority: highCore feature broken, but workarounds exist
    on Oct 8, 2026
  2. added
    scope:coreBlocks a burned-estate program's next evidence rung, or the 4th-estate one-shot trial
    on Oct 16, 2026
  3. 9 remaining items

  4. squid-protocol commented on Oct 22, 2026

    @squid-protocol
    OwnerAuthor

    Churn run 4704-20261022T1054Z (host melek) ended without a PR. #4704 group-B options already done by PR #5600 (178 tests pass on main); checkbox l.71 still unticked, siblings: acceptance audit (no burned program blocked), #4707 owner ruling

  5. squid-protocol commented on Oct 23, 2026

    @squid-protocol
    OwnerAuthor

    Churn run 4704-20261023T0045Z (host melek) ended without a PR. [c:2eaeaf68] already done by PR #5600 (merged 2026-10-19, 167 tests pass); second run to find this without a PR. Box still unticked: needs a manual tick by the owner/gate. Next slice: acceptance audit test.

  6. squid-protocol commented on Oct 23, 2026

    @squid-protocol
    OwnerAuthor

    #6184 merged: a partial slice of [c:8fb0dc8e] "Acceptance audit: every burned estate has an options file (CBSA, CardDemo, GenApp, mortgage, zecs, async credit-card) and the intake checklist covers every Gap-1 option. Check: test_estate_options +"; left: done: table-coverage test and intake coverage of Gap-1; the options file per burned estate is already pinned by test_estate_options (every burned estate has one) (promoter-bot)

  7. squid-protocol commented on Oct 23, 2026

    @squid-protocol
    OwnerAuthor

    Claimed by promoter-bot host melek, lease renewed 2026-10-23T17:47Z. It lapses after 6 h without a renewal. To take it back, assign someone or remove the claim:melek label.

  8. squid-protocol commented on Oct 23, 2026

    @squid-protocol
    OwnerAuthor

    All six slices are ticked and merged (#4719, #5307, #5385, #6184, #6195, #6284). Every Gap-1 option has a row, all six burned estates have an options file, and #6284 added the reverse table-coverage and per-estate disposition audit. The three owner questions in the slice list were mooted or answered (#4706 via group A/B, #4707 closed 2026-10-23); the calibration hook stays with #4702 part 2.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    claim:melekenhancementNew feature, sensor, or structural signaturelegacy-modernizationCOBOL refractor, dead-code extraction, and JCL forgingneeds:corpusNeeds the large local source corpora (main box only)needs:dockerNeeds Docker toolchain/oracle containerspriority: highCore feature broken, but workarounds existscope:coreBlocks a burned-estate program's next evidence rung, or the 4th-estate one-shot trialtestingUnit, integration, and E2E pipeline verification

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions