Repository navigation
fix(seals): reseal the seals the corpus and the compiler moved - #5578
Merged
Merged
Conversation
check_seal_currency.py reported 544 stale generated-code hashes on master db870cd, and the seal-coverage gate restored by #5454 604 seals that no longer hold. Nothing in the merge path reseals; the first gate sat behind Spec Guards' first red step and the second was empty until #5454. Why they moved, measured. 90 specs never changed while their output did: bisecting t27c across the history puts it on the 2026-09-17 compiler changes (#3962 "and the seal moves for it", #3973, #4114) and the 2026-09-08 gen-c/gen-rust wave, plus S07-S10 seals made with a pinned binary on 2026-10-01. 245 specs changed after sealing: 154 last edited by bee commits that implement bodies and never reseal, 91 by repairs on master. 336 specs are resealed with the t27c built from master (compiler sources unchanged since 756bcff): the 307 currency-stale ones and 29 more the coverage gate flags, 34 of them hollow seals whose specs now generate. specs/ar/ternary_logic.t27 still generates nowhere and is resealed with --force, on the record as hollow. tri seals sync-twins: all consistent. Currency stale 544 -> 14 and coverage 604 -> 14; the 14 are the seven specs/ml/ seals #5575 reseals. Hollow 65 -> 31. A reseal records what the compiler produces, not that it is correct, as in #3440 and #2909. Refs #5497 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
PR DashboardGenerated at: 2026-10-02 11:16:02 UTC
Summary
Seal Status
|
This was referenced Oct 2, 2026
Closed
This was referenced Oct 2, 2026
gHashTag
added a commit
that referenced
this pull request
Oct 2, 2026
…#5577) (#5605) * fix(seal): seal --save runs the spec's tests and refuses on FAIL (#5577) #5578 resealed 336 specs with `t27c seal --save`, which refused only when a backend failed to generate and never ran a test. 13 class-(c) specs with failing tests got fresh seals, and the hash-only seal-coverage gate reported them as holding. - seal --save now runs the same machinery as `t27c test-report`. FAIL: refuse, name every failing test, exit 1, write nothing. BLOCKED (e.g. no zig): seal with a notice; blocked is not failing. pass: seal, printing the measurement. --force: seal anyway, with the failures recorded in the seal. - The seal records a `tests` object; twins get the same record. - check_seal_coverage.py reads `tests.failed > 0` as a new kind, `tests-fail`, so a forced seal is on the record instead of holding. Self-check gains three controls. - tools/seal_baseline.txt: the 26 seal files of the 13 specs from #5577 are ledgered as known-broken (`stale`, the state #5580 left them in), with the failing tests named in the detail. Nothing was resealed. - test_report's scratch dir is per-process, so concurrent runs don't collide. Refs #5577 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(now): the ledger lines cite #5577 rather than name the tests Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
gHashTag
added a commit
that referenced
this pull request
Oct 3, 2026
…rrency reads the stale ledger (#5737) * fix(gft): sadd orders before it subtracts; magsub underflow is zero (Fixes #5506) emit-bitexact's Zig arm (-OReleaseSafe) trapped on two defects that C and Rust computed wrongly without trapping: - sadd called magsub(ma, mb) before ordering the operands, so magsub shifted by a negative count (UB in C, unchecked in Rust -O, a trap in Zig). - below the smallest binade the normalisation floors and mant goes negative, so (off << 9) | mant is no GF-T16 encoding (sadd(256, 66047) = 0xFFFFFEFF); C/Rust wrap on `as u32`, Zig's @intcast traps. Such a difference is now 0, as enc() already makes anything below 2^-40. The identical body lives in 31 specs (the duplicate-body ledger keeps the group whole); all are fixed and the 30 sealed ones resealed with their tests passing. The Python model gets the same rule, a self-test and a planted mutant. The gate's comparison is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(spec-guards): seal currency reads the stale ledger it was blind to (Refs #5577) check_seal_currency failed master on 30 seals (15 specs whose own tests fail, #5577) that #5580 deliberately left on their pre-#5578 hashes and that tools/seal_baseline.txt already records as kind `stale`. It never read that ledger, so it was red by design and a NEW stale seal hid behind the 30. It now reads the ledger through check_seal_coverage.baseline() (one ledger, one reader) and forgives a stale seal only if the ledger says `stale` AND its spec_hash still disagrees with the spec. Unmoved-spec drift and any unledgered stale seal still fail; a ledgered seal that holds again is a NOTE to shrink the ledger. The self-check plants each condition away. Resealing the 15 would certify broken contracts; the repair is fixing each spec, then `t27c seal --save`. spec-guards now also triggers on the ledger and its reader. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- 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.
What
The seals no longer describe what the tree generates:
check_seal_currency.py(Spec Guards): 544 stale generated-code hashes on master db870cd.check_seal_coverage.py(restored by The seal gate is back: a merge her verdict refused had made it one comment line #5454): 604 seals that no longer hold.Nothing in the merge path reseals. The first gate sat behind Spec Guards' first red step, and the second was empty until #5454.
Why they moved (measured, not assumed)
90 specs did not change; their output did. I built t27c at seven checkpoints between 2026-09-08 and 2026-10-01, then three more inside 2026-09-17, and hashed each spec's output per backend. Every attributable drift lands on the 2026-09-17 compiler changes:
The rest were sealed before 2026-09-09, inside the 2026-09-08 gen-c/gen-rust wave (#3401..#3502). Twelve seals from 2026-10-01 are the S07-S10 seals made with a pinned binary.
245 specs changed after sealing: 154 last edited by bee commits that implement bodies and never reseal, 91 by repairs on master.
Change
t27cbuilt from master. The compiler sources are unchanged since 756bcff, which is what the binary was built from.check_seal_currency.py --stale-specslists.gen_hash=none) whose specs now generate and get real hashes.specs/ar/ternary_logic.t27still generates in no backend (it is inspecs_generate_baseline.txt). It is resealed with--force, on the record as hollow.tri seals sync-twins: all twins consistent. Four seal files are new, each a twin of an existing seal whose spec's module name changed (fifo_tb, cordic, adapter, lsp/language).specs/ml/specs are left to fix(specs): seven ml specs stop discarding tokens #5575, which reseals them with their repair.Result
With #5575 both reach 0. A reseal records what the compiler produces, not that it is correct; this follows #3440 (57 specs) and #2909 (926 seals).
Refs #5497
🤖 Generated with Claude Code