Skip to content

fix(seals): unseal the 15 specs whose own tests fail (Refs #5577) - #5580

Merged
dmitrii-f-t27 merged 2 commits into
masterfrom
fix/unseal-failing-specs-5577
Oct 2, 2026
Merged

dmitrii-f-t27 merged 2 commits into
masterfrom
fix/unseal-failing-specs-5577

Conversation

@dmitrii-f-t27

Copy link
Copy Markdown
Collaborator

Refs #5577, #5576, #5579.

Why

#5577 (the seal triage on a26af0ad5) puts 30 seals on 15 specs in class (c): t27c test-report <spec> reports failing tests, and "a seal over a failing spec certifies a broken contract". Our earlier PRs resealed all 30 of them anyway:

On d04bf141 the tests still fail for all 15 specs. Each spec was run on its own with Zig 0.16.0, one run at a time, so the shared work dir #5577 warns about was not an issue. Every failing test name matches #5577.

What this does

It restores the 30 seal files to their a26af0ad5 state. Between a26af0ad5 and master, only #5572 and #5578 touched these files. Nothing else changes.

What the gates say now

  • tools/check_seal_coverage.py: FAIL: 30 seal(s) newly do not hold, all [stale], exactly these 30.
  • tools/check_seal_currency.py: STALE generated-code hash: 30.

That is the honest state #5577 tracks: fix the spec or its generated body first, then run t27c seal <spec> --save. There is no --update-baseline entry, as the gate itself says. Seal Coverage on master goes from green back to red on these 30. Spec Guards now stops at seal currency, before it reaches ring-096.

Not in this PR

The 542 class (b) seals that #5578 resealed (gen drift, #5576) are left as they are. #5578 attributed that drift to compiler commits by bisection (#3962, #3973, #4114 and the 2026-09-08 gen wave). Whether that is enough review, or whether those seals go back too and are reviewed one spec at a time, is the maintainer's call.

🤖 Generated with Claude Code

#5578 resealed 26 of these seals in bulk and #5572 resealed the other 4
(html, xml) after its discard repair. The triage in #5577, run on
a26af0a, had already put all 30 in class (c): `t27c test-report`
reports failing tests for each of the 15 specs, and a seal over a
failing spec certifies a broken contract. The tests still fail on
d04bf14, so the seals go back to their a26af0a state. Only #5572 and
#5578 touched these files since then.

Seal Coverage and seal currency now report exactly these 30 seals as
stale. That is the state #5577 tracks: fix the spec or its generated
body first, then `t27c seal <spec> --save`. No baseline entry, as the
gate itself says.

Refs #5577

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

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-02 13:25:33 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 45
PRs with All Checks Green 5
READY 4
FAILING 45
PENDING 0
NO CHECKS YET 0

These columns do not partition: 4 + 45 + 0 + 0 = 49, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=b7d5cc5c4cf1 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

Every PR adds a docs/now/ entry; this one was missing it, so NOW Sync
Gate and the entry-shape check (`check`) refused the PR.

Refs #5577

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

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-02 14:26:15 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 46
PRs with All Checks Green 4
READY 3
FAILING 46
PENDING 0
NO CHECKS YET 0

These columns do not partition: 3 + 46 + 0 + 0 = 49, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=b7d5cc5c4cf1 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@dmitrii-f-t27
dmitrii-f-t27 merged commit 4f65684 into master Oct 2, 2026
31 of 35 checks passed
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 2, 2026
…) (#5612)

#5580 deliberately restored 30 seals on specs whose own tests fail; #5605
baselined 26 of them and missed TriHtml, TriXml, encoding_TriHtml and
encoding_TriXml. Seal Coverage has failed on master and every PR since,
with exactly those four. Their specs still fail their tests, so the repair
is the baseline line, not a re-seal.

Local gate: OK, 1415 seals, 30 stale = the #5580 set.

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>
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