{"record":{"id":"a8955186095aceef","repo":"BigPizzaV3/CodexPlusPlus","slug":"dream-skin-theme-name-is-empty","errorCode":null,"errorMessage":"Dream Skin theme name is empty","messagePattern":"Dream Skin theme name is empty","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_library.rs","lineNumber":521,"sourceCode":"    let stored = load_stored_dream_skin_theme(state_dir, id)?;\n    if stored.config.id == DreamSkinThemeConfig::default().id {\n        bail!(\"built-in Dream Skin theme cannot be deleted\");\n    }\n    remove_known_theme_directory(&directory)\n}\n\nfn validate_theme_draft(draft: &DreamSkinThemeDraft) -> anyhow::Result<()> {\n    if draft.builtin {\n        bail!(\"built-in Dream Skin theme is read-only\");\n    }\n    if !valid_theme_id(&draft.config.id) {\n        bail!(\"invalid Dream Skin theme id\");\n    }\n    if draft.config.schema_version != 1 {\n        bail!(\"unsupported Dream Skin theme schema\");\n    }\n    if draft.config.name.trim().is_empty() {\n        bail!(\"Dream Skin theme name is empty\");\n    }\n    if !draft.config.style_preset.is_empty() && !valid_theme_id(&draft.config.style_preset) {\n        bail!(\"invalid Dream Skin style preset\");\n    }\n    if let Some(colors) = &draft.config.colors {\n        for color in [\n            &colors.background,\n            &colors.panel,\n            &colors.panel_alt,\n            &colors.accent,\n            &colors.accent_alt,\n            &colors.secondary,\n            &colors.highlight,\n            &colors.text,\n            &colors.muted,\n            &colors.line,\n        ] {\n            if !valid_css_color(color) {","sourceCodeStart":503,"sourceCodeEnd":539,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_library.rs#L503-L539","documentation":"Validation guard in validate_theme_draft: a theme's display name, after trimming whitespace, must be non-empty. Fires when the draft was created or edited with a blank name (or only spaces), since every theme needs a human-readable label.","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_library.rs:521 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set a non-empty name on the theme config before saving","Trim whitespace and provide a real display name"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f2074595a281bc057525c748175c8eb9805b0673","analyzedAt":"2026-08-23T12:52:24.489Z","contentChangedAt":"2026-08-23T12:52:24.489Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}