{"record":{"id":"557dfe3d9ab26bdd","repo":"vectordotdev/vector","slug":"transform-output-misconfigured-output-for-port-missing","errorCode":null,"errorMessage":"transform output misconfigured - output for port {:?} missing","messagePattern":"transform output misconfigured - output for port (.+?) missing","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/topology/schema.rs","lineNumber":76,"sourceCode":"            definitions.append(&mut source_definition);\n        }\n\n        // If the input is a transform, the output is merged into the top-level schema\n        if let Some(inputs) = config.transform_inputs(key) {\n            let input_definitions =\n                possible_definitions(inputs, config, enrichment_tables.clone(), cache)?;\n\n            let mut transform_definition = input.with_definitions(\n                config\n                    .transform_output_for_port(\n                        key,\n                        &input.port,\n                        enrichment_tables.clone(),\n                        &input_definitions,\n                    )\n                    .expect(\"transform must exist - already found inputs\")\n                    .unwrap_or_else(|| {\n                        unreachable!(\n                            \"transform output misconfigured - output for port {:?} missing\",\n                            &input.port\n                        )\n                    })\n                    .schema_definitions(config.schema_enabled())\n                    .values()\n                    .cloned(),\n            );\n\n            if contains_never(&transform_definition) {\n                return Err(Error::ContainsNever);\n            }\n\n            definitions.append(&mut transform_definition);\n        }\n    }\n\n    Ok(definitions)","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/vectordotdev/vector/blob/bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013/src/topology/schema.rs#L58-L94","documentation":"Same pattern as the source case: possible_definitions unwraps a transform's output for a port that the lookup already asserted exists; the None branch is unreachable by contract. A panic means the transform registry returned None for a transform that was just found — an inconsistency in component metadata or the build unit graph. It signals a code-level bug rather than user config error.","triggerScenarios":"A transform whose output_for_port returns Ok(None) for an advertised port; custom transform development; mismatched crate versions in an embedded build.","commonSituations":"Writing a custom Vector transform with named outputs; stale incremental build mixing old and new component code.","solutions":["Fix the transform's output_for_port so advertised ports always resolve to Some(output)","cargo clean and rebuild to eliminate stale-artifact inconsistencies","Report the triggering topology as a Vector bug if on stock components"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Validate topology config before schema expansion\nvector validate config.yaml","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Ensure custom transforms return Some(output) for every advertised port","Avoid stale incremental builds: cargo clean after component registry changes","Same crate versions across all Vector library crates"],"tags":["rust","topology","schema","transform","panic"],"backgroundTag":"internal-invariant-violation","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"}