Repository navigation
spec(ci): suite ledger steward -- what the corpus ledger bot applies and refuses (Closes #10204) - #10208
Merged
Conversation
…and refuses (Closes #10204) specs/ci/suite_ledger_steward.t27 decides, per corpus-ledger row and per master run, what a steward may write to docs/reports/suite_expectations.json: DROP a row whose spec passes, REPIN a discard pin that fell, lower the gate-failure pin and the cap to the count. It refuses a new failure, a moved or expired row, any rise, a missing reading, an unpinned or self-inconsistent row, a cap rise and a drop flood. A refused row stays as master has it and the rest is applied (#10192's rule). Tests pinned on #10172, #8345, #7804, #6437, #9281, #8823 and #5497. specs/jobs/suite_ledger_steward.t27 is the job card. Seals written by t27c on the Railway lab. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag
enabled auto-merge (squash)
October 18, 2026 04:21
Contributor
gHashTag
added a commit
that referenced
this pull request
Oct 18, 2026
… the t27b steward (Closes #10216) (#10217) #10208 added specs/ci/suite_ledger_steward.t27 and specs/jobs/suite_ledger_steward.t27. They repeat effect_wanted, run_starts_job, step_ef and writes_the_repo from the t27b ledger steward specs, so the Duplicate Body Ratchet has been red on master since 27efeba and on every open PR. tools/duplicate_bodies_baseline.txt is rewritten by `python3 tools/dupe_scan.py --bless` on the Railway lab at master d9e0c6c: four lines added, none removed, no other count moves. Afterwards dupe_scan.py exits 0 ("ok: no new duplicate body"). Reusing the t27b functions with a `use` instead is left to #10208's owner. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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.
Closes #10204
Corpus ratchetis red for a fall as well as a rise. An UNEXPECTED PASS or a DISCARD IMPROVED on master fails the check untildocs/reports/suite_expectations.jsonrecords it, and every PR inherits that red until someone writes a hand PR. #10172 is the latest example.specs/ci/derived_data.t27says one bot re-derives lag on master. The t27b ledger has such a bot (specs/tri/t27b/ledger_steward.t27); the corpus ledger did not. This PR is that bot's decision and its job card, in t27 only.What changes
specs/ci/suite_ledger_steward.t27(moduleSuiteLedgerSteward) decides per ledger row and per master run.Applied by the steward:
max_entriesas the composed row count (cap_after), only whenderived_data.bot_may_blessallows it.Refused, left to a person:
Whole run refused:
max_entriesafter the dropsDROP_LIMIT= 16 drops, because a broken run looks like a corpus where everything passesA refused row stays as master has it, and the rest of the run is applied, following #10192's rule.
Runs the steward reads (
run_stewardable): master runs only, built with a t27c from that same commit, whose ratchet reached a verdict, and that compared against master's current ledger. #10172's lab binary was older than master and reported a false failure onverilog_odd_cast.Tests are pinned on real cases:
Invariants:
cap_fitsagrees withbot_may_bless.specs/jobs/suite_ledger_steward.t27(moduleJobSuiteLedgerSteward) is the job card, modelled onspecs/jobs/t27b_ledger_steward.t27. It has the same 8 steps, step kinds and effect codes.corpus-ratchet.yml. The steward readssuite_summary.jsonandratchet.logfrom the run'scorpus-ratchet-logartifact.--bless-expectations, because bless drops the_why_entries_*notes and would write a rise. The step edits rows in place, keeps the notes, and appends one line to_why_entries_fell.One deliberate difference from #10172
#10172 raised benchmark 315 -> 319 (bdd-block-fallback +4) by hand. The steward refuses that row as RR_DISCARD_ROSE. suite.rs says a worsened pin is raised only by a human running bless and reviewing the diff, and derived_data.t27 rule 4 agrees. On #10172's run the steward applies the other ten changes and lists benchmark as refused in its PR. A person then decides on it.
Follow-up (not in this PR)
Nothing runs this card yet. Running it needs these pieces:
corpus-ratchet.yml, reading the artifact, and composing the ledger;corpus-ratchet.ymluploading a per-row discard summary ifsuite_summary.jsonlacks one.Both are foreign code and need the owner's
owner-approved-foreignlabel, so they are left for a separate PR.Evidence (Railway lab, t27c 0.5.2+c0f6076, zig 0.16.0)
test-report specs/ci/suite_ledger_steward.t27: 11/11 pass, 0 vacuous; 3 invariants proved at compile time.test-report specs/jobs/suite_ledger_steward.t27: 2/2 pass, 0 vacuous; 1 invariant proved.seal --saveon both specs, thenseal --verify: all hashes MATCH. The seals were brought back by base64 and checked by sha256.t27c suite --repo-root . --ratchet --corpus-onlyon the branch: RATCHET CLEAN. That means 0 unexpected failures, 0 unexpected passes and no discard drift, so the two new specs do not need ledger rows.Only
.t27files and t27c-written seals. No YAML, Python or Rust.🤖 Generated with Claude Code