{"record":{"id":"9360aba5f01d999b","repo":"EpicGames/lore","slug":"missing-public-quic-config","errorCode":null,"errorMessage":"Missing Public QUIC config","messagePattern":"Missing Public QUIC config","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lore-server/src/server.rs","lineNumber":2018,"sourceCode":"    // verify_client_certs flag is intentionally false in every shipped\n    // config and is not validated here.\n    if !is_maintenance\n        && let Some(quic_settings) = settings.server.quic.as_ref()\n        && quic_settings.enabled\n    {\n        lore_spawn!(endpoints, {\n            let immutable_store = immutable_store.clone();\n            let mutable_store = mutable_store.clone();\n            let settings = settings.clone();\n            let jwt_verifier = jwt_verifier.clone();\n            let repository_authorizer = repository_authorizer.clone();\n            let user_agent_filter = user_agent_filter.clone();\n            let shutdown_rx = _shutdown_rx.clone();\n\n            let quic_settings = settings\n                .server\n                .quic\n                .ok_or(anyhow!(\"Missing Public QUIC config\"))?;\n            let request_handler_timeout = quic_settings\n                .handler_timeout_seconds\n                .map(Duration::from_secs);\n\n            /// With the 8 streams a connection opens this amounts to 4000 commands being\n            /// processed in parallel per connection.\n            const DEFAULT_STREAM_MESSAGE_LIMIT: usize = 500;\n            let process_limit = quic_settings\n                .stream_message_limit\n                .unwrap_or(DEFAULT_STREAM_MESSAGE_LIMIT);\n            let limits = AdmissionLimits {\n                process_limit,\n                inflight_limit: connection_inflight_limit(&quic_settings, process_limit),\n                handler_timeout: request_handler_timeout,\n                permit_timeout: quic_settings.permit_timeout_ms.map(Duration::from_millis),\n            };\n\n            let local_immutable_store = local_store().unwrap_or_else(|| {","sourceCodeStart":2000,"sourceCodeEnd":2036,"githubUrl":"https://github.com/EpicGames/lore/blob/074eb0b0d1194c997d7cf28b55519e3e197b3e23/lore-server/src/server.rs#L2000-L2036","documentation":"The public QUIC endpoint handler reads `settings.server.quic` and fails with this error when the option is None. The QUIC server cannot bind or configure its handler timeout without this config, so startup of the public QUIC endpoint aborts.","triggerScenarios":"Configuring the server to launch the public QUIC endpoint (the endpoint list includes QUIC) while `server.quic` is absent from the settings, so `ok_or(anyhow!(\"Missing Public QUIC config\"))` fires.","commonSituations":"Enabling a QUIC endpoint in the endpoints list but forgetting the matching `[server.quic]` section; copying a partial config between environments; removing the quic section during a config cleanup while QUIC remains enabled.","solutions":["Add the `[server.quic]` section (including handler_timeout_seconds if desired) to the settings file.","Remove the public QUIC endpoint from the configured endpoints list if QUIC is not wanted.","Diff the config against the version's example/template config to find the missing section."],"exampleFix":"// before\nendpoints = [\"quic\"]  // no [server.quic]\n// after\n[server.quic]\nbind = \"0.0.0.0:4433\"\nhandler_timeout_seconds = 30","handlingStrategy":"validation","validationCode":"// Rust: ensure every enabled endpoint has its config section\nfor ep in &settings.server.endpoints {\n    if ep == \"quic\" && settings.server.quic.is_none() {\n        return Err(anyhow!(\"endpoint 'quic' enabled but [server.quic] is missing\"));\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat endpoint lists and their config sections as pairs; validate them together.","Use strongly-typed endpoint enums so the compiler/config schema flags unconfigured endpoints.","Run a config linter in CI that checks enabled endpoints against provided sections."],"tags":["config","quic","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"}