{"record":{"id":"cb94f24d4cb87ef0","repo":"EpicGames/lore","slug":"missing-composite-local-store-settings","errorCode":null,"errorMessage":"Missing composite local store settings","messagePattern":"Missing composite local store settings","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lore-server/src/server.rs","lineNumber":1410,"sourceCode":"            .set_topology_subscription(topology.clone())\n            .await;\n    }\n\n    Ok(store)\n}\n\nasync fn configure_composite_substore(\n    registry: &PluginRegistry,\n    mode: &str,\n    global_settings: &Settings,\n    settings: &CompositeSubStoreSettings,\n) -> Result<Arc<dyn ImmutableStore>> {\n    match mode {\n        store_mode::LOCAL => {\n            let local_settings = settings\n                .local\n                .as_ref()\n                .ok_or(anyhow!(\"Missing composite local store settings\"))?;\n\n            configure_local_immutable_store(local_settings).await\n        }\n        store_mode::REMOTE => {\n            let remote_settings = settings\n                .remote\n                .as_ref()\n                .ok_or(anyhow!(\"Missing composite remote store settings\"))?;\n\n            configure_remote_immutable_store(remote_settings)\n        }\n        store_mode::COMPOSITE => Err(anyhow!(\n            \"Composite store not supported as a composite substore\"\n        )),\n        store_mode::REPLICATED => {\n            let replicated_settings = settings\n                .replicated\n                .as_ref()","sourceCodeStart":1392,"sourceCodeEnd":1428,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-server/src/server.rs#L1392-L1428","documentation":"configure_composite_substore builds the sub-stores of a composite immutable store. For the store_mode::LOCAL arm it unwraps the optional `local` sub-settings with `.ok_or(anyhow!(\"Missing composite local store settings\"))`; if the composite immutable store declares a local sub-store but the local settings block is absent, startup fails with this error. It is the composite analogue of the plain missing-local error.","triggerScenarios":"Settings use an immutable composite store whose composite config requires a local sub-store (mode \"local\") but `settings.<composite>.local` is None when configure_composite_substore dispatches on LOCAL.","commonSituations":"Writing a composite config that names local/remote sub-stores but omitting the per-sub-store tables; hand-merging configs where the [*.composite.local] section was dropped; schema drift after upgrading lore-server so the local block is nested in the wrong place.","solutions":["Add the missing local sub-store table under the composite settings (e.g. [immutable_store.composite.local]) with its required keys.","Confirm the nesting level: sub-store settings must live under the composite section, not the top-level store section.","If the local tier is not wanted, adjust the composite configuration to only include the sub-stores you configured."],"exampleFix":"// before (settings.toml)\n[immutable_store]\nmode = \"composite\"\n\n[immutable_store.composite]\n# local sub-store declared but not configured\n\n// after (settings.toml)\n[immutable_store]\nmode = \"composite\"\n\n[immutable_store.composite.local]\npath = \"/var/lib/lore/immutable\"","handlingStrategy":"validation","validationCode":"// Rust\nfn validate_composite_local(settings: &Settings) -> Result<(), String> {\n    let composite = &settings.immutable_store.composite;\n    if composite.mode == \"local\" && composite.local.is_none() {\n        return Err(\"composite sub-store 'local' requires local settings\".into());\n    }\n    Ok(())\n}","typeGuard":"fn has_composite_local(s: &Settings) -> bool {\n    s.immutable_store.composite.local.is_some()\n}","tryCatchPattern":null,"preventionTips":["Keep composite sub-store tables nested under the composite section, not at the store root.","Validate the composite config (all listed sub-stores have settings) before deployment.","When removing a sub-store table, update the composite mode/sub-store list in the same change."],"tags":["configuration","composite","immutable-store","startup"],"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"}