{"record":{"id":"34a88cc7323e6e2f","repo":"BigPizzaV3/CodexPlusPlus","slug":"dreamskin-34a88c","errorCode":null,"errorMessage":"DreamSkin 主题包身份与审核元数据不一致","messagePattern":"DreamSkin 主题包身份与审核元数据不一致","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_community.rs","lineNumber":179,"sourceCode":"        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(\n        &package,\n        if cfg!(windows) { \"windows\" } else { \"macos\" },\n    )?;\n    if validated.manifest.theme_id != metadata.theme_id\n        || validated.manifest.version != metadata.version\n    {\n        bail!(\"DreamSkin 主题包身份与审核元数据不一致\");\n    }\n    crate::dream_skin_library::save_validated_dream_skin_package(state_dir, &validated)\n}\n\npub fn import_theme_package(\n    state_dir: &Path,\n    archive_path: &Path,\n) -> anyhow::Result<DreamSkinThemeSummary> {\n    let metadata = std::fs::symlink_metadata(archive_path)\n        .with_context(|| format!(\"无法读取主题包：{}\", archive_path.display()))?;\n    if !metadata.file_type().is_file()\n        || metadata.file_type().is_symlink()\n        || metadata.len() == 0\n        || metadata.len() as usize > PACKAGE_BYTES_LIMIT\n    {\n        bail!(\"主题包必须是 32 MiB 以内的普通 ZIP 文件\");\n    }\n    let bytes = std::fs::read(archive_path)","sourceCodeStart":161,"sourceCodeEnd":197,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_community.rs#L161-L197","documentation":"After the package passes zip validation, its manifest's theme_id and version must equal the reviewed metadata's theme_id and version. The bytes are intact but belong to a different theme or version than the metadata describes - a gallery-side consistency error.","triggerScenarios":"The download URL for one version serving another version's zip; crossed metadata rows after a re-publish; an author reusing a download path across themes.","commonSituations":"Server or CDN routing misconfiguration; gallery mid-migration data; reused version ids.","solutions":["Refresh the catalog and retry - transient metadata or CDN skew usually resolves","A persistent mismatch is a gallery data bug: report the theme id and version","Do not manually import the downloaded zip; its provenance is broken"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"Catch '主题包身份与审核元数据不一致', refresh the catalog, retry once; on repeat, surface it as a gallery-side inconsistency for the theme maintainer and stop.","preventionTips":["Install only from freshly fetched catalog entries","Report identity mismatches - they indicate gallery data problems, not client misuse"],"tags":["dreamskin","integrity","metadata-mismatch","rust"],"backgroundTag":"metadata-mismatch","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"}