{"record":{"id":"1e09a7143e39feb4","repo":"BigPizzaV3/CodexPlusPlus","slug":"error-1e09a7","errorCode":null,"errorMessage":"不支持的主题市场清单版本","messagePattern":"不支持的主题市场清单版本","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_market.rs","lineNumber":187,"sourceCode":"            .join(\"dream-skin/themes\")\n            .join(&theme.id)\n            .join(\"theme.json\");\n        theme.installed = local_theme.is_file();\n        theme.installed_version = if theme.installed {\n            records.themes.get(&theme.id).cloned().unwrap_or_default()\n        } else {\n            String::new()\n        };\n        theme.update_available = theme.installed\n            && !theme.installed_version.is_empty()\n            && theme.installed_version != theme.version;\n    }\n    manifest\n}\n\nfn validate_manifest(manifest: &mut DreamSkinMarketManifest) -> anyhow::Result<()> {\n    if manifest.schema_version != 1 {\n        bail!(\"不支持的主题市场清单版本\");\n    }\n    if manifest.themes.len() > MARKET_THEME_COUNT_LIMIT {\n        bail!(\"主题市场清单超过 {} 项限制\", MARKET_THEME_COUNT_LIMIT);\n    }\n    let mut ids = HashSet::new();\n    for theme in &mut manifest.themes {\n        validate_market_theme(theme)?;\n        if !ids.insert(theme.id.clone()) {\n            bail!(\"主题市场清单包含重复 ID：{}\", theme.id);\n        }\n        theme.preview_url = market_asset_url(DEFAULT_MARKET_RAW_BASE_URL, &theme.preview)?;\n    }\n    Ok(())\n}\n\nfn validate_market_theme(theme: &DreamSkinMarketTheme) -> anyhow::Result<()> {\n    if !valid_theme_id(&theme.id) {\n        bail!(\"主题市场包含无效 ID：{}\", theme.id);","sourceCodeStart":169,"sourceCodeEnd":205,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_market.rs#L169-L205","documentation":"Validation guard in validate_manifest: the fetched or cached market manifest declares a schema_version other than 1. The client only understands manifest schema v1, so a manifest from a newer market or a corrupt cache is rejected before any theme data is read.","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_market.rs:187 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Delete the market cache file so a fresh manifest is fetched","Upgrade CodexPlusPlus to a client supporting the manifest's schema version"],"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-14T00:17:10.932Z"}