Skip to content

ci: nightly coverage-ledger refresh so a harness change doesn't blank coverage (#4270) - #4625

Merged
squid-protocol merged 1 commit into
mainfrom
ci/4270-ledger-refresh
Oct 7, 2026
Merged

squid-protocol merged 1 commit into
mainfrom
ci/4270-ledger-refresh

Conversation

@squid-protocol

Copy link
Copy Markdown
Owner

Part of #4270.

evidence-refresh.yml (the nightly bot-PR job that re-proves stale evidence records) now also:

  1. runs proof_sweep.py --det-only --skip-db2 --no-ratchet --work $RUNNER_TEMP/sweep (same setup as CI's det-sweep: JDK 17, GnuCOBOL image, pinned corpora already in the job);
  2. runs det_coverage_ledger.py update on it;
  3. adds tests/equivalence/det_sweep_coverage.json to the bot PR's add-paths.
    A failed sweep fails the job at the end (after the PR is opened), like the evidence re-proof.

update already rewrote fingerprints from the tree for every proven case (never kept old ones); new test test_update_rewrites_stale_fingerprints pins that.

TODO(#4603): evidence_report.py --refresh --live is not on main; a TODO comment names it. #4603 adds that step itself; my hunk sits before "Re-prove the stale records" and the add-paths line is at the top of the list, so the edits should not conflict.

Measurement (main 9fd212d)

  • Ledger entries stale -> fresh: 26 stale (all on harness + oracle) -> 26 fresh.
  • Local sweep (--det-only --skip-db2): refreshed ledger differs from main's only by fingerprints; all coverage numbers identical, so the refreshed ledger is committed here.
  • Evidence report on tooling: purchaser-facing evidence report (#4601) #4603's branch (--refresh --live): programs L0/L1/L2/L3/L4 = 42/41/34/0/0 with the stale ledger -> 42/41/18/13/3 with the refreshed one (16 programs move L2 -> L3/L4: carddemo 13 L3 + 1 L4, cbsa 2 L4).

Gates: pr_gates.py --fast 5/5; ledger tests 6 pass. actionlint not available (yaml parses). If #4624 lands first it also touches the ledger: regenerate with the tool, don't merge by hand.

🤖 Generated with Claude Code

… coverage (#4270)

evidence-refresh.yml re-sweeps the det ports and rewrites tests/equivalence/det_sweep_coverage.json into the bot PR.
Ledger refreshed locally: 26/26 entries were stale (harness+oracle), numbers identical, fingerprints only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

🐦‍⬛ Muninn Security Scan

✅ No security issues found.

🐦‍⬛ Powered by Muninn · Skald Lab

@squid-protocol
squid-protocol marked this pull request as ready for review October 7, 2026 16:04
@squid-protocol
squid-protocol merged commit c0bb2f2 into main Oct 7, 2026
26 checks passed
@squid-protocol
squid-protocol deleted the ci/4270-ledger-refresh branch October 7, 2026 16:05
squid-protocol added a commit that referenced this pull request Oct 7, 2026
…s after #4625

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
squid-protocol added a commit that referenced this pull request Oct 7, 2026
…ge (#4602) (#4624)

* equivalence: cobol_coverage sets apart branch points after a transfer of control (#4602)

An IF / EVALUATE no path reaches -- every path to it passes GO TO, GOBACK, STOP RUN,
EXEC CICS RETURN / XCTL / ABEND (no RESP / NOHANDLE), or a plain PERFORM of a paragraph
no path leaves -- is counted apart (branches.after_transfer), like in_dead_code. A run
that takes one is flagged (after_transfer_but_taken). Conservative: conditional phrases,
inline PERFORMs, IF with no ELSE, EVALUATE with no OTHER, COPY and Area A lines keep
the path open. CardDemo: COCRDLIC 586, COCRDSLC 386, COACTVWC 387; crucible: none.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* equivalence: a reviewed ledger of infeasible branch outcomes (#4602)

tests/equivalence/infeasible_outcomes.json states, per case, the branch outcomes no input
can reach, each with its COBOL reason (family G: a guard every caller has satisfied; C: a
test of a constant). proof_blockers.py takes them out of the branch total when the proof
left them uncovered and prints them; one the proof reached is a gap. Every det sweep fails
when a proof reaches a stated outcome (proof_sweep.py keeps each case's uncovered list).
infeasible_outcomes.stated(case) is what the evidence report shows as assumptions.

First entries: the RETURN-TO-PREV-SCREEN guard (G) in nine CardDemo programs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* equivalence: CardDemo scenarios for reachable unrun outcomes, infeasible entries for the rest (#4602)

Scenarios (every reachable outcome the harness can express): billpay +9, tranadd +15,
report +9, tranlist +11, userlist +11, cardlist +2, cardview +1, userupd +1, userdel +1.
Proposed infeasible entries (G / C, each with its COBOL reason): adminmenu 6, menu 3,
cardlist 2, cardview 6, report 6, tranadd 2, tranlist 4, userlist 4. Evidence records of
the changed cases re-proven (the model ports prove the new scenarios); pages re-rendered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* equivalence: track infeasible_outcomes.json (the *.json ignore rule) and test it is tracked (#4602)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* equivalence: never-raised NOTFND stated (family R); evidence, pages and coverage ledger regenerated (#4602)

The REWRITE NOTFND (userupd 377, billpay 390) and DELETE-without-RIDFLD NOTFND (userdel 323)
fault scenarios are gone: IBM documents no such response, so the outcomes are stated
infeasible under family R, citing IBM's REWRITE / DELETE pages. Evidence records of the
9 changed cases re-proven with evidence.py prove, pages rendered, det_sweep_coverage.json
updated from a fresh det sweep (16 cases, all proven).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* equivalence: det-sweep coverage ledger regenerated for the #4602 cases after #4625

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant