{"record":{"id":"8ab615e6e3f2f725","repo":"BigPizzaV3/CodexPlusPlus","slug":"unsupported-dream-skin-package-image-other","errorCode":null,"errorMessage":"unsupported Dream Skin package image: {other}","messagePattern":"unsupported Dream Skin package image: (.+?)","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_library.rs","lineNumber":337,"sourceCode":"            .context(\"同 ID 本地主题无法确认身份，已拒绝覆盖\")?;\n        if existing.config.id != config.id {\n            bail!(\"同 ID 本地主题身份不一致，已拒绝覆盖\");\n        }\n    }\n    let suffix = unique_suffix();\n    let staging = themes_dir.join(format!(\".stage-{}-{suffix}\", config.id));\n    std::fs::create_dir(&staging).with_context(|| {\n        format!(\n            \"failed to create Dream Skin package staging directory {}\",\n            staging.display()\n        )\n    })?;\n    let staged = (|| -> anyhow::Result<()> {\n        let image_extension = match package.image_name.as_str() {\n            \"background.webp\" => \"webp\",\n            \"background.jpg\" => \"jpg\",\n            \"background.png\" => \"png\",\n            other => bail!(\"unsupported Dream Skin package image: {other}\"),\n        };\n        crate::settings::atomic_write(\n            &staging.join(format!(\"image.{image_extension}\")),\n            &package.image_bytes,\n        )?;\n        crate::settings::atomic_write(\n            &staging.join(THEME_CONFIG_FILE),\n            &serde_json::to_vec_pretty(&config)?,\n        )?;\n        crate::settings::atomic_write(&staging.join(\"theme.css\"), package.css.as_bytes())?;\n        crate::settings::atomic_write(&staging.join(\"manifest.json\"), &package.manifest_bytes)?;\n        if let Some(license) = &package.license_bytes {\n            crate::settings::atomic_write(&staging.join(\"LICENSE.txt\"), license)?;\n        }\n        Ok(())\n    })();\n    if let Err(error) = staged {\n        let _ = remove_known_theme_directory(&staging);","sourceCodeStart":319,"sourceCodeEnd":355,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_library.rs#L319-L355","documentation":"Validation in save_validated_dream_skin_package: the package's image_name is not one of the supported image filenames (e.g. background.webp or other known assets), so Codex++ cannot map it to a handled image type when staging the theme. The unexpected value appears in the message.","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_library.rs:337 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Repack the theme with a supported image filename (background.webp/png)","Update Codex++ if the package uses a newly introduced image format","Reject hand-edited packages with renamed image files"],"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"}