{"record":{"id":"cb8b9ba2836685aa","repo":"BigPizzaV3/CodexPlusPlus","slug":"theme-json-art","errorCode":null,"errorMessage":"theme.json.art 包含不支持的字段","messagePattern":"theme\\.json\\.art 包含不支持的字段","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_package.rs","lineNumber":1286,"sourceCode":"        rest = &fraction[digits..];\n    }\n    if rest == \"Z\" {\n        return true;\n    }\n    if rest.len() != 6 || !matches!(rest.as_bytes()[0], b'+' | b'-') || rest.as_bytes()[3] != b':' {\n        return false;\n    }\n    rest[1..3].parse::<u32>().is_ok_and(|hour| hour <= 23)\n        && rest[4..6].parse::<u32>().is_ok_and(|minute| minute <= 59)\n}\n\nfn validate_theme_art(value: &Value) -> anyhow::Result<()> {\n    let object = value.as_object().context(\"theme.json.art 必须是对象\")?;\n    if object\n        .keys()\n        .any(|key| !matches!(key.as_str(), \"focusX\" | \"focusY\" | \"safeArea\" | \"taskMode\"))\n    {\n        bail!(\"theme.json.art 包含不支持的字段\");\n    }\n    for key in [\"focusX\", \"focusY\"] {\n        if object.get(key).is_some_and(|value| {\n            value\n                .as_f64()\n                .is_none_or(|number| !number.is_finite() || !(0.0..=1.0).contains(&number))\n        }) {\n            bail!(\"theme.json.art.{key} 无效\");\n        }\n    }\n    if object.get(\"safeArea\").is_some_and(|value| {\n        value\n            .as_str()\n            .is_none_or(|value| !matches!(value, \"left\" | \"right\" | \"none\"))\n    }) || object.get(\"taskMode\").is_some_and(|value| {\n        value\n            .as_str()\n            .is_none_or(|value| !matches!(value, \"ambient\" | \"full\" | \"off\"))","sourceCodeStart":1268,"sourceCodeEnd":1304,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_package.rs#L1268-L1304","documentation":"Thrown by validate_theme_art when the art object contains any key other than the whitelist focusX/focusY/safeArea/taskMode. This is a strict-schema guard on untrusted theme JSON: the offending input is the key set of theme.json.art; unknown art keys abort validation instead of being silently ignored.","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_package.rs:1286 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["删除 art 中不支持的自定义键"],"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"}