{"record":{"id":"d1f4118a987638a0","repo":"BigPizzaV3/CodexPlusPlus","slug":"error-d1f411","errorCode":null,"errorMessage":"不支持的主题市场安装记录版本","messagePattern":"不支持的主题市场安装记录版本","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_market.rs","lineNumber":312,"sourceCode":"        bail!(\"主题市场缓存超过大小限制\");\n    }\n    let mut manifest: DreamSkinMarketManifest =\n        serde_json::from_slice(&std::fs::read(&path)?).context(\"主题市场缓存不是有效 JSON\")?;\n    validate_manifest(&mut manifest)?;\n    Ok(manifest)\n}\n\nfn read_install_records(state_dir: &Path) -> anyhow::Result<MarketInstallRecords> {\n    let path = state_dir.join(MARKET_INSTALLS_FILE);\n    if !path.is_file() {\n        return Ok(MarketInstallRecords {\n            schema_version: market_schema_version(),\n            themes: BTreeMap::new(),\n        });\n    }\n    let records: MarketInstallRecords = serde_json::from_slice(&std::fs::read(path)?)?;\n    if records.schema_version != market_schema_version() {\n        bail!(\"不支持的主题市场安装记录版本\");\n    }\n    Ok(records)\n}\n\nfn record_market_install(state_dir: &Path, id: &str, version: &str) -> anyhow::Result<()> {\n    let mut records = read_install_records(state_dir)?;\n    records.themes.insert(id.to_string(), version.to_string());\n    let bytes = serde_json::to_vec_pretty(&records)?;\n    crate::settings::atomic_write(&state_dir.join(MARKET_INSTALLS_FILE), &bytes)\n}\n\nfn market_download_path(state_dir: &Path, id: &str, extension: &str) -> anyhow::Result<PathBuf> {\n    if !valid_theme_id(id) || !matches!(extension, \"png\" | \"jpg\" | \"gif\" | \"bmp\" | \"webp\") {\n        bail!(\"无效的市场主题下载文件名\");\n    }\n    Ok(state_dir\n        .join(\"dream-skin/market/downloads\")\n        .join(format!(\"{id}.{extension}\")))","sourceCodeStart":294,"sourceCodeEnd":330,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_market.rs#L294-L330","documentation":"Version guard in read_install_records: the market install-records file exists but its schema_version differs from the current market_schema_version(). Old or newer record formats cannot be trusted for version tracking, so loading fails instead of guessing.","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_market.rs:312 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Delete the install-records file; it will be recreated with the current schema","Upgrade CodexPlusPlus if the records were written by a newer version"],"exampleFix":null,"handlingStrategy":"fallback","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"}