Skip to content

tri seals twins — one spec, two seals, two answers - #2768

Merged
gHashTag merged 1 commit into
masterfrom
w699-seal-twins
Aug 28, 2026
Merged

tri seals twins — one spec, two seals, two answers#2768
gHashTag merged 1 commit into
masterfrom
w699-seal-twins

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Refs #2767

seals with a spec_path        1311
specs sealed more than once    547
of those, pairs that DISAGREE   31

t27c seal <spec> --save writes .trinity/seals/<module>.json with a path-derived name. Many specs also carry an older seal keyed by the bare module name — ast.json / compiler_ast.json, testgen.json / codegen_testgen.json — both naming the same spec_path. The seal gate reads both; --save updates one.

The failure it produces is quiet. On #2766 a spec was repaired, re-sealed, and coverage stayed red — on the twin. This command names those pairs in one call:

tri seals twins
  specs/brain/gwt_model.t27
      gwt_model.json
          gen_hash_zig       sha256:68388d95454d0
    ! brain_gwt_model.json
          gen_hash_zig       sha256:abb4a75b3ea93

It reports; it does not write

Which of two disagreeing seals is the truth is #2767's decision. Re-sealing both would freeze whichever generation happens to be current into two places instead of one — the same defect, wider.

Tests

Two, each for a way the comparison could be wrong:

  • a difference in any one of the five fields counts. testgen's twin matched on rust and verilog byte for byte and differed on zig and c; a comparison written against a single hash would have called that pair identical.
  • an absent field is not equal to a present one. A seal written before gen_hash_rust existed does not silently agree with one written after.

A missing .trinity/seals is an error, not "zero twins" — nothing was read, so nothing is claimed.

Its own reading cross-checks the seal gate: 1311 seals carry a spec_path, and check_seal_coverage.py counts 1316 total with 5 no-spec-path.

🤖 Generated with Claude Code

`t27c seal <spec> --save` writes a path-derived file name. Many specs also carry
an older seal keyed by the bare module name, both naming the same `spec_path`,
and the gate reads both while --save updates one.

    seals with a spec_path        1311
    specs sealed more than once    547
    of those, pairs that DISAGREE   31

The failure is quiet: on #2766 a spec was repaired, re-sealed, and `coverage`
stayed red -- on the twin. This command names those pairs in one call.

It reports and does not write. Which of two disagreeing seals is the truth is
#2767's decision; re-sealing both would freeze whichever generation happens to
be current into two places instead of one.

Two tests, each for a way the comparison could be wrong: a difference in ANY of
the five fields counts (testgen's twin matched on rust and verilog and differed
on zig and c -- a single-hash comparison would have called it identical), and an
absent field is not equal to a present one.

A missing .trinity/seals is an error, not "zero twins": nothing was read, so
nothing is claimed.

Refs #2767

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

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

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

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-28 23:00:31 UTC

Summary

Status Count
Total Open PRs 8
PRs with Failing Checks 7
PRs with All Checks Green 1
READY 0
FAILING 7
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=628395ca4abb != 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).

@gHashTag
gHashTag merged commit 9107867 into master Aug 28, 2026
33 checks passed
@gHashTag
gHashTag deleted the w699-seal-twins branch August 28, 2026 23:11
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