Repository navigation
feat(#4789): per-case det-sweep coverage ledger; CICS spec status page bot-generated - #4811
Merged
Merged
Conversation
…e bot-generated The det-sweep coverage ledger (one tests/equivalence/det_sweep_coverage.json) and docs/language_status/cics_spec_status.md were rewritten by every case PR and every evidence-refresh bot run, so any two open PRs conflicted on them. - det_coverage_ledger.py: one file per case, tests/equivalence/det_sweep_coverage/<case>.json (format det-sweep-coverage/2). load()/write() are the only file-aware parts; build, check, last_coverage, fresh_coverage, migrate keep their semantics (#4730 stale-readable, #4758 entry only while proven, #4731 per-component fingerprints). write() touches only changed files and deletes a dropped case's file. - `split --all` (the one-shot migration, run here) and `split --base REV` (a pre-#4789 branch merging main: applies only the entries it changed since REV). - Compat: check / update / migrate and test_det_coverage_ledger fail while the single file exists, printing the split recipe. - evidence_history reads the per-case files (single file for older commits). - det_sweep_plan: a case's ledger file keeps the PR sweep narrow (that case). - evidence-refresh bot commits the per-case files and renders cics_spec_status.md; the page's currency test is advisory in PR CI (EVIDENCE_REPORT_ADVISORY, as #4703), smoke-test prints whether it would change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-assert) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # tests/equivalence/det_sweep_coverage.json
Contributor
# Conflicts: # tests/equivalence/det_sweep_coverage.json
…-all re-run Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
Author
|
CI shepherd: this PR conflicts with main, so no checks ran. Merge |
…--all re-run Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
Author
|
CI shepherd: real failure(s) on this head. Reproduce locally with the |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
squid-protocol
marked this pull request as ready for review
October 9, 2026 22:04
squid-protocol
added a commit
that referenced
this pull request
Oct 9, 2026
…cases; split --base + update from the sweep Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TBJdDBRtJis5hzE244NQKV
squid-protocol
added a commit
that referenced
this pull request
Oct 9, 2026
… split --base + update from the sweep Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TBJdDBRtJis5hzE244NQKV
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.
Fixes #4789
What
The two files every case PR and every evidence-refresh bot run rewrote, so that any two open PRs conflicted (#4759, #4780 and #4808 each went dirty 2-3 times on the ledger alone):
tests/equivalence/det_sweep_coverage.jsonis replaced bytests/equivalence/det_sweep_coverage/<case>.json(formatdet-sweep-coverage/2: the entry as before plus"format"). Two PRs, or a PR and the bot, that sweep different cases now touch different files.det_coverage_ledger.py: onlyload()/write()know the files.build,check,last_coverage,fresh_coverageandmigrateare unchanged, so the semantics stay the same: evidence report: keep a program's last measured level marked stale instead of dropping L3/L4 to zero on any harness change #4730 (stale-readable), evidence report: Db2 programs stay L1 after a Db2 refresh — the report build doesn't get the Db2 sweep's verdicts #4758 (an entry exists only while proven; a dropped entry is now a deleted file) and evidence: finer-grained fingerprints — a case goes stale only when the harness/runtime parts it uses change #4731 (per-component fingerprints).write()rewrites a file only when its text changes.load():proof_blockers,evidence_report,proof_sweep --aggregate(CI det-sweep) and the bot'supdate.evidence_history.Tree.ledger()reads the per-case files, and the single file for commits before this one.det_sweep_plan.py: a change to a case's own ledger file keeps the PR det-sweep narrow, to that case. Before, every case PR touched the single file and got a full sweep.python tests/tools/det_coverage_ledger.py split --all. All 65 entries were moved.load()equals the old file'scasesexactly.tests/equivalence/det_sweep_coverage.jsonexists,check(CI det-sweep),updateandmigratefail. So doestest_det_coverage_ledger.py::test_the_single_file_ledger_is_retired, which runs in every PR's suite. The failure message prints thesplitrecipe below.docs/language_status/cics_spec_status.mdis bot-generated on main, the same way evidence report: regenerate on main by bot, advisory in PRs, strict at release (stop per-PR report churn) #4703 handles the evidence report. The evidence-refreshrefreshjob runscics_spec_status.py renderand commits the page. The page-currency test is skipped underEVIDENCE_REPORT_ADVISORY=1, which CI already sets. smoke-test.yml prints an advisory "would change" line, andtest_the_page_rendersstill runs. PRs keep committingcics_spec_status.json(the measured census and crucible data).add-pathsnow namestests/equivalence/det_sweep_coverage/*.jsonanddocs/language_status/cics_spec_status.md. The blocker-slice and cics-command-slice skills are updated to match.Evidence
evidence_report.det_coverage()(80 cases) andproof_blockers.ledger_coverage()(65) give byte-identical output on origin/main (single file) and on this branch (per-case files).det_coverage_ledger.py checkon a sweep built from 6 real entries: "as expected".evidence_history.Tree('HEAD').ledger() == Tree('HEAD^').ledger()(per-case files vs the single file).split --all,split --base(applies only the branch's own changes and keeps main's newer entries for other cases; refuses a base with no single file), the compat failure, and the plan narrowing.pr_gates.py --fast: 5/5 pass.--ratchets: 7 pass, 0 fail, 0 skipped.Recipe for in-flight PRs (any branch from before this merges that touched the single ledger)
Merging origin/main gives a modify/delete conflict on
tests/equivalence/det_sweep_coverage.json. Do not hand-merge it:--basemust be the merge base from before the merge, where the single file still existed. If the merge is already committed with the file still there, use--base "$(git merge-base HEAD^1 HEAD^2)".split --basewrites only the entries your branch added, rewrote or dropped. Every other case keeps main's file. Alternatively,git rmthe single file and re-rundet_coverage_ledger.py update <your sweep DIR(s)>.Also, do not commit
docs/language_status/cics_spec_status.md: on a conflict take main's copy (git checkout origin/main -- docs/language_status/cics_spec_status.md). The bot re-renders it after merge.If main changes the single file again before this PR lands, this branch merges main and re-runs
split --allinstead of hand-merging.Idempotency (#4813)
Merged with #4813:
build()keeps an entry whose numbers and inputs did not move (measured_atincluded), andwrite()rewrites a file only when its text changes. The result is that a bot re-sweep touches only the files of cases that actually moved. Checked on the real ledger:updateon an unchanged sweep reports "65 cases, 0 file(s) written or removed". Test:test_an_unchanged_sweep_touches_no_case_file.Follow-up (not in this PR)
tests/equivalence/*/evidence.json) are already per-case files. Moving their re-proof out of PRs is a separate step.publish.ymldoes not gate on the CICS page being current (it is internal status, not a purchaser-facing report).🤖 Generated with Claude Code