{"record":{"id":"7806c68df95b777c","repo":"BigPizzaV3/CodexPlusPlus","slug":"error-7806c6","errorCode":null,"errorMessage":"市场主题 {} 包含无效标签","messagePattern":"市场主题 (.+?) 包含无效标签","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_market.rs","lineNumber":225,"sourceCode":"    for (label, value, limit) in [\n        (\"名称\", theme.name.as_str(), 100usize),\n        (\"版本\", theme.version.as_str(), 40usize),\n        (\"作者\", theme.author.as_str(), 100usize),\n        (\"许可证\", theme.license.as_str(), 100usize),\n    ] {\n        if value.trim().is_empty() || value.len() > limit {\n            bail!(\"市场主题 {} 的{}无效\", theme.id, label);\n        }\n    }\n    if theme.description.len() > 500 || theme.tags.len() > 12 {\n        bail!(\"市场主题 {} 的描述或标签数量超过限制\", theme.id);\n    }\n    if theme\n        .tags\n        .iter()\n        .any(|tag| tag.trim().is_empty() || tag.len() > 32)\n    {\n        bail!(\"市场主题 {} 包含无效标签\", theme.id);\n    }\n    let source = reqwest::Url::parse(&theme.source_url)\n        .with_context(|| format!(\"市场主题 {} 的来源地址无效\", theme.id))?;\n    if !matches!(source.scheme(), \"http\" | \"https\") {\n        bail!(\"市场主题 {} 的来源地址协议无效\", theme.id);\n    }\n    for path in [&theme.theme, &theme.image, &theme.preview] {\n        validate_market_path(path)?;\n    }\n    validate_sha256(&theme.theme_sha256)?;\n    validate_sha256(&theme.image_sha256)?;\n    Ok(())\n}\n\nfn market_http_client() -> anyhow::Result<reqwest::Client> {\n    Ok(reqwest::Client::builder()\n        .user_agent(format!(\n            \"CodexPlusPlus-Themes/{}\",","sourceCodeStart":207,"sourceCodeEnd":243,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_market.rs#L207-L243","documentation":"Thrown by validate_market_theme when any entry in theme.tags is blank after trimming or longer than 32 characters. The offending input is one malformed tag inside theme.tags for the theme identified by theme.id; it is a per-tag format guard (install_market_theme_from_base and validate_manifest call this to filter malformed market metadata).","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_market.rs:225 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the theme's tags so each is non-empty and <=32 bytes","Remove the invalid tag from the manifest entry"],"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"}