Expand description
The v2 Control Plane (CORD-04 over CORD-01/02).
Editions keep v1’s exact grammar — the vsk/eid/ev/ep/vac tags, the frozen
edition_hash (community::version, label vector-community/v1/edition,
which upstream froze verbatim), and the fold rules — but ride the v2 stream
envelope: a kind-3308 UNSIGNED rumor inside a plaintext seal (20014) at
control_pk. Authorship moves from the rumor’s own signature (v1) to the
seal’s (v2): super::stream::open_wrap Schnorr-verifies the seal and pins
rumor.pubkey == seal.pubkey, so by the time an edition is parsed here its
author is already proven. The plaintext seal is load-bearing: a compaction
re-wraps the signed seal into a new epoch byte-verbatim, and the signature
(over the rumor string) survives — an encrypted seal could not.
Two v1↔v2 wire deltas, both deliberate:
- v2 editions carry NO
["v","1"]protocol tag (frozen derivations partition protocol revisions by address; version tags are the rejected mechanism). - the owner is proven by the self-certifying
community_idcommitment (super::derive::verify_community_id), not an attestation event — vsk 7 is retired.
Structs§
- Channel
Metadata - Channel metadata — the vsk-2 entity content (CORD-03 §2).
eid= the channel_id; gated byMANAGE_CHANNELS. Absent flags mean false; deletion is terminal. - Community
Identity - A v2 community’s self-certifying identity triple. The id IS the owner commitment — carry all three together and verify before trusting any claim.
- Community
Metadata - Community metadata — the vsk-0 entity content (CORD-02 §6).
eid= the community_id itself; gated byMANAGE_METADATA. - Genesis
- The two wraps of a community genesis — exactly two owner-signed editions:
the community metadata (vsk 0) and one public
#generalchannel (vsk 2). Nothing more — no default roles, no scaffolding. - Image
Ref - An encrypted-blob image pointer (icon/banner): the media server sees only an
opaque blob; members fetch, decrypt with
key/nonce, and verifyhash.
Enums§
- Control
Error - Errors from the control plane layer (envelope errors ride inside).
Constants§
- MAX_
DESCRIPTION_ BYTES - UTF-8 byte cap on a community description.
- MAX_
NAME_ BYTES - Protocol-wide UTF-8 byte cap on names (community, channel, role).
Functions§
- build_
edition_ rumor - Build the unsigned kind-3308 edition rumor — v1’s grammar minus the protocol
vtag. Control editions carry nomstag: they fold by version, not time. - genesis
- Mint a v2 community: fresh identity (salt-committed to the owner), fresh community_root, and the two genesis editions sealed at the epoch-0 control plane. The caller persists the secrets and publishes the wraps.
- open_
control_ edition - Open a control-plane wrap into a verified, parsed edition. Strict on both gates: the rumor must be kind 3308, and the seal must be the plaintext form.
- parse_
edition_ rumor - Parse an edition from an ALREADY-VERIFIED rumor (one produced by
stream::open_wrap, which proved the seal signature, the author binding, and the rumor id). No signature lives on the rumor itself — never feed this a rumor that didn’t come through the stream verifier. - seal_
control_ edition - Seal a signed-by-
author_keysedition rumor into a control-plane wrap. Local-keys convenience; bunker accounts usestream::seal_content+ their remote signer +stream::wrap_sealfor identical wire output. - validate_
channel_ metadata - validate_
community_ metadata - Enforce the protocol byte caps before an edition is built (a strict reader may drop over-cap state; never publish what peers would refuse).