Repository navigation
Conversation
For a spec of the t27 repo, t27_spec adds `seal`: verdict (verified, stale, unsealed, vacuous, failing, forced, unknown), fresh, test counts, sealed_at, seal_schema, built_by. The verdict is decided by seal_verdict.t27 (gHashTag/t27#10239, built on seal_check.t27 and reuse.t27) compiled to wasm; seal.mjs is glue (fetch, sha256, call). Part of gHashTag/t27#10066. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Summary by t27-beesThe change adds a Worth a look
Read: 7 files, +132 -2, the whole diff. Head |
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Thanks. Fixed in the next commit: a seal file that does not parse is now treated as no seal (unsealed) instead of throwing. The other points do not hold:
|
…ke-92720d # Conflicts: # package.json # wasm/BUILD
…ke-92720d # Conflicts: # package.json # server.mjs
t27_specnow returns the spec's seal as a receipt, so an agent that reuses a spec sees whether it is verified. Part of gHashTag/t27#10066.The verdict logic is a new t27 spec compiled to wasm:
specs/t27mcp/seal_verdict.t27, in gHashTag/t27#10239. It callsseal_check_algfromspecs/verified/seal_check.t27and thePART_*codes fromspecs/verified/reuse.t27; nothing of those rules is restated in this repo. The JavaScript is glue: it fetches.trinity/seals/<parentdir>_<Module>.jsonand the spec bytes through the existing raw-file cache, hashes the bytes with Node crypto, and hands strings and counts to the wasm.For a spec of the t27 repo,
t27_specaddsseal:verdictis one ofverified,stale,unsealed,vacuous,failing,forced,unknown, decided in that fail-closed order. An unsealed spec carriesverdict,fresh: falseandnoteonly. A seal whose recordedspec_pathis another path (case twins, gHashTag/t27#8540) counts as unsealed."fresh" means the spec bytes are the sealed bytes. The server cannot regenerate the four generated backends, so
t27c seal --verifystays the full check; the spec header andwasm/BUILDsay so.Smoke output (run on the Railway lab, against gHashTag/t27 master fdb6b28dd)
specs/ternary/clocked_counter.t27specs/policy/own_language.t27at5b70c4fb4feespecs/ternary/rust_repeat_counts.t27(unsealed)Also:
hello_world(unsealed) 724 -> 868 bytes. The reply grows by 145 to 355 bytes.own_language.t27was stale on 2026-10-18, as the task said, and was resealed on master the same day (verified, fresh, 36/36 now). To show the stale path I pinnedT27_REFto5b70c4fb4fee2786a1c1df42427e2fac97deb071, the commit that changed the spec while its seal was still the old one.node smoke.mjspasses in full on the lab, including two new checks: clocked_counter isverified/fresh withsealed_at,seal_schemaandbuilt_by; every t27 spec carries a verdict word and a booleanfresh.Glue budget
seal.mjs25 lines (new),server.mjs+4,smoke.mjs+6,package.json+1/-1 (files list). About 35 added in total, under 40 per file and 80 per PR.wasm/BUILDgains the rebuild recipe, sha256 list, test results and the six negative controls (documentation).Not done
importerscount: skipped. The manifest has nouseedges, andt27c use-edgesis not available to the server; counting would mean fetching every spec source.module: null; their seal file name cannot be derived, so they showunsealed.sealfield (stated in the tool description).🤖 Generated with Claude Code