{"record":{"id":"b0fa689ecb937bd7","repo":"BigPizzaV3/CodexPlusPlus","slug":"error-b0fa68","errorCode":null,"errorMessage":"该主题是旧格式，只支持在线预览或手动下载","messagePattern":"该主题是旧格式，只支持在线预览或手动下载","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"warning","filePath":"crates/codex-plus-core/src/dream_skin_community.rs","lineNumber":154,"sourceCode":") -> anyhow::Result<DreamSkinThemeSummary> {\n    validate_version_id(version_id)?;\n    let client = community_http_client(Duration::from_secs(120))?;\n    let metadata_url = format!(\"{COMMUNITY_API_ORIGIN}/v1/themes/{version_id}\");\n    let metadata_bytes = download_limited(\n        &client,\n        &metadata_url,\n        METADATA_BYTES_LIMIT,\n        \"application/json\",\n    )\n    .await?;\n    let metadata: DreamSkinCommunityTheme =\n        serde_json::from_slice(&metadata_bytes).context(\"DreamSkin 主题元数据不是有效 JSON\")?;\n    validate_community_theme(&metadata)?;\n    if metadata.id != version_id {\n        bail!(\"DreamSkin 主题版本与请求不一致\");\n    }\n    if !metadata.apply_compatible {\n        bail!(\"该主题是旧格式，只支持在线预览或手动下载\");\n    }\n\n    let download_url = format!(\"{COMMUNITY_API_ORIGIN}/v1/themes/{version_id}/download\");\n    let package = download_limited(\n        &client,\n        &download_url,\n        metadata.package_bytes,\n        \"application/zip\",\n    )\n    .await?;\n    if package.len() != metadata.package_bytes {\n        bail!(\"DreamSkin 主题包实际大小与审核元数据不一致\");\n    }\n    let actual_sha = format!(\"{:x}\", Sha256::digest(&package));\n    if !actual_sha.eq_ignore_ascii_case(&metadata.package_sha256) {\n        bail!(\"DreamSkin 主题包 SHA-256 与审核元数据不一致\");\n    }\n    let validated = crate::dream_skin_package::validate_and_read_package(","sourceCodeStart":136,"sourceCodeEnd":172,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_community.rs#L136-L172","documentation":"The theme's reviewed metadata sets apply_compatible = false: it was published in the legacy package layout that this build cannot validate or install. The API still serves preview and manual download, so the error steers users there instead of failing silently.","triggerScenarios":"Installing any theme published before the current package format; the gallery mixes old and new themes and the picker offered a legacy one.","commonSituations":"Gallery contents predating the packaging migration; users following old share links.","solutions":["Pick a theme marked apply-compatible (newer publication) and install that","Use the online preview or manual download for the legacy theme","Ask the theme author to republish in the current package format"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"let installable: Vec<&DreamSkinCommunityTheme> =\n    catalog.items.iter().filter(|t| t.apply_compatible).collect();","typeGuard":"fn is_installable(theme: &DreamSkinCommunityTheme) -> bool {\n    theme.apply_compatible\n}","tryCatchPattern":null,"preventionTips":["Filter catalog items by apply_compatible before rendering install buttons","Show a preview-only badge on legacy themes instead of an install affordance"],"tags":["dreamskin","community-api","legacy-format","rust"],"backgroundTag":"unsupported-format-version","analyzedSha":"f2074595a281bc057525c748175c8eb9805b0673","analyzedAt":"2026-08-23T12:52:24.489Z","contentChangedAt":"2026-08-23T12:52:24.489Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}