{"record":{"id":"47a4ac1f76305f72","repo":"EpicGames/lore","slug":"invalid-settings-cannot-have-composite-store-as-mutable","errorCode":null,"errorMessage":"Invalid settings, cannot have composite store as mutable store","messagePattern":"Invalid settings, cannot have composite store as mutable store","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lore-server/src/server.rs","lineNumber":960,"sourceCode":"            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\n            let plugin_config =\n                resolve_plugin_config_with_fallback(&settings.plugins, mode, \"mutable_store\")\n                    .unwrap_or_else(|| toml::Value::Table(toml::map::Map::new()));\n\n            info!(mode, \"Creating mutable store via plugin system\");\n\n            registry\n                .create_mutable_store(mode, &plugin_config, immutable_store)\n                .map_err(|e| anyhow!(\"Failed to create mutable store plugin '{mode}': {e}\"))\n        }\n    }\n}\n\nfn configure_lock_store_via_plugin(","sourceCodeStart":942,"sourceCodeEnd":978,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-server/src/server.rs#L942-L978","documentation":"A composite store is only meaningful as an immutable store (it combines local and remote sub-stores). configure_mutable_store_via_plugin explicitly rejects mode = \"composite\" for the mutable store with this anyhow error before any store is created. The rejection is unconditional: composite mutable stores are not supported by design.","triggerScenarios":"Settings contain `[mutable_store] mode = \"composite\"`, hitting the store_mode::COMPOSITE arm which always returns Err.","commonSituations":"Duplicating the `[immutable_store]` block as `[mutable_store]` during setup; confusing composite (immutable-only) with replicated semantics; scripting config generation from the immutable-store template.","solutions":["Set mutable_store.mode to \"local\", \"remote\", or a plugin mode; keep \"composite\" only under [immutable_store].","If you need tiered mutable behavior, configure a mutable-store plugin that offers the layering instead.","Audit generated/templated configs so immutable-store values are never copied into the mutable section."],"exampleFix":"// before (settings.toml)\n[mutable_store]\nmode = \"composite\"\n\n// after (settings.toml)\n[mutable_store]\nmode = \"remote\"\n\n[mutable_store.remote]\nurl = \"https://storage.example.com\"","handlingStrategy":"validation","validationCode":"// Rust\nfn validate_mutable_mode(settings: &Settings) -> Result<(), String> {\n    if settings.mutable_store.mode == \"composite\" {\n        return Err(\"composite is only valid for immutable_store\".into());\n    }\n    Ok(())\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Remember: composite = immutable-only; mutable supports local/remote/plugin modes.","Generate mutable_store config from its own template, never from the immutable one.","Add a startup config lint that rejects composite under mutable_store."],"tags":["configuration","unsupported","composite","mutable-store"],"backgroundTag":"unsupported-config-value","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"}