Two of five ledgers announced a stale entry and exited zero - #2923
Merged
Conversation
Yesterday a stale ledger entry -- a line still excusing a spec that had been fixed -- was found because the corpus ratchet went red and named it. That is luck. Asked deliberately this time: plant a line naming a spec that PASSES, so the line is false by construction, and run each gate. seal_baseline.txt FAILS conflict_markers_baseline.txt FAILS suite_expectations.json FAILS -- "UNEXPECTED PASS" specs_generate_baseline.txt NOTE, exit 0 verilog_width_baseline.txt note, exit 0 Two of five announced the defect and returned success, so a line outliving its debt could live there forever: the gate green, the note scrolling past. Both now fail, with the repair named in the message. Controls both ways for each: with the planted entry, exit 1; without it, exit 0; and both gates' own `--self-check` still passes. tri ledgers audit plants the false line itself and demands each gate fail -- a gate whose subject is other gates. Checked the same way: run against the PRE-FIX gates it reports `stale entry MISSED 2` and exits 1; against the fixed ones, `caught 4`, exit 0. Both were run. Two properties worth copying. It refuses to start on a dirty ledger, because it rewrites and restores what it touches. And the planted line names a spec the compiler accepts TODAY, looked up at run time -- a hardcoded name would rot into a line that is true, and the audit would quietly stop testing anything. The sweep also corrected the note that started it: memory said four ledgers name specs by path, and there are five, plus one keyed by line hash. A count written while chasing something else is a sample, not a census. Refs #2864 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
gHashTag
enabled auto-merge (squash)
August 29, 2026 23:40
…s-fail # Conflicts: # .claude/skills/ci-gates/SKILL.md
Contributor
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
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.
Yesterday a stale ledger entry — a line still excusing a spec that had been
fixed — was found because the corpus ratchet went red and named it. That is
luck, and luck does not generalise.
Asked deliberately this time: plant a line naming a spec that passes, so the
line is false by construction, and run each gate.
tools/seal_baseline.txttools/conflict_markers_baseline.txtdocs/reports/suite_expectations.jsonUNEXPECTED PASStools/specs_generate_baseline.txttools/verilog_width_baseline.txtTwo of five announced the defect and returned success. A line outliving its debt
could live there forever — gate green, note scrolling past. Both now fail, with
the repair named in the message.
tri ledgers auditA gate whose subject is other gates: it plants the false line itself and demands
each one fail.
Run against the pre-fix gates it reports
MISSED 2and exits 1. Bothdirections were run.
Two properties worth copying:
touches, and a restore would discard uncommitted work.
time. A hardcoded name would rot into a line that is true, and the audit
would quietly stop testing anything.
Controls
check_specs_generate.pyFAIL: 1 spec(s) … now generatecheck_verilog_widths.pyFAIL: 1 ledgered spec(s) …--self-checktri ledgers auditon pre-fix gatesMISSED 2, exit 1tri ledgers auditaftercaught 4, exit 03 unit tests in
ledgers.rs(every template names a spec; no two ledgers sharea gate; substitution keeps the path).
A correction
Memory said four ledgers name specs by path. The sweep found five, plus
one keyed by line hash. A count written while chasing something else is a
sample, not a census.
Gates, run locally
specs generate 0 (and
--self-check0) · verilog widths 0 (and--self-check0) · specs parse 0 · conflict markers 0 · seal coverage 0 · seals fresh 0 ·
types ratchet 0 · skill check 0 · ledgers audit 0 ·
cargo test -p tri0 ·rustfmt --check cli/tri/src/ledgers.rs0.bootstrap/src/compiler.rsis untouched, soFROZEN_HASHdoes not move.Refs #2864