{"record":{"id":"da6e57e6ccf718d5","repo":"sigoden/aichat","slug":"invalid-prelude-prelude","errorCode":null,"errorMessage":"Invalid prelude '{prelude}","messagePattern":"Invalid prelude '(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/config/mod.rs","lineNumber":1646,"sourceCode":"            None => return Ok(()),\n        };\n\n        let err_msg = || format!(\"Invalid prelude '{prelude}\");\n        match prelude.split_once(':') {\n            Some((\"role\", name)) => {\n                self.use_role(name).with_context(err_msg)?;\n            }\n            Some((\"session\", name)) => {\n                self.use_session(Some(name)).with_context(err_msg)?;\n            }\n            Some((session_name, role_name)) => {\n                self.use_session(Some(session_name)).with_context(err_msg)?;\n                if let Some(true) = self.session.as_ref().map(|v| v.is_empty()) {\n                    self.use_role(role_name).with_context(err_msg)?;\n                }\n            }\n            _ => {\n                bail!(\"{}\", err_msg())\n            }\n        }\n        Ok(())\n    }\n\n    pub fn select_functions(&self, role: &Role) -> Option<Vec<FunctionDeclaration>> {\n        let mut functions = vec![];\n        if self.function_calling {\n            if let Some(use_tools) = role.use_tools() {\n                let mut tool_names: HashSet<String> = Default::default();\n                let declaration_names: HashSet<String> = self\n                    .functions\n                    .declarations()\n                    .iter()\n                    .map(|v| v.name.to_string())\n                    .collect();\n                if use_tools == \"all\" {\n                    tool_names.extend(declaration_names);","sourceCodeStart":1628,"sourceCodeEnd":1664,"githubUrl":"https://github.com/sigoden/aichat/blob/82976d349ad97ac9aae0655ad631dace5e2a6385/src/config/mod.rs#L1628-L1664","documentation":"Thrown by GlobalConfig::apply_prelude() when the configured prelude string (repl_prelude or cmd_prelude) does not match any expected form: it must be `role:<name>`, `session:<name>`, or `<session>:<role>`. Anything else (no colon, or an unknown prefix) produces \"Invalid prelude '<prelude>'\". The same message also wraps failures of use_role/use_session inside the prelude application.","triggerScenarios":"Setting repl_prelude/cmd_prelude in config.yaml to a value without a `:` separator, an unknown prefix (e.g. `model:gpt-4`), or to a role/session name that use_role/use_session reject.","commonSituations":"Typos in config.yaml prelude values; copying an example using a different prefix; referencing a deleted session or role in the prelude.","solutions":["Fix the prelude in config.yaml to one of the supported formats: `role:<name>`, `session:<name>`, or `<session>:<role>`.","Verify the referenced role/session exists (list roles/sessions before setting the prelude).","Remove the prelude entry to start with defaults."],"exampleFix":"// config.yaml — before\nrepl_prelude: my-gpt-session\n// after\nrepl_prelude: \"my-session:my-role\"","handlingStrategy":"validation","validationCode":"fn prelude_ok(p: &str) -> bool { matches!(p.split_once(':'), Some((\"role\", _)) | Some((\"session\", _)) | Some((_, _))) }","typeGuard":null,"tryCatchPattern":"if let Err(e) = config.write().apply_prelude() { eprintln!(\"Prelude skipped: {e}\"); }","preventionTips":["Always use one of role:<name>, session:<name>, or <session>:<role> for prelude values","Quote prelude values in YAML to avoid colon parsing issues","Verify referenced roles/sessions exist before setting prelude"],"tags":["prelude","config-format","yaml"],"backgroundTag":"invalid-config-value","analyzedSha":"82976d349ad97ac9aae0655ad631dace5e2a6385","analyzedAt":"2026-09-09T18:33:06.139Z","contentChangedAt":"2026-09-09T18:33:06.139Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}