Skip to content

Add a release gate the roster check cannot satisfy - #134

Merged
bitcoinuniverseadmin merged 1 commit into
developfrom
feat/protocol-release-gate-20260918
Sep 18, 2026
Merged

bitcoinuniverseadmin merged 1 commit into
developfrom
feat/protocol-release-gate-20260918

Conversation

@bitcoinuniverseadmin

Copy link
Copy Markdown

Implements FE-GATE-04 and FE-COVERAGE-01 from the 2026-09-18 protocol coverage handoff. Pairs with bitcoinuniverseio/backend-apis#203, which produces the acceptance summary this gate reads.

Why a second gate

--check asks whether this repository still agrees with itself about which protocols exist. It runs on every commit, which is exactly what makes it the wrong place to ask whether a revision is fit to release: a gate that runs constantly is one people learn to make green.

What --release refuses

  • Unknown denominator. No acceptance summary, or one counting something other than the operations the manifest declares.
  • Forged completion. A summary claiming more passes than the descriptors do, an acceptance value outside the five allowed, or unqualified evidence records.
  • Missing history. A complete historical coverage claim, or a readable release status, on a protocol whose operations were never accepted.
  • Missing or duplicate operations. A protocol declaring none, declaring one twice, or listing operations its descriptors do not match.
  • Wrong revision or network. A manifest from a revision other than the one being released, or a protocol that does not declare the network the release serves.

Usage: protocol-contract.mjs --release <url|file> [--expect-sha <sha>] [--network <name>]

What it says today

Run against the pinned manifest and against https://explorer.bitcoinuniverse.io, it exits 1 and names all seven historical complete declarations B01 flagged, plus the missing denominator. That is the correct verdict: no declared read has a qualified acceptance run behind it.

Verification

  • 40 gate tests pass, 15 of them new; each new case is a specific way a release could be forged.
  • One test asserts that the roster this repository pins passes --check and fails --release, so the two gates cannot silently converge.
  • 192 frontend universe tests pass. tsc --noEmit clean. Text gate passes.

🤖 Generated with Claude Code

The roster gate answers whether this repository still agrees with itself about
which protocols exist. It runs on every commit, and a gate that runs constantly
is one people learn to make green, so it was never the right place to ask
whether a revision is fit to release.

Adds --release, a separate mode that refuses the five ways a release can be
declared complete without being complete: an unknown denominator, a summary
that counts something other than the operations declared, forged completion
where a label claims more than the descriptors do, missing or duplicated
operations, and a revision or network other than the one being released. It
also refuses a complete historical coverage claim or a readable release status
on a protocol whose operations were never accepted, which is the specific gap
the seven historical declarations left open.

Run against what this repository pins today, and against the live deployment,
it fails, naming all seven. That is the correct answer: no declared read has a
qualified acceptance run behind it yet.

The frontend acceptance type widens with it, so a consumer can represent a
result other than the single hardcoded literal it was pinned to.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@bitcoinuniverseadmin
bitcoinuniverseadmin merged commit b19d49c into develop Sep 18, 2026
8 checks passed
@bitcoinuniverseadmin
bitcoinuniverseadmin deleted the feat/protocol-release-gate-20260918 branch September 18, 2026 19:32
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