Repository navigation
feat(release): pin the root and publish the first keys.json - #241
Merged
Merged
Conversation
The owner's root ceremony is done (2026-11-15).
- PINNED_ROOTS pins cloudhal-root-2026a (Ed25519,
/rtDvlSlCYV402NiA/7OOFk+ryBv4DIWmkqwRyrVzqw=), frozen.
- security/keys.json, keys.json.sig and keys.source.json are the ceremony's
files, byte for byte (never re-signed here): issuedAt 2026-11-15T07:00:45Z,
the release key cloudhal-release-2026a and the yank key cloudhal-yank-2026a.
- The key doc gains the root row (with hex, SHA-256 and PEM) and the yank
key's row; tests keep both equal to PINNED_ROOTS and to keys.json.
- A test verifies the committed keys.json with PINNED_ROOTS and refuses a
flipped byte; the no-root refusals inject roots: {}.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Madraka <[email protected]>
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 owner's root ceremony is done (2026-11-15). This PR pins the root and publishes the first signed key list. Nothing else changes.
PINNED_ROOTS(packages/release-verify/src/trust.ts) pinscloudhal-root-2026a, Ed25519,/rtDvlSlCYV402NiA/7OOFk+ryBv4DIWmkqwRyrVzqw=. Both the map and the entry are frozen.security/keys.json,security/keys.json.sigandsecurity/keys.source.jsonare copied from the ceremony checkout, byte for byte, checked withcmpbefore the commit. Nothing was re-signed here.keys.json: SHA-2569d6030ce9e5101e101c358415e1d5157e2dbe08978c5fc233c2488ede1d51e7c,issuedAt2026-11-15T07:00:45Z,expires2027-11-15T07:00:45Z, signed bycloudhal-root-2026a.keys.json.sig: SHA-2568cfe247e1a124e3e20bb4d730ebe1892925f76ce8d8f96e0d3e16b8fd62f3d21, 64 bytes.cloudhal-release-2026a(release, active, 2026-11-12 to 2027-11-12) andcloudhal-yank-2026a(yank, active,kCnR6ndVCEVQ+EoNDFsP9tKuScP6xB95emcQCzZsNG4=, 2026-11-15T00:00:00Z to 2027-11-12T00:00:00Z).docs/security/release-signing-keys.md:cloudhal-root-2026arow (since 2026-11-15), with hex, SHA-256 and the SPKI PEM for cross-checking, and a note about the firstkeys.json. The "None yet" line is gone.cloudhal-yank-2026arow with its window, hex and SHA-256.release-verify/test/package.test.ts:PINNED_ROOTSequals the doc's root rows, holds exactlycloudhal-root-2026a, and is frozen down to the entry;security/keys.jsonverifies withPINNED_ROOTS(at a fixed date inside its validity), its keys equalkeys.source.json, and a flipped byte is refused;keys.json's yank key.release-verify/test/trust.test.ts: the no-root refusal passesroots: {}, and a list from an unpinned root is still refused with the pinned default.cli/test/deploy-release.test.ts: the "no root pinned" refusal passestrustRoots: {}, so it is still covered: it names the ceremony and fetches nothing.@cloudhal/release-verifypatch.Tests (one at a time; paused until the machine load fell below 6)
release-verify: 86 passed, 1 skipped.
cli:
core-contracts
release-schemas: 23.docs: 41.
tsc for release-verify and cli, biome and size:check are clean.
After merge (owner and PM, per the runbook's First-time setup)
From this merge on, every release attaches the trust lists and refuses to publish until cloudhal.dev serves a
yanked.jsonthat verifies. Run these straight after the merge:first_run(step 8);pnpm --filter @cloudhal/docs run deploy(step 9).Refs #226, #227
🤖 Generated with Claude Code