{"record":{"id":"4b5289b39cbb25b1","repo":"vectordotdev/vector","slug":"no-description-provided-for-type-name-all-configurable-types","errorCode":null,"errorMessage":"No description provided for `{type_name}`! All `Configurable` types must define a description, or have one specified at the field-level where the type is being used.","messagePattern":"No description provided for `(.+?)`! All `Configurable` types must define a description, or have one specified at the field-level where the type is being used\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lib/vector-config/src/schema/helpers.rs","lineNumber":62,"sourceCode":"    // overridden title/description, it controls the entire title/description.\n    let (schema_title, schema_description) =\n        if metadata.title().is_some() || metadata.description().is_some() {\n            (metadata.title(), metadata.description())\n        } else {\n            (base_metadata.title(), base_metadata.description())\n        };\n\n    // A description _must_ be present, one way or another, _unless_ one of these two conditions is\n    // met:\n    // - the field is marked transparent\n    // - the type is referenceable and _does_ have a description\n    //\n    // We panic otherwise.\n    let has_referenceable_description =\n        config.referenceable_name().is_some() && base_metadata.description().is_some();\n    let is_transparent = base_metadata.transparent() || metadata.transparent();\n    if schema_description.is_none() && !is_transparent && !has_referenceable_description {\n        panic!(\n            \"No description provided for `{type_name}`! All `Configurable` types must define a description, or have one specified at the field-level where the type is being used.\"\n        );\n    }\n\n    apply_custom_attributes(schema, &metadata, type_name);\n    apply_validations(schema, &metadata);\n    apply_schema_metadata(schema, schema_title, schema_description, &metadata);\n}\n\nfn apply_schema_metadata(\n    schema: &mut SchemaObject,\n    title: Option<&'static str>,\n    description: Option<&'static str>,\n    metadata: &Metadata,\n) {\n    let mut schema_metadata = schema.metadata.take().unwrap_or_default();\n    if title.is_some() || description.is_some() {\n        schema_metadata.title = title.map(str::to_owned);","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/vectordotdev/vector/blob/bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013/lib/vector-config/src/schema/helpers.rs#L44-L80","documentation":"During schema metadata application (`apply_configurable_metadata` in lib/vector-config/src/schema/helpers.rs), every `Configurable` type must end up with a description in its generated JSON Schema. If no description was defined on the type (via `#[configurable(description = ...)]` or a documented derive), none was supplied at the field level where the type is used, the schema itself carries no description, the type is not transparent, and the type is referenceable (so no inherited description applies), Vector panics at schema-generation time.","triggerScenarios":"Deriving `Configurable` on a struct/enum without a `#[configurable(description = \"...\")]` attribute, then using it in a `#[configurable]`-annotated config struct — with no field-level description at the usage site, no type-level metadata description, and the type being referenceable (having a referenceable name) — causes the panic in `apply_configurable_metadata`.","commonSituations":"Adding a new config struct/enum to Vector and forgetting the description attribute; using a shared type in a new place that previously relied on a field-level description; schema docs generation (`make check-generated-docs`) failing on a newly added type.","solutions":["Add `#[configurable(description = \"...\")]` on the type definition","Add a description at the field level where the type is used (`#[configurable(description = \"...\")]` on the field)","Mark the type `#[configurable(transparent)]` if it just wraps another configurable type"],"exampleFix":"// before\n#[derive(Configurable)]\nstruct MyOptions { port: u16 }\n// after\n#[derive(Configurable)]\n#[configurable(description = \"Options for my component.\")]\nstruct MyOptions { port: u16 }","handlingStrategy":"validation","validationCode":"// Check every Configurable type has a description before building docs:\nfn has_description(attrs: &[&str]) -> bool {\n    attrs.iter().any(|a| a.contains(\"configurable(description\"))\n}\n// CI check: fail if any derive(Configurable) type lacks a description attribute\n// and is not marked transparent.","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always add `#[configurable(description = \"...\")]` when creating a new Configurable type","Run `make check-generated-docs` locally before pushing","Mark pure wrapper types as `#[configurable(transparent)]` so they inherit descriptions","Add field-level descriptions when reusing a type in a new context"],"tags":["rust","json-schema","documentation","proc-macro"],"backgroundTag":"missing-required-config-field","analyzedSha":"bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013","analyzedAt":"2026-09-16T02:53:35.741Z","contentChangedAt":"2026-09-16T02:53:35.741Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}