{"record":{"id":"552cc1ab021b1de4","repo":"EpicGames/lore","slug":"failed-to-create-notification-plugin-plugin-name-e","errorCode":null,"errorMessage":"Failed to create notification plugin '{plugin_name}': {e}","messagePattern":"Failed to create notification plugin '(.+?)': (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lore-server/src/server.rs","lineNumber":1488,"sourceCode":"        plugin_name => {\n            info!(plugin_name = plugin_name, \"Creating notification plugin\");\n\n            // Get the plugin config from the plugins section\n            let plugin_config = plugins\n                .get(plugin_name)\n                .cloned()\n                .unwrap_or_else(|| toml::Value::Table(toml::map::Map::new()));\n\n            let context = NotificationPluginContext {\n                environment: environment.clone(),\n                immutable_store: immutable_store.cloned(),\n            };\n\n            let output = registry\n                .create_notification(plugin_name, &plugin_config, &context)\n                .await\n                .map_err(|e| {\n                    anyhow::anyhow!(\"Failed to create notification plugin '{plugin_name}': {e}\")\n                })?;\n\n            // Spawn background tasks for the receiver tasks from the plugin\n            for task in output.receivers {\n                lore_spawn!(endpoints, async move {\n                    task.await.map_err(|e| {\n                        anyhow::anyhow!(\"Notification plugin receiver background task failed: {e}\")\n                    })\n                });\n            }\n\n            Ok((output.sender, None))\n        }\n    }\n}\n\n#[cfg(target_os = \"linux\")]\nasync fn log_base_address() {","sourceCodeStart":1470,"sourceCodeEnd":1506,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-server/src/server.rs#L1470-L1506","documentation":"The notification mode in [notification] names a notification plugin that the registry must instantiate. If registry.create_notification fails — plugin not registered, invalid plugin config, or a plugin-internal setup error — the failure is wrapped in this message naming the plugin.","triggerScenarios":"notification.mode = \"<plugin_name>\" set to a plugin that isn't compiled in/registered, or whose [plugins.<plugin_name>] TOML config is missing required fields, so create_notification returns Err during async_main startup.","commonSituations":"Enabling notification.mode for a plugin whose cargo feature is off; renaming a plugin but not the config key; malformed webhook/slack plugin config (bad URL, missing token).","solutions":["Verify the plugin name in notification.mode matches a registered notification plugin (see the startup 'Registered plugins - notification: ...' log)","Enable the plugin's cargo feature or register it before async_main","Fix the [plugins.<plugin_name>] section so the plugin's config deserializes successfully"],"exampleFix":"# before\n[notification]\nmode = \"slack\"\n\n# after\n[notification]\nmode = \"slack\"\n[plugins.slack]\nwebhook_url = \"https://hooks.slack.com/services/...\"","handlingStrategy":"validation","validationCode":"if !registry.list_notification_plugins().contains(&plugin_name.to_string()) {\n    return Err(format!(\"notification plugin '{plugin_name}' is not registered\"));\n}","typeGuard":null,"tryCatchPattern":"match registry.create_notification(plugin_name, &plugin_config, &context).await {\n    Ok(output) => output,\n    Err(e) => return Err(anyhow::anyhow!(\"Failed to create notification plugin '{plugin_name}': {e}\"))\n        .context(format!(\"verify [plugins.{plugin_name}] config and that the plugin feature is enabled\")),\n}","preventionTips":["Confirm notification.mode matches a plugin listed in the startup 'Registered plugins' log","Test plugin config deserialization in CI before deploying","Enable the plugin's cargo feature whenever its mode is referenced in config"],"tags":["plugin","notification","configuration"],"backgroundTag":"module-init-failed","analyzedSha":"074eb0b0d1194c997d7cf28b55519e3e197b3e23","analyzedAt":"2026-09-13T09:00:57.509Z","contentChangedAt":"2026-09-13T09:00:57.509Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}