{"record":{"id":"eac013713a556512","repo":"hasura/graphql-engine","slug":"plugin-plugin-name-references-unknown-data-conne","errorCode":null,"errorMessage":"Plugin {plugin_name} references unknown data connector {data_connector_name}","messagePattern":"Plugin (.+?) references unknown data connector (.+?)","errorType":"validation","errorClass":"PluginValidationError","httpStatus":null,"severity":"error","filePath":"v3/crates/metadata-resolve/src/stages/plugins/error.rs","lineNumber":7,"sourceCode":"use crate::Qualified;\nuse open_dds::data_connector::DataConnectorName;\nuse open_dds::plugins::LifecyclePluginName;\n\n#[derive(Debug, thiserror::Error)]\npub enum PluginValidationError {\n    #[error(\"Plugin {plugin_name} references unknown data connector {data_connector_name}\")]\n    UnknownDataConnector {\n        plugin_name: Qualified<LifecyclePluginName>,\n        data_connector_name: Qualified<DataConnectorName>,\n    },\n    #[error(\n        \"Data connector {data_connector_name} is referenced by multiple {plugin_type} plugins: {plugin_name_a} and {plugin_name_b}\"\n    )]\n    DuplicatePluginForDataConnector {\n        plugin_type: String,\n        data_connector_name: Qualified<DataConnectorName>,\n        plugin_name_a: Qualified<LifecyclePluginName>,\n        plugin_name_b: Qualified<LifecyclePluginName>,\n    },\n    #[error(\"Plugin {plugin_name} is defined more than once\")]\n    DuplicatePluginName {\n        plugin_name: Qualified<LifecyclePluginName>,\n    },\n}","sourceCodeStart":1,"sourceCodeEnd":25,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/v3/crates/metadata-resolve/src/stages/plugins/error.rs#L1-L25","documentation":"Thrown during validation of lifecycle plugin metadata when a plugin references a data connector by name that is not defined anywhere in the metadata. Every plugin must point at an existing data connector.","triggerScenarios":"Declaring a lifecycle plugin whose data_connector_name does not match any data connector defined in the OpenDD metadata; produced by the plugins metadata stage during resolution.","commonSituations":"Typos in the connector name; renaming or deleting a data connector without updating plugins referencing it; plugin files loaded without the connector's definition file (missing file in the metadata directory).","solutions":["Verify the exact spelling and subgraph qualification of the data connector name in the plugin definition","Ensure the referenced data connector is actually defined in your metadata (check the data_connector files are included/loaded)","If the connector was renamed, update the plugin's data_connector_name to the new name"],"exampleFix":"# before\nplugins:\n  - name: myPlugin\n    data_connector: postgresMain   # typo / undefined\n# after\nplugins:\n  - name: myPlugin\n    data_connector: postgres_main","handlingStrategy":"validation","validationCode":"const names = new Set(dataConnectors.map(c => qualified(c.subgraph, c.name)));\nfor (const p of plugins) {\n  if (!names.has(qualified(p.subgraph, p.data_connector))) {\n    throw new Error(`unknown data connector ${p.data_connector}`);\n  }\n}","typeGuard":"const connectorExists = (name, connectors) => connectors.has(`${name.subgraph}::${name.name}`);","tryCatchPattern":null,"preventionTips":["Validate all cross-references before applying metadata","Use consistent naming and automated renames when connectors change"],"tags":["metadata","plugins","data-connector","open-dds","validation"],"backgroundTag":"unresolved-reference","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}