{"record":{"id":"6707cd648e92af03","repo":"BigPizzaV3/CodexPlusPlus","slug":"dreamskin-sha-256","errorCode":null,"errorMessage":"DreamSkin 主题包 SHA-256 与审核元数据不一致","messagePattern":"DreamSkin 主题包 SHA-256 与审核元数据不一致","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_community.rs","lineNumber":170,"sourceCode":"    }\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(\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)","sourceCodeStart":152,"sourceCodeEnd":188,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_community.rs#L152-L188","documentation":"SHA-256 over the downloaded package (hex, compared case-insensitively) must equal metadata.package_sha256 recorded at review time. Any byte-level difference - transit corruption or a replaced artifact - aborts the install before the zip is opened.","triggerScenarios":"Bit-level corruption on flaky links; the zip replaced on the server after review; a CDN serving different content for the same URL.","commonSituations":"Hotspot or mobile networks corrupting large transfers; gallery re-publishing artifacts without refreshing reviewed metadata.","solutions":["Retry once - transit corruption is the most common cause","Refresh the catalog and retry so metadata matches any re-published artifact","If SHA still mismatches, stop and report the theme - a persistent hash mismatch may mean a tampered or mis-versioned artifact"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"Catch the 'SHA-256 与审核元数据不一致' message and retry install_community_theme once; a second identical failure must terminate with a clear report (artifact drift or tampering), never a retry loop.","preventionTips":["Use stable networks for large (up to 32 MiB) downloads","Report persistent hash mismatches instead of working around them - the check protects you"],"tags":["dreamskin","integrity","sha256","checksum","rust"],"backgroundTag":"checksum-mismatch","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"}