/** * The versioned vocab artifact: the capability→token map applied over the * channel (REGISTER → SERVE). It is authoritative and out-of-band from any * worker — no capability→token map is ever baked into a worker. * * Core vocabulary ships opinionated and works out of the box; authors extend it * by adding networks/subnetworks/roles in THIS SAME schema (there is no second * schema for extensions). * * Per-role attributes: * - `requires` — enrolment capability requirements (the registry * gate). These gate WHO may fill the role; they are * never encoded in the routing token. * - `weight` — cognition weight for the role. * - `seats` — either a seat count (integer ≥ 0) or an explicit * list of named seats (each a valid seat label). * - `seatsDistinctFamily` — diversity SLO: when true, seats of this role must * be filled by distinct families (e.g. #red ≠ #blue). */ export interface VocabRole { readonly requires?: readonly string[]; readonly weight?: number; readonly seats?: number | readonly string[]; readonly seatsDistinctFamily?: boolean; } export interface VocabNetwork { readonly roles?: Readonly>; readonly subnetworks?: Readonly>; } export interface VocabDocument { readonly version: number; readonly networks: Readonly>; } export interface VocabError { readonly path: string; readonly code: string; readonly message: string; } export type VocabValidationResult = { readonly ok: true; readonly value: VocabDocument; } | { readonly ok: false; readonly errors: readonly VocabError[]; }; /** * Validate an unknown value against the vocab-artifact schema. On success the * returned `value` is a newly constructed {@link VocabDocument} normalized from * the input — it does not share referential identity with `input`. */ export declare function validateVocabDocument(input: unknown): VocabValidationResult;