{
  "name": "harness-spec",
  "language": "rust",
  "version": "0.1.0",
  "description": "HarnessSpec v0.1 contract layer \u2014 fail-closed TOML manifest parsing, validation, and canonical BLAKE3 hashing (FINAL_SPEC \u00a75)",
  "manifest": "forge-rs/harness-spec/Cargo.toml",
  "manifestSha256": "c9fea2c67ab49cdbd63b59071957911e10151ca42cd9f5ea932901ccfe0a5d51",
  "status": "source-reference",
  "registryPublicationVerified": false,
  "route": "/libraries/rust/harness-spec",
  "features": {},
  "files": [
    {
      "path": "forge-rs/harness-spec/src/error.rs",
      "sha256": "edf95e0c72d9b41828ce610c46edfbba721e1e744bd5be00659b91de7a08fbfa",
      "artifactSha256": "a10dc94d11f2e8a964c421da552091b47cb182a02d1627c49b6a52bd9c7d5f42",
      "url": "/reference/source/forge-rs/harness-spec/src/error.rs.txt",
      "declarations": [
        {
          "name": "::SpecError",
          "line": 9,
          "signature": "#[derive(Debug, Error)]\npub enum SpecError {\n    /// The manifest is not well-formed TOML or violates the strict serde\n    /// schema (unknown tables, unknown keys, unknown enum variants, wrong\n    /// scalar types). This is the first \u00a75.16 fail-closed layer.\n    #[error(\"manifest parse failed: {0}\")]\n    Parse(#[from] toml::de::Error),\n\n    /// The manifest parsed but violated one or more \u00a75 validation rules.\n    #[error(\"manifest validation failed:\\n{0}\")]\n    Validation(#[from] ValidationError),\n\n    /// The canonical JSON projection could not be produced. Unreachable for\n    /// derive-only manifests; reserved for defensive completeness.\n    #[error(\"canonical projection failed: {0}\")]\n    Canonicalization(#[from] serde_json::Error),\n}",
          "documentation": "Top-level error type for the HarnessSpec contract layer."
        },
        {
          "name": "::ValidationError",
          "line": 31,
          "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct ValidationError {\n\n}",
          "documentation": "A collected set of \u00a75 validation violations.\n\nValidation is fail-closed but not fail-fast: every applicable rule is\nevaluated and all violations are reported together."
        },
        {
          "name": "::ValidationError::violations",
          "line": 42,
          "signature": "pub fn violations(&self) -> &[Violation];",
          "documentation": "All violations, sorted by manifest path."
        },
        {
          "name": "::ValidationError::contains",
          "line": 47,
          "signature": "pub fn contains(&self, code: ViolationCode) -> bool;",
          "documentation": "True when at least one violation carries the given code."
        },
        {
          "name": "::Violation",
          "line": 69,
          "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct Violation {\n/// Machine-checkable rule code.\n\npub code: ViolationCode,\n/// Dotted manifest path of the offending value (e.g. `tools.deny_default`).\n\npub path: String,\n/// Human-readable explanation, including the governing spec section.\n\npub message: String\n}",
          "documentation": "A single \u00a75 validation violation."
        },
        {
          "name": "::ViolationCode",
          "line": 80,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\npub enum ViolationCode {\n    /// `spec_version` is absent or not `\"0.1\"` (\u00a75.1).\n    InvalidSpecVersion,\n    /// A URI-shaped field is malformed (\u00a75.3, \u00a75.4).\n    InvalidUri,\n    /// An OAS DID field is malformed (\u00a75.3).\n    InvalidDid,\n    /// A `*_env` field is not a valid environment variable name (\u00a75.2\n    /// discipline: env names, never values, live in manifests).\n    InvalidEnvVarName,\n    /// A required string field is empty.\n    EmptyField,\n    /// A tool identifier is not `<interface>/<action>` shaped (\u00a75.9).\n    InvalidToolIdentifier,\n    /// A tool identifier does not resolve against the host registry\n    /// supplied via [`crate::ValidationContext`] (\u00a75.9).\n    UnresolvableToolReference,\n    /// A harness with a non-empty tool allowlist declares no capability\n    /// grants (\u00a75.4).\n    EmptyCapabilityGrants,\n    /// `tools.deny_default` is absent or `false` (\u00a75.9, \u00a75.16).\n    DenyDefaultViolation,\n    /// `tools.approval_required` names a tool absent from `tools.allow`.\n    ApprovalOutsideAllowlist,\n    /// `verification.gates` is empty for a harness with a non-empty tool\n    /// allowlist (\u00a75.10 static approximation of the mutation rule).\n    EmptyVerificationGates,\n    /// A budget is absent, non-finite, or non-positive (\u00a75.8, \u00a75.16).\n    NonFiniteBudget,\n    /// `inference.route_policy` is neither `catalog:live` nor a `model:<id>`\n    /// pin (\u00a75.8).\n    InvalidRoutePolicy,\n    /// A meter key is not exactly two dot-separated segments (\u00a75.11, Garden\n    /// v4 `validate_meter_key`).\n    InvalidMeterKey,\n    /// `telemetry.event_prefix` does not match the Cambium v1 grammar\n    /// (\u00a75.12).\n    InvalidTelemetryPrefix,\n    /// `telemetry.event_prefix` requests a privileged prefix\n    /// (`policy`/`capability`/`approval`/`billing`) that a manifest must\n    /// not claim (\u00a75.12).\n    PrivilegedTelemetryPrefix,\n    /// A `telemetry.emit` entry is not `<subject...>.<verb>` shaped (\u00a75.12).\n    InvalidTelemetryEvent,\n    /// `loop.strategy` names no registered strategy (\u00a75.13).\n    UnregisteredLoopStrategy,\n    /// `spawn.child_budget_fraction_max` is non-finite or outside `(0, 1]`\n    /// (\u00a75.13).\n    InvalidBudgetFraction,\n    /// `identity.max_child_depth` exceeds the runtime maximum derivation\n    /// depth (\u00a75.3).\n    ChildDepthExceedsMaximum,\n    /// `[perception].require_signed_ir` is absent or `false` (\u00a75.14, \u00a75.16).\n    UnsignedPerceptionIr,\n    /// `[perception].modalities` is empty (\u00a75.14).\n    EmptyModalities,\n    /// `[perception].modalities` contains duplicates and is therefore not a\n    /// set (\u00a75.14).\n    DuplicateModalities,\n    /// `[perception].max_media_bytes` exceeds the provider ingest cap\n    /// (\u00a75.14: a manifest may be stricter, never looser).\n    MediaCapExceeded,\n    /// A capability grant or tool binding targets the voice surface,\n    /// violating voice zero-authority (\u00a75.15, \u00a75.16).\n    VoiceAuthorityGrant,\n    /// A `[voice]` rule was violated: `constrained_verbalization` not\n    /// `true`, or another \u00a75.15 MUST (\u00a75.15, \u00a75.16).\n    VoiceRuleViolation,\n    /// `[voice].faithfulness_sampling` is non-finite or outside `[0, 1]`\n    /// (\u00a75.15).\n    InvalidSamplingFraction,\n}",
          "documentation": "Machine-checkable codes for \u00a75 validation rules."
        }
      ]
    },
    {
      "path": "forge-rs/harness-spec/src/hash.rs",
      "sha256": "11a95242d20b94fec88fdae4254be7c313279a7c75b3002c7781e952dd0757af",
      "artifactSha256": "8cbcefc011a6fee8af28a01f97cd2945fce4affbe6b7c30641b2b441197e1697",
      "url": "/reference/source/forge-rs/harness-spec/src/hash.rs.txt",
      "declarations": [
        {
          "name": "::ManifestHash",
          "line": 18,
          "signature": "#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]\npub struct ManifestHash([u8; 32]);",
          "documentation": "BLAKE3 digest of a canonical manifest (\u00a75.16)."
        },
        {
          "name": "::ManifestHash::from_bytes",
          "line": 22,
          "signature": "pub fn from_bytes(bytes: [u8; 32]) -> Self;",
          "documentation": "Wrap a raw 32-byte digest."
        },
        {
          "name": "::ManifestHash::as_bytes",
          "line": 27,
          "signature": "pub fn as_bytes(&self) -> &[u8; 32];",
          "documentation": "The raw digest bytes."
        },
        {
          "name": "::ManifestHash::to_hex",
          "line": 32,
          "signature": "pub fn to_hex(&self) -> String;",
          "documentation": "Lowercase hex encoding (64 characters)."
        }
      ]
    },
    {
      "path": "forge-rs/harness-spec/src/lib.rs",
      "sha256": "1d466a853c5d381ccc3b4dca7af7cb16599b225995bc55d30952d548947a4b85",
      "artifactSha256": "e3b54a23ee0367c8607a2414af397432db14a1d89b7d4f112042011ded79cc2b",
      "url": "/reference/source/forge-rs/harness-spec/src/lib.rs.txt",
      "declarations": [
        {
          "name": "pub use error::{SpecError, ValidationError, Violation, ViolationCode};",
          "line": 51,
          "signature": "pub use error::{SpecError, ValidationError, Violation, ViolationCode};",
          "documentation": ""
        },
        {
          "name": "pub use hash::ManifestHash;",
          "line": 52,
          "signature": "pub use hash::ManifestHash;",
          "documentation": ""
        },
        {
          "name": "pub use manifest::{\n    CapabilitiesTable, ContextScope, ContextTable, EconomicsTable, Gate, HarnessTable,\n    IdentityTable, InferenceTable, LoopTable, Manifest, MemoryTable, PerceptionTable, PolicyTable,\n    SpawnTable, SubstrateTable, TelemetryStream, TelemetryTable, ToolsTable, VerificationTable,\n    VoiceTable,\n};",
          "line": 53,
          "signature": "pub use manifest::{\n    CapabilitiesTable, ContextScope, ContextTable, EconomicsTable, Gate, HarnessTable,\n    IdentityTable, InferenceTable, LoopTable, Manifest, MemoryTable, PerceptionTable, PolicyTable,\n    SpawnTable, SubstrateTable, TelemetryStream, TelemetryTable, ToolsTable, VerificationTable,\n    VoiceTable,\n};",
          "documentation": ""
        },
        {
          "name": "pub use validate::{\n    ToolRegistry, ValidatedManifest, ValidationContext, BUILTIN_LOOP_STRATEGIES,\n    DEFAULT_MAX_DERIVATION_DEPTH, NOUS_INGEST_CAP_BYTES,\n};",
          "line": 59,
          "signature": "pub use validate::{\n    ToolRegistry, ValidatedManifest, ValidationContext, BUILTIN_LOOP_STRATEGIES,\n    DEFAULT_MAX_DERIVATION_DEPTH, NOUS_INGEST_CAP_BYTES,\n};",
          "documentation": ""
        },
        {
          "name": "pub use vocab::{\n    AckPolicy, AsrRouteClass, BargeIn, CacheClass, ContextProvider, DataClass, Enrichment,\n    GateKind, Interjection, Isolation, MediaRetention, MemoryType, Modality, Narrowing,\n    OnBudgetExhausted, PerceptionProvider, PlaneName, PolicyEngine, RouteDecision, Settlement,\n    StreamKind, SubstrateClass, TtsRouteClass, WritePolicy,\n};",
          "line": 63,
          "signature": "pub use vocab::{\n    AckPolicy, AsrRouteClass, BargeIn, CacheClass, ContextProvider, DataClass, Enrichment,\n    GateKind, Interjection, Isolation, MediaRetention, MemoryType, Modality, Narrowing,\n    OnBudgetExhausted, PerceptionProvider, PlaneName, PolicyEngine, RouteDecision, Settlement,\n    StreamKind, SubstrateClass, TtsRouteClass, WritePolicy,\n};",
          "documentation": ""
        },
        {
          "name": "::SPEC_VERSION",
          "line": 71,
          "signature": "pub const SPEC_VERSION: &str;",
          "documentation": "The HarnessSpec revision implemented by this crate (\u00a75.1)."
        }
      ]
    },
    {
      "path": "forge-rs/harness-spec/src/manifest.rs",
      "sha256": "bbf9924ccc3f3d1cb52bb4dbeb076249b8124cf592bb644ded2f7b0414f9d068",
      "artifactSha256": "8d7f8d0dee634566e6375679be7e22984ce02e3c341c59c6264b9b2104d93311",
      "url": "/reference/source/forge-rs/harness-spec/src/manifest.rs.txt",
      "declarations": [
        {
          "name": "::Manifest",
          "line": 29,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct Manifest {\n/// Spec revision; must be `\"0.1\"` for this revision (\u00a75.1).\n\npub spec_version: String,\n/// Harness identity block (\u00a75.3).\n\npub harness: HarnessTable,\n/// Agent identity and lineage block (\u00a75.3).\n\npub identity: IdentityTable,\n/// Capability grants (\u00a75.4).\n\npub capabilities: CapabilitiesTable,\n/// Policy plane binding (\u00a75.5).\n\npub policy: PolicyTable,\n/// Context plane binding (\u00a75.6).\n\npub context: ContextTable,\n/// Optional perception ingress binding (\u00a75.14).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub perception: Option<PerceptionTable>,\n/// Memory plane binding (\u00a75.7).\n\npub memory: MemoryTable,\n/// Inference plane binding (\u00a75.8).\n\npub inference: InferenceTable,\n/// Tool policy (\u00a75.9).\n\npub tools: ToolsTable,\n/// Verification gates (\u00a75.10).\n\npub verification: VerificationTable,\n/// Economics plane binding (\u00a75.11).\n\npub economics: EconomicsTable,\n/// Telemetry plane binding (\u00a75.12).\n\npub telemetry: TelemetryTable,\n/// Execution substrate class (\u00a75.13).\n\npub substrate: SubstrateTable,\n/// Loop strategy configuration (\u00a75.13).\n\npub r#loop: LoopTable,\n/// Child-harness spawn policy (\u00a75.13).\n\npub spawn: SpawnTable,\n/// Optional voice surface binding (\u00a75.15).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub voice: Option<VoiceTable>\n}",
          "documentation": "A complete HarnessSpec v0.1 manifest (\u00a75.1).\n\n`[perception]` and `[voice]` are the only optional tables: a manifest\nwithout `[perception]` declares a text-only harness; a manifest without\n`[voice]` declares a harness against which hosts must not open a voice\nsession."
        },
        {
          "name": "::Manifest::from_toml",
          "line": 74,
          "signature": "pub fn from_toml(source: &str) -> Result<Self, SpecError>;",
          "documentation": "Parse a TOML manifest, rejecting unknown tables, unknown keys,\nunknown enum variants, and ill-typed values (\u00a75.16 strict mode).\n\nThis is the structural layer only; call [`Manifest::validate`] for\nthe semantic \u00a75 rules."
        },
        {
          "name": "::Manifest::validate",
          "line": 81,
          "signature": "pub fn validate(&self) -> Result<ValidatedManifest, SpecError>;",
          "documentation": "Validate against the \u00a75 semantic rules with the default\n[`ValidationContext`], returning a sealed [`ValidatedManifest`] that\ncarries the canonical form and BLAKE3 manifest hash."
        },
        {
          "name": "::Manifest::validate_with",
          "line": 87,
          "signature": "pub fn validate_with(\n        &self,\n        context: &ValidationContext,\n    ) -> Result<ValidatedManifest, SpecError>;",
          "documentation": "Validate against the \u00a75 semantic rules with an explicit\n[`ValidationContext`]."
        },
        {
          "name": "::HarnessTable",
          "line": 98,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct HarnessTable {\n/// Stable harness URI (e.g. `harness://l1fe/one/brownfield-coder`).\n\npub id: String,\n/// Human-readable name.\n\npub name: String,\n/// Harness version (SemVer).\n\npub version: String,\n/// Human-readable description.\n\npub description: String,\n/// Accountable owner: an OAS DID of kind `hmr`, or an entity whose\n\n/// lineage terminates at one (lineage termination is verified at bind\n\n/// time, not by this crate).\n\npub owner: String\n}",
          "documentation": "`[harness]` \u2014 harness identity (\u00a75.3)."
        },
        {
          "name": "::IdentityTable",
          "line": 116,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct IdentityTable {\n/// The harness's OAS DID.\n\npub did: String,\n/// Lineage proof reference; must resolve to a chain terminating at\n\n/// `[harness].owner`'s human root (resolution is a bind-time concern).\n\npub lineage_proof: String,\n/// Maximum child derivation depth; must not exceed the runtime's\n\n/// configured maximum (ANVIL default 16).\n\npub max_child_depth: u32\n}",
          "documentation": "`[identity]` \u2014 agent identity and lineage (\u00a75.3)."
        },
        {
          "name": "::CapabilitiesTable",
          "line": 132,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct CapabilitiesTable {\n/// ACT grant URIs (e.g. `arsenal://act/one-coder/repo-rw`). Must be\n\n/// non-empty for any harness with a non-empty tool allowlist.\n\npub act_refs: Vec<String>\n}",
          "documentation": "`[capabilities]` \u2014 Arsenal ACT grant references (\u00a75.4).\n\nGrants are references; secret material must never appear in a manifest."
        },
        {
          "name": "::PolicyTable",
          "line": 141,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct PolicyTable {\n/// Policy engine provider.\n\npub engine: PolicyEngine,\n/// Policy document references (e.g. `lanes://policy/source-code-private`).\n\npub policy_refs: Vec<String>,\n/// Allowed Cambium data classes; a subset of the frozen vocabulary.\n\npub data_classes_allowed: Vec<DataClass>\n}",
          "documentation": "`[policy]` \u2014 policy plane binding (\u00a75.5)."
        },
        {
          "name": "::ContextTable",
          "line": 153,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct ContextTable {\n/// Context provider (`lanes` or `static`).\n\npub provider: ContextProvider,\n/// Environment variable holding the provider base URL. Required when\n\n/// `provider = \"lanes\"`; meaningless for `static`.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub base_url_env: Option<String>,\n/// Tenant scope for context requests.\n\npub scope: ContextScope,\n/// Hard cap per packed frame, in tokens. Enforced at pack time.\n\npub frame_budget_tokens: u64,\n/// Answer-vs-model-call routing decision owner.\n\npub route_decision: RouteDecision,\n/// Cache classes the context plane may use.\n\n#[serde(default)]\npub cache_classes: Vec<CacheClass>\n}",
          "documentation": "`[context]` \u2014 context plane binding (\u00a75.6)."
        },
        {
          "name": "::ContextScope",
          "line": 174,
          "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\", deny_unknown_fields)]\npub struct ContextScope {\n/// Platform identifier.\n\npub platform_id: String,\n/// Organization identifier.\n\npub organization_id: String,\n/// Project identifier.\n\npub project_id: String\n}",
          "documentation": "Tenant scope carried on context requests (\u00a75.6)."
        },
        {
          "name": "::PerceptionTable",
          "line": 186,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct PerceptionTable {\n/// Perception provider (`nous` in v0.1).\n\npub provider: PerceptionProvider,\n/// Environment variable holding the provider base URL.\n\npub base_url_env: String,\n/// Ingest modalities; a non-empty subset of the Nous ingest surfaces.\n\npub modalities: Vec<Modality>,\n/// Enrichment mode; `deterministic` only in v0.1 (`ml` is reserved for\n\n/// Ring 2 and rejected).\n\npub enrichment: Enrichment,\n/// Fail-closed signed-IR requirement; must be `true` in v0.1.\n\npub require_signed_ir: bool,\n/// Per-artifact media cap in bytes; finite, and never looser than the\n\n/// provider's own ingest cap (Nous ships 64 MiB).\n\npub max_media_bytes: u64,\n/// Route derived IR/embeddings to the `[memory]` mind via the\n\n/// provider's MIND emission path.\n\npub emit_to_memory: bool,\n/// Source-media retention discipline.\n\npub retention: MediaRetention\n}",
          "documentation": "`[perception]` \u2014 OPTIONAL perception ingress binding (\u00a75.14)."
        },
        {
          "name": "::MemoryTable",
          "line": 211,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct MemoryTable {\n/// Memory provider (e.g. `akasha`).\n\npub provider: String,\n/// Mind URI (e.g. `akasha://minds/one-coder`).\n\npub mind: String,\n/// Active memory types; a subset of the Akasha vocabulary.\n\npub types: Vec<MemoryType>,\n/// Write policy governing the memory plane.\n\npub write_policy: WritePolicy\n}",
          "documentation": "`[memory]` \u2014 memory plane binding (\u00a75.7)."
        },
        {
          "name": "::InferenceTable",
          "line": 225,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct InferenceTable {\n/// Inference provider (e.g. `foundry`).\n\npub provider: String,\n/// Environment variable holding the provider base URL.\n\npub base_url_env: String,\n/// Route policy: `catalog:live` (recommended) or a `model:<id>` pin\n\n/// that fails closed when the route is no longer offered.\n\npub route_policy: String,\n/// IAM permission required to invoke inference (frozen wire vocabulary).\n\npub required_permission: String,\n/// Entitlement consumed by inference calls.\n\npub entitlement: String,\n/// USD budget cap; present and finite.\n\npub budget_usd: f64,\n/// Token budget cap; present and finite.\n\npub budget_tokens: u64,\n/// Behavior on budget exhaustion (default `halt_and_settle`).\n\n#[serde(default)]\npub on_budget_exhausted: OnBudgetExhausted\n}",
          "documentation": "`[inference]` \u2014 inference plane binding (\u00a75.8)."
        },
        {
          "name": "::ToolsTable",
          "line": 249,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct ToolsTable {\n/// Must be present and `true` in v0.1: there is no allow-by-default\n\n/// harness.\n\npub deny_default: bool,\n/// Allowlisted `<interface>/<action>` tool identifiers, resolved against\n\n/// the host's interface/tool registry at validation.\n\n#[serde(default)]\npub allow: Vec<String>,\n/// Tools whose every invocation requires a human (or designated\n\n/// approver-harness) decision through the host's approval surface.\n\n#[serde(default)]\npub approval_required: Vec<String>\n}",
          "documentation": "`[tools]` \u2014 tool policy (\u00a75.9)."
        },
        {
          "name": "::VerificationTable",
          "line": 266,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct VerificationTable {\n/// Binds the L1F-8 honesty policy: evidence refs pass through verbatim\n\n/// or are absent \u2014 never synthesized.\n\npub evidence_required: bool,\n/// Verification gates; must be non-empty for any harness that can\n\n/// mutate state outside its own memory plane.\n\npub gates: Vec<Gate>\n}",
          "documentation": "`[verification]` \u2014 verification gates (\u00a75.10)."
        },
        {
          "name": "::Gate",
          "line": 278,
          "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct Gate {\n/// Gate kind (`command` in v0.1).\n\npub kind: GateKind,\n/// The command to execute; exit code plus captured output ref are the\n\n/// minimum machine-checkable evidence.\n\npub run: String\n}",
          "documentation": "A single verification gate (\u00a75.10)."
        },
        {
          "name": "::EconomicsTable",
          "line": 289,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct EconomicsTable {\n/// Settlement provider (`garden` in v0.1).\n\npub settlement: Settlement,\n/// Meter map; every value must satisfy the Garden v4 two-segment\n\n/// meter-key rule (`<platform>.<meter>`).\n\npub meters: BTreeMap<String, String>,\n/// Idempotency key discipline for replay-safe usage events.\n\npub idempotency: String\n}",
          "documentation": "`[economics]` \u2014 economics plane binding (\u00a75.11)."
        },
        {
          "name": "::TelemetryTable",
          "line": 302,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct TelemetryTable {\n/// Telemetry provider (e.g. `cambium`).\n\npub provider: String,\n/// Stream binding; the stream id is derived server-side.\n\npub stream: TelemetryStream,\n/// Event type prefix; must conform to the Cambium v1 grammar\n\n/// (`ai.cambium.<platform>.<subject...>`) and must not request a\n\n/// privileged prefix.\n\npub event_prefix: String,\n/// Event subjects emitted under the prefix (`<subject...>.<verb>`).\n\npub emit: Vec<String>\n}",
          "documentation": "`[telemetry]` \u2014 telemetry plane binding (\u00a75.12)."
        },
        {
          "name": "::TelemetryStream",
          "line": 318,
          "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct TelemetryStream {\n/// Stream kind (`run` in v0.1).\n\npub kind: StreamKind\n}",
          "documentation": "Telemetry stream binding (\u00a75.12)."
        },
        {
          "name": "::SubstrateTable",
          "line": 329,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct SubstrateTable {\n/// Substrate class.\n\npub class: SubstrateClass,\n/// Isolation class.\n\npub isolation: Isolation\n}",
          "documentation": "`[substrate]` \u2014 execution substrate class (\u00a75.13).\n\nSelects a substrate *class*, never a deployment target; infrastructure\nplatforms (Zaps, Silos, Hives, Beacons, Relays) are not valid values."
        },
        {
          "name": "::LoopTable",
          "line": 339,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct LoopTable {\n/// A registered loop strategy (`react`, `microdag`, `plan_execute`, or\n\n/// one registered with the validation context). Strategies receive\n\n/// plane handles already bound and narrowed; they cannot widen\n\n/// authority.\n\npub strategy: String,\n/// Maximum loop steps.\n\npub max_steps: u64,\n/// Human Interjection Protocol toggle.\n\npub interjection: Interjection\n}",
          "documentation": "`[loop]` \u2014 loop strategy configuration (\u00a75.13)."
        },
        {
          "name": "::SpawnTable",
          "line": 354,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct SpawnTable {\n/// Whether this harness may spawn children.\n\npub allowed: bool,\n/// Narrowing mode; `strict` in v0.1 (child authority \u2286 parent).\n\npub narrowing: Narrowing,\n/// Maximum fraction of the parent's remaining budget any child may\n\n/// receive; enforced by the economics plane, not by strategy code.\n\npub child_budget_fraction_max: f64,\n/// Planes whose bindings children inherit.\n\n#[serde(default)]\npub inherit: Vec<PlaneName>\n}",
          "documentation": "`[spawn]` \u2014 child-harness spawn policy (\u00a75.13)."
        },
        {
          "name": "::VoiceTable",
          "line": 374,
          "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct VoiceTable {\n/// ASR route class, resolved via the `[inference]` live catalog.\n\npub asr_route_class: AsrRouteClass,\n/// TTS route class, resolved via the `[inference]` live catalog.\n\npub tts_route_class: TtsRouteClass,\n/// Acknowledgment track policy.\n\npub ack_policy: AckPolicy,\n/// Barge-in behavior; `interrupt` is the only v0.1 value.\n\npub barge_in: BargeIn,\n/// Spoken-register paraphrase constraint; must be `true` in v0.1.\n\npub constrained_verbalization: bool,\n/// Fraction of TTS utterances round-tripped and semantically diffed;\n\n/// must lie in `[0, 1]`.\n\npub faithfulness_sampling: f64,\n/// Maximum utterance length in seconds; finite.\n\npub max_utterance_seconds: u64,\n/// Voice meter map; values follow the Garden two-segment rule (\u00a75.11).\n\npub meters: BTreeMap<String, String>\n}",
          "documentation": "`[voice]` \u2014 OPTIONAL voice surface binding (\u00a75.15).\n\nVoice is a surface binding, not an authority plane: it binds no\n`act_refs`, appears in no `[tools].allow` entry, and invokes no tool\nother than the host-mediated `ask_brain()`."
        }
      ]
    },
    {
      "path": "forge-rs/harness-spec/src/validate.rs",
      "sha256": "466a41039055a593d337c69a74295556b6317d7ef9e0ae2c85a777446363aa02",
      "artifactSha256": "cb08730c77ef06461a0414cebd1ca40871e54c2e52304a08eeddcfcbe12f6e09",
      "url": "/reference/source/forge-rs/harness-spec/src/validate.rs.txt",
      "declarations": [
        {
          "name": "::DEFAULT_MAX_DERIVATION_DEPTH",
          "line": 21,
          "signature": "pub const DEFAULT_MAX_DERIVATION_DEPTH: u32;",
          "documentation": "Default runtime maximum derivation depth (ANVIL default, \u00a75.3)."
        },
        {
          "name": "::NOUS_INGEST_CAP_BYTES",
          "line": 25,
          "signature": "pub const NOUS_INGEST_CAP_BYTES: u64;",
          "documentation": "Nous provider ingest cap: 64 MiB (\u00a75.14). A manifest may be stricter\nthan the provider's cap; it must never be looser."
        },
        {
          "name": "::BUILTIN_LOOP_STRATEGIES",
          "line": 28,
          "signature": "pub const BUILTIN_LOOP_STRATEGIES: [&str; 3];",
          "documentation": "Loop strategies registered by default in v0.1 (\u00a75.13)."
        },
        {
          "name": "::ToolRegistry",
          "line": 41,
          "signature": "pub trait ToolRegistry: Send + Sync {\n    /// True when `<interface>/<action>` resolves against the host registry.\n    fn contains(&self, tool: &str) -> bool;\n}",
          "documentation": "Host interface/tool registry used to resolve `[tools].allow` entries at\nvalidation time (\u00a75.9).\n\nThe crate ships no registry of its own \u2014 tool resolution is a host\nobligation. When a registry is supplied via\n[`ValidationContext::with_tool_registry`], unresolvable entries reject\nthe manifest; without one, only the identifier shape is checked."
        },
        {
          "name": "::ValidationContext",
          "line": 49,
          "signature": "#[derive(Clone)]\npub struct ValidationContext {\n\n}",
          "documentation": "Validation inputs that are runtime- or host-supplied rather than\nmanifest-supplied."
        },
        {
          "name": "::ValidationContext::new",
          "line": 71,
          "signature": "pub fn new() -> Self;",
          "documentation": "A context with v0.1 defaults (ANVIL depth 16, builtin strategies, no\ntool registry)."
        },
        {
          "name": "::ValidationContext::with_max_derivation_depth",
          "line": 76,
          "signature": "pub fn with_max_derivation_depth(mut self, max: u32) -> Self;",
          "documentation": "Override the runtime maximum derivation depth (\u00a75.3)."
        },
        {
          "name": "::ValidationContext::with_additional_loop_strategies",
          "line": 82,
          "signature": "pub fn with_additional_loop_strategies<I, S>(mut self, strategies: I) -> Self\n    where\n        I: IntoIterator<Item = S>,\n        S: Into<String>,;",
          "documentation": "Register additional loop strategies beyond the v0.1 builtins (\u00a75.13)."
        },
        {
          "name": "::ValidationContext::with_tool_registry",
          "line": 93,
          "signature": "pub fn with_tool_registry(mut self, registry: Arc<dyn ToolRegistry>) -> Self;",
          "documentation": "Supply the host interface/tool registry for \u00a75.9 ref resolution."
        },
        {
          "name": "::ValidationContext::max_derivation_depth",
          "line": 99,
          "signature": "pub fn max_derivation_depth(&self) -> u32;",
          "documentation": "The configured runtime maximum derivation depth."
        },
        {
          "name": "::ValidatedManifest",
          "line": 123,
          "signature": "#[derive(Debug, Clone)]\npub struct ValidatedManifest {\n\n}",
          "documentation": "A manifest that passed \u00a75 structural and semantic validation.\n\nSealing computes the canonical form and BLAKE3 manifest hash once, so\ndownstream consumers (telemetry, settlement, archives) always see the\nsame contract identity (\u00a75.16)."
        },
        {
          "name": "::ValidatedManifest::from_toml",
          "line": 132,
          "signature": "pub fn from_toml(source: &str) -> Result<Self, SpecError>;",
          "documentation": "Parse and validate a TOML manifest with the default\n[`ValidationContext`]."
        },
        {
          "name": "::ValidatedManifest::from_toml_with",
          "line": 138,
          "signature": "pub fn from_toml_with(source: &str, context: &ValidationContext) -> Result<Self, SpecError>;",
          "documentation": "Parse and validate a TOML manifest with an explicit\n[`ValidationContext`]."
        },
        {
          "name": "::ValidatedManifest::manifest",
          "line": 143,
          "signature": "pub fn manifest(&self) -> &Manifest;",
          "documentation": "The validated manifest."
        },
        {
          "name": "::ValidatedManifest::into_manifest",
          "line": 148,
          "signature": "pub fn into_manifest(self) -> Manifest;",
          "documentation": "Consume the seal and return the manifest."
        },
        {
          "name": "::ValidatedManifest::canonical_json",
          "line": 154,
          "signature": "pub fn canonical_json(&self) -> &str;",
          "documentation": "Canonical JSON projection (sorted keys, no whitespace, no env\nresolution) \u2014 the hashed byte form (\u00a75.16)."
        },
        {
          "name": "::ValidatedManifest::manifest_hash",
          "line": 160,
          "signature": "pub fn manifest_hash(&self) -> ManifestHash;",
          "documentation": "BLAKE3 hash of the canonical form; identifies the harness contract\nin telemetry, settlement, and archives (\u00a75.16)."
        }
      ]
    },
    {
      "path": "forge-rs/harness-spec/src/vocab.rs",
      "sha256": "249cf3a4fb944ace365a25d0505454f570dde8182be05c497bdca3e747fc81b9",
      "artifactSha256": "e8684435058352b812397bf0fa59314365f5908854896c7643ced166d47d096a",
      "url": "/reference/source/forge-rs/harness-spec/src/vocab.rs.txt",
      "declarations": [
        {
          "name": "::PolicyEngine",
          "line": 11,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum PolicyEngine {\n    /// Lanes governed information-flow (builtin evaluator or Cedar backend).\n    Lanes,\n    /// Eden Logos capability/risk evaluation.\n    Logos,\n}",
          "documentation": "Policy plane provider (\u00a75.5)."
        },
        {
          "name": "::DataClass",
          "line": 24,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum DataClass {\n    /// Public information.\n    Public,\n    /// Tenant-internal information.\n    TenantInternal,\n    /// Personal data.\n    PersonalData,\n    /// Credentials and secrets.\n    Credentials,\n    /// Payment data.\n    PaymentData,\n    /// Regulated data.\n    Regulated,\n    /// Customer-secret data.\n    CustomerSecret,\n    /// Private source code.\n    SourceCodePrivate,\n    /// Model-prompt-sensitive data.\n    ModelPromptSensitive,\n    /// Legally privileged material.\n    LegalPrivileged,\n}",
          "documentation": "Frozen Cambium v1 data-class vocabulary (\u00a75.5).\n\n`data_classes_allowed` must be a subset of this set; content carrying a\nclass outside the declared subset must not be delivered into the harness."
        },
        {
          "name": "::ContextProvider",
          "line": 50,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ContextProvider {\n    /// Lanes context plane (cache/local/model routing).\n    Lanes,\n    /// A pinned, hashed context bundle for air-gapped runs.\n    #[serde(rename = \"static\")]\n    Static,\n}",
          "documentation": "Context plane provider (\u00a75.6)."
        },
        {
          "name": "::RouteDecision",
          "line": 63,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum RouteDecision {\n    /// Lanes decides answer-vs-model-call routing.\n    Lanes,\n}",
          "documentation": "Context routing decision (\u00a75.6).\n\nv0.1 defines only `lanes`: the context plane decides cache/local/model."
        },
        {
          "name": "::CacheClass",
          "line": 71,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum CacheClass {\n    /// Exact-match cache.\n    Exact,\n    /// Semantic-similarity cache.\n    Semantic,\n    /// Perceptual cache.\n    Perceptual,\n}",
          "documentation": "Inference cache classes (\u00a75.6), mirroring the Foundry cache layers."
        },
        {
          "name": "::PerceptionProvider",
          "line": 83,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum PerceptionProvider {\n    /// Nous perception ingress.\n    Nous,\n}",
          "documentation": "Perception plane provider (\u00a75.14). Only Nous ships in v0.1."
        },
        {
          "name": "::Modality",
          "line": 92,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Modality {\n    /// Text ingest.\n    Text,\n    /// Image ingest.\n    Image,\n    /// Audio ingest.\n    Audio,\n    /// Video ingest.\n    Video,\n    /// OCR ingest.\n    Ocr,\n    /// Sensor ingest.\n    Sensor,\n}",
          "documentation": "Nous ingest modalities (\u00a75.14) \u2014 exactly the ingest surfaces the Nous\nservice ships (`POST /v1/ingest/{text,image,audio,video,ocr,sensor}`)."
        },
        {
          "name": "::Enrichment",
          "line": 114,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Enrichment {\n    /// Deterministic baselines (dHash, STFT, container metadata, OCR\n    /// edge-density, sensor statistics).\n    Deterministic,\n}",
          "documentation": "Perception enrichment mode (\u00a75.14).\n\nOnly `deterministic` ships in v0.1. The reserved value `ml` (Ring 2) is\ndeliberately absent so v0.1 validators reject it instead of silently\ndowngrading."
        },
        {
          "name": "::MediaRetention",
          "line": 123,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum MediaRetention {\n    /// Source bytes evicted from the provider CAS at archive.\n    TaskScoped,\n    /// Source media custody transferred to Lockers.\n    Custodial,\n}",
          "documentation": "Perception source-media retention (\u00a75.14)."
        },
        {
          "name": "::MemoryType",
          "line": 133,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum MemoryType {\n    /// Episodic memory.\n    Episodic,\n    /// Procedural memory.\n    Procedural,\n    /// Resource memory.\n    Resource,\n    /// Knowledge vault.\n    KnowledgeVault,\n}",
          "documentation": "Akasha memory types (\u00a75.7)."
        },
        {
          "name": "::WritePolicy",
          "line": 147,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum WritePolicy {\n    /// Read-only memory plane.\n    None,\n    /// Episodic writes during the run; vault consolidation gated on\n    /// verification.\n    TaskScoped,\n    /// Unrestricted writes (development only; hosts may refuse).\n    Unrestricted,\n}",
          "documentation": "Memory write policy (\u00a75.7)."
        },
        {
          "name": "::OnBudgetExhausted",
          "line": 160,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum OnBudgetExhausted {\n    /// Halt the run and settle usage (default).\n    #[default]\n    HaltAndSettle,\n    /// Surface an approval to extend; extension mints a new budget epoch.\n    RequestApproval,\n}",
          "documentation": "Behavior when an inference budget is exhausted (\u00a75.8)."
        },
        {
          "name": "::GateKind",
          "line": 171,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum GateKind {\n    /// A shell command whose exit code and captured output are the evidence.\n    Command,\n}",
          "documentation": "Verification gate kind (\u00a75.10). v0.1 ships command gates only."
        },
        {
          "name": "::Settlement",
          "line": 179,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Settlement {\n    /// Garden settlement.\n    Garden,\n}",
          "documentation": "Settlement provider (\u00a75.11). Garden is the only v0.1 value."
        },
        {
          "name": "::StreamKind",
          "line": 187,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum StreamKind {\n    /// A run stream; the stream id is derived server-side.\n    Run,\n}",
          "documentation": "Telemetry stream kind (\u00a75.12)."
        },
        {
          "name": "::SubstrateClass",
          "line": 199,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum SubstrateClass {\n    /// Flocks agent workload fabric.\n    Flocks,\n    /// Omega WASM/MicroVM orchestration.\n    Omega,\n    /// Stations.\n    Stations,\n    /// Local process (development).\n    LocalProcess,\n}",
          "documentation": "Execution substrate *class* (\u00a75.13) \u2014 never a deployment target.\n\nInfrastructure substrate platforms (Zaps, Silos, Hives, Beacons, Relays)\nare deliberately absent from this vocabulary: naming one is a\nfail-closed parse rejection."
        },
        {
          "name": "::Isolation",
          "line": 213,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Isolation {\n    /// Process isolation.\n    Process,\n    /// Jail isolation.\n    Jail,\n    /// MicroVM isolation.\n    Microvm,\n}",
          "documentation": "Substrate isolation class (\u00a75.13)."
        },
        {
          "name": "::Narrowing",
          "line": 226,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Narrowing {\n    /// Strict narrowing; child authority \u2286 parent authority.\n    Strict,\n}",
          "documentation": "Spawn narrowing mode (\u00a75.13). Only `strict` exists in v0.1: child\nauthority is a subset of parent authority (no-amplification)."
        },
        {
          "name": "::PlaneName",
          "line": 234,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum PlaneName {\n    /// Policy plane.\n    Policy,\n    /// Context plane.\n    Context,\n    /// Perception plane.\n    Perception,\n    /// Memory plane.\n    Memory,\n    /// Inference plane.\n    Inference,\n    /// Tools plane.\n    Tools,\n    /// Verification plane.\n    Verification,\n    /// Economics plane.\n    Economics,\n    /// Telemetry plane.\n    Telemetry,\n    /// Substrate plane.\n    Substrate,\n}",
          "documentation": "Plane names a child harness may inherit bindings for (\u00a75.13 `[spawn]`)."
        },
        {
          "name": "::Interjection",
          "line": 260,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Interjection {\n    /// Interjection honored.\n    Enabled,\n    /// Interjection disabled.\n    Disabled,\n}",
          "documentation": "Human Interjection Protocol toggle (\u00a75.13 `[loop]`)."
        },
        {
          "name": "::AckPolicy",
          "line": 270,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum AckPolicy {\n    /// Host/client-side canned audio; never touches inference or economics.\n    ClientLocal,\n    /// Server-templated acknowledgment.\n    Scripted,\n    /// A fast catalog route; metered like any inference call.\n    Model,\n}",
          "documentation": "Voice acknowledgment track (\u00a75.15)."
        },
        {
          "name": "::BargeIn",
          "line": 284,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum BargeIn {\n    /// Cancel TTS and brain streams on user speech.\n    Interrupt,\n}",
          "documentation": "Barge-in behavior (\u00a75.15). `interrupt` is the only v0.1 value: user\nspeech during playback must cancel both the TTS stream and the\nin-flight brain stream."
        },
        {
          "name": "::AsrRouteClass",
          "line": 293,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum AsrRouteClass {\n    /// Audio transcription route class.\n    AudioTranscription,\n}",
          "documentation": "ASR route class resolvable through the inference plane's live catalog\n(\u00a75.15). v0.1 ships `audio_transcription`."
        },
        {
          "name": "::TtsRouteClass",
          "line": 302,
          "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum TtsRouteClass {\n    /// Speech synthesis route class.\n    SpeechSynthesis,\n}",
          "documentation": "TTS route class resolvable through the inference plane's live catalog\n(\u00a75.15). v0.1 ships `speech_synthesis`."
        }
      ]
    }
  ]
}
