{"record":{"id":"4e73f3804b975925","repo":"EpicGames/lore","slug":"missing-composite-store-settings","errorCode":null,"errorMessage":"Missing composite store settings","messagePattern":"Missing composite store settings","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"lore-server/src/server.rs","lineNumber":896,"sourceCode":") -> Result<Arc<dyn ImmutableStore>> {\n    let mode = &settings.immutable_store.mode;\n\n    match mode.as_str() {\n        store_mode::LOCAL => {\n            let local_settings = settings\n                .immutable_store\n                .local\n                .as_ref()\n                .ok_or(anyhow!(\"Missing local immutable store settings\"))?;\n\n            configure_local_immutable_store(local_settings).await\n        }\n        store_mode::COMPOSITE => {\n            let composite_settings = settings\n                .immutable_store\n                .composite\n                .as_ref()\n                .ok_or(anyhow!(\"Missing composite store settings\"))?;\n\n            configure_composite_store(registry, composite_settings, settings, topology).await\n        }\n        store_mode::REPLICATED => {\n            let replicated_settings = settings\n                .immutable_store\n                .replicated\n                .as_ref()\n                .ok_or(anyhow!(\"Missing replicated store settings\"))?;\n\n            configure_replicated_immutable_store(replicated_settings).await\n        }\n        store_mode::REMOTE => {\n            let remote_settings = settings\n                .immutable_store\n                .remote\n                .as_ref()\n                .ok_or(anyhow!(\"Missing remote immutable store settings\"))?;","sourceCodeStart":878,"sourceCodeEnd":914,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-server/src/server.rs#L878-L914","documentation":"Thrown by configure_immutable_store_via_plugin when mode is \"composite\" but settings.immutable_store.composite is None. Composite stores need the list/description of backing stores in their settings; without it configuration cannot proceed.","triggerScenarios":"immutable_store.mode = \"composite\" in config while settings.immutable_store.composite is None (missing [immutable_store.composite] subsection).","commonSituations":"Switching mode to composite without adding the composite subsection defining the member stores; copy/paste from a local-mode config; key typo after editing.","solutions":["Add an [immutable_store.composite] section describing the backing stores.","Verify the subsection key matches the Settings schema field name.","Select a mode whose settings block is actually present."],"exampleFix":"# before\n[immutable_store]\nmode = \"composite\"\n\n# after\n[immutable_store]\nmode = \"composite\"\n[immutable_store.composite]\nstores = [\"local\", \"remote\"]","handlingStrategy":"validation","validationCode":"if settings.immutable_store.mode == \"composite\" && settings.immutable_store.composite.is_none() {\n    return Err(anyhow!(\"mode=composite requires [immutable_store.composite] settings\"));\n}","typeGuard":"fn composite_store_configured(s: &ImmutableStoreSettings) -> bool {\n    s.mode != \"composite\" || s.composite.is_some()\n}","tryCatchPattern":null,"preventionTips":["Define the composite member-store list whenever switching mode to composite.","Validate mode/subsection pairing at startup.","Avoid hand-editing store modes without updating the matching section."],"tags":["configuration","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"}