{"record":{"id":"bdddb0206d388a39","repo":"BigPizzaV3/CodexPlusPlus","slug":"dream-skin","errorCode":null,"errorMessage":"Dream Skin 主题包为空","messagePattern":"Dream Skin 主题包为空","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_package.rs","lineNumber":840,"sourceCode":"        || name.contains(['\\0', ':'])\n        || name.split('/').any(|part| part == \".\" || part == \"..\")\n        || (!name.starts_with(\"__MACOSX/\")\n            && name.split('/').filter(|part| !part.is_empty()).count() > 2)\n    {\n        bail!(\"主题包文件名不安全：{name}\");\n    }\n    Ok(())\n}\n\nfn normalize_package_entries(\n    entries: Vec<(String, Option<Vec<u8>>)>,\n) -> anyhow::Result<std::collections::BTreeMap<String, Vec<u8>>> {\n    let content_entries = entries\n        .into_iter()\n        .filter_map(|(name, content)| content.map(|content| (name, content)))\n        .collect::<Vec<_>>();\n    if content_entries.is_empty() {\n        bail!(\"Dream Skin 主题包为空\");\n    }\n\n    let root_files = content_entries.iter().any(|(name, _)| !name.contains('/'));\n    let prefix = if root_files {\n        if content_entries.iter().any(|(name, _)| name.contains('/')) {\n            bail!(\"主题包文件必须全部位于根目录或唯一一层主题目录\");\n        }\n        None\n    } else {\n        let prefix = content_entries[0]\n            .0\n            .split_once('/')\n            .map(|(prefix, _)| prefix)\n            .context(\"主题包顶级目录无效\")?;\n        if prefix.is_empty()\n            || content_entries.iter().any(|(name, _)| {\n                name.split_once('/').is_none_or(|(candidate, file)| {\n                    candidate != prefix || file.is_empty() || file.contains('/')","sourceCodeStart":822,"sourceCodeEnd":858,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_package.rs#L822-L858","documentation":"Completeness guard in normalize_package_entries: after filtering out directory placeholders and skipped entries (.DS_Store, __MACOSX), no file has actual content. The archive effectively contains nothing usable.","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_package.rs:840 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Rebuild the package with real content files","Ensure required files (manifest.json, theme.json, theme.css, image) are included with content"],"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"}