{"record":{"id":"27341610378ae00a","repo":"EpicGames/lore","slug":"missing-local-mutable-store-settings","errorCode":null,"errorMessage":"Missing local mutable store settings","messagePattern":"Missing local mutable store settings","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lore-server/src/server.rs","lineNumber":946,"sourceCode":"                .map_err(|e| anyhow!(\"Failed to create immutable store plugin '{mode}': {e}\"))\n        }\n    }\n}\n\nasync fn configure_mutable_store_via_plugin(\n    registry: &PluginRegistry,\n    settings: &Settings,\n    immutable_store: Arc<dyn ImmutableStore>,\n) -> Result<Arc<dyn MutableStore>> {\n    let mode = &settings.mutable_store.mode;\n\n    match mode.as_str() {\n        store_mode::LOCAL => {\n            let local_settings = settings\n                .mutable_store\n                .local\n                .as_ref()\n                .ok_or(anyhow!(\"Missing local mutable store settings\"))?;\n\n            configure_local_mutable_store(local_settings, immutable_store).await\n        }\n        store_mode::REMOTE => {\n            let remote_settings = settings\n                .mutable_store\n                .remote\n                .as_ref()\n                .ok_or(anyhow!(\"Missing remote mutable store settings\"))?;\n\n            configure_remote_mutable_store(remote_settings)\n        }\n        store_mode::REPLICATED => Err(anyhow!(\"replicated mutable store is not implemented\")),\n        store_mode::COMPOSITE => Err(anyhow!(\n            \"Invalid settings, cannot have composite store as mutable store\"\n        )),\n        _ => {\n            // All other modes use the plugin system","sourceCodeStart":928,"sourceCodeEnd":964,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-server/src/server.rs#L928-L964","documentation":"During server startup, configure_mutable_store_via_plugin dispatches on settings.mutable_store.mode. When the mode is \"local\", the optional `mutable_store.local` settings table must be present because it carries the local store's path and options. This error is thrown via `.ok_or(anyhow!(...))` when that table is absent, meaning the config selected a mode but did not supply the matching settings block.","triggerScenarios":"Settings file contains `[mutable_store] mode = \"local\"` but no `[mutable_store.local]` table; the `local` field is None when configure_mutable_store_via_plugin reaches the store_mode::LOCAL arm.","commonSituations":"Hand-edited TOML where the mode was changed to \"local\" but the local block was deleted; a minimal/templated config that only sets the mode; merging config layers where mutable_store.local was lost; copying an immutable-store-only config into the mutable section.","solutions":["Add the missing `[mutable_store.local]` table to your settings TOML with the required keys (e.g. a data path).","Verify by deserializing the settings that mutable_store.mode matches whichever sub-table you provided.","If you do not need a local mutable store, set mutable_store.mode to the intended mode (e.g. \"remote\" with a `[mutable_store.remote]` block) instead."],"exampleFix":"// before (settings.toml)\n[mutable_store]\nmode = \"local\"\n\n// after (settings.toml)\n[mutable_store]\nmode = \"local\"\n\n[mutable_store.local]\npath = \"/var/lib/lore/mutable\"","handlingStrategy":"validation","validationCode":"// Rust, before starting the server\nfn validate_mutable_local(settings: &Settings) -> Result<(), String> {\n    if settings.mutable_store.mode == \"local\" && settings.mutable_store.local.is_none() {\n        return Err(\"mutable_store.mode = \\\"local\\\" requires a [mutable_store.local] table\".into());\n    }\n    Ok(())\n}","typeGuard":"fn has_local_mutable_settings(s: &Settings) -> bool {\n    s.mutable_store.mode != \"local\" || s.mutable_store.local.is_some()\n}","tryCatchPattern":null,"preventionTips":["Keep each mutable_store mode's settings table together with its mode in one config template.","Run a config-validation step (deserialize Settings in CI) before deploying.","Never edit only the mode field without adding/removing the matching sub-table."],"tags":["configuration","rust","startup","mutable-store"],"backgroundTag":"missing-required-config-field","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"}