You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Cut registry-consensus validation to the ciris-canonical founder-quorum — retire the single-steward-key root
Directive (maintainer): end-state cutover, NO backward-compat. "It is fine if it breaks, we need to get to the end state, just cut over." Do not build a dual-accept migration window.
The change
Today the single registry authority key is one secret vaulted + replicated US↔EU — the AV-14 single-point-of-compromise in HA clothing. It is being retired. Registry authority becomes the 2-of-3 founder-quorum of the three fabric occurrences' operational keys (lens + registry-us + registry-eu), the ciris-canonical governed infrastructure community (CEG 1.0-RC2 §5.6.8.10 / §8.1.13.3; CIRISRegistry/MISSION §2.1.1).
So the query type that validates registry consensus changes:
FROM — single-key verification (steward_key.rs, §10.2 response-auth): pin one steward fingerprint, verify signatures against that key.
Re-root the consumer pin: from a steward fingerprint → the community_key_id = "ciris-canonical" trust anchor.
Resolve + quorum-verify (CEG 1.0-RC2 §8.1.13.1.1(a)): resolve_community("ciris-canonical", now) → founder-subset eval {m : m.role == founder} → require 2-of-3 signatures; comparator = quorum_weight DESC → signed_timestamp DESC → canonical_bytes_hash (the same one the resolver already pins).
Retire steward_key.rs as the registry-consensus trust root. It does not vanish — each occurrence still exposes its own identity (now /v1/identity, the §5.6.8.8.2 six-key aggregate) — but it is no longer the root of registry-consensus trust. The quorum is. No fallback to the single-key path.
Why this is correct (CEG 1.0-RC2, grounded)
ciris-canonical is cohort_subkind: infrastructure → plaintext Commons, no DEK (§8.1.13.3 Open-Q1 ruling): the trust root is world-auditable by design, so quorum verification reads cleartext member/founder data.
An infrastructure community's authority is the founder-quorum (§8.1.13.1.1(a) founder-subset eval), not any single key. Using the occurrences' operational keys as the quorum shares is conformant — a member key is just the occurrence's identity key; the quorum threshold supplies the privilege gate (so no separate offline authority key, and no §5.6.8.8.2/AV-17 reuse issue — same signing purpose).
Cross-repo dependency (not a blocker on starting the verifier wiring)
Registry must emit the ciris-canonicalcommunity Contribution naming the three occurrences as founders (role == founder). That gates on the three having distinct operational keys — i.e. splitting the shared vaulted key into registry-us / registry-eu operational keys (lens already has its own). That's the fabric-node key split; Verify's new query validates against the community once it's emitted. Verify-side wiring (route registry-consensus → verify_founder_quorum, re-root the pin) can land ahead of it against test fixtures.
Acceptance
Registry-consensus validation calls verify_founder_quorum over ciris-canonical; the single-steward-key path is no longer consulted for it.
Consumer pin is community_key_id, not a steward fingerprint.
2-of-3 founder-quorum enforced via §8.1.13.1.1(a) resolution; no single-key fallback.
steward_key.rs retained only as per-occurrence identity surface, not the consensus root.
Cut registry-consensus validation to the
ciris-canonicalfounder-quorum — retire the single-steward-key rootDirective (maintainer): end-state cutover, NO backward-compat. "It is fine if it breaks, we need to get to the end state, just cut over." Do not build a dual-accept migration window.
The change
Today the single registry authority key is one secret vaulted + replicated US↔EU — the AV-14 single-point-of-compromise in HA clothing. It is being retired. Registry authority becomes the 2-of-3 founder-quorum of the three fabric occurrences' operational keys (
lens+registry-us+registry-eu), theciris-canonicalgoverned infrastructure community (CEG 1.0-RC2 §5.6.8.10 / §8.1.13.3; CIRISRegistry/MISSION §2.1.1).So the query type that validates registry consensus changes:
steward_key.rs, §10.2 response-auth): pin one steward fingerprint, verify signatures against that key.infrastructure_community.rs):verify_founder_quorumoverciris-canonical— the machinery already shipped in v5.0.0 (Canonical encoding for M-of-N bootstrap key set + rotation ceremony tooling #31). This is wiring + re-rooting, not new crypto.Concretely:
community_key_id = "ciris-canonical"trust anchor.resolve_community("ciris-canonical", now)→ founder-subset eval{m : m.role == founder}→ require 2-of-3 signatures; comparator = quorum_weight DESC → signed_timestamp DESC → canonical_bytes_hash (the same one the resolver already pins).steward_key.rsas the registry-consensus trust root. It does not vanish — each occurrence still exposes its own identity (now/v1/identity, the §5.6.8.8.2 six-key aggregate) — but it is no longer the root of registry-consensus trust. The quorum is. No fallback to the single-key path.Why this is correct (CEG 1.0-RC2, grounded)
ciris-canonicaliscohort_subkind: infrastructure→ plaintext Commons, no DEK (§8.1.13.3 Open-Q1 ruling): the trust root is world-auditable by design, so quorum verification reads cleartext member/founder data.Cross-repo dependency (not a blocker on starting the verifier wiring)
Registry must emit the
ciris-canonicalcommunityContribution naming the three occurrences as founders (role == founder). That gates on the three having distinct operational keys — i.e. splitting the shared vaulted key intoregistry-us/registry-euoperational keys (lensalready has its own). That's the fabric-node key split; Verify's new query validates against the community once it's emitted. Verify-side wiring (route registry-consensus →verify_founder_quorum, re-root the pin) can land ahead of it against test fixtures.Acceptance
verify_founder_quorumoverciris-canonical; the single-steward-key path is no longer consulted for it.community_key_id, not a steward fingerprint.steward_key.rsretained only as per-occurrence identity surface, not the consensus root.