{"record":{"id":"2194a9c2b10842b7","repo":"BigPizzaV3/CodexPlusPlus","slug":"theme-css-skin-api-part","errorCode":null,"errorMessage":"theme.css 使用了未注册的 Skin API part 或状态","messagePattern":"theme\\.css 使用了未注册的 Skin API part 或状态","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_package.rs","lineNumber":337,"sourceCode":"            })\n        {\n            bail!(\"theme.css 选择器或规则语法无效\");\n        }\n        let close = open\n            + 1\n            + rest[open + 1..]\n                .find('}')\n                .context(\"theme.css 规则缺少结束括号\")?;\n        let Some(after_prefix) = selector.strip_prefix(\"[data-ds-part=\\\"\") else {\n            bail!(\"theme.css 只能选择 Skin API 注册的 data-ds-part\");\n        };\n        let (part, suffix) = after_prefix\n            .split_once(\"\\\"]\")\n            .context(\"theme.css data-ds-part 语法无效\")?;\n        if !allowed_parts.contains(&part)\n            || (!suffix.is_empty() && suffix != \":hover\" && suffix != \":focus-visible\")\n        {\n            bail!(\"theme.css 使用了未注册的 Skin API part 或状态\");\n        }\n\n        let mut rule_declarations = Vec::new();\n        let mut seen = HashSet::new();\n        for declaration in rest[open + 1..close]\n            .split(';')\n            .map(str::trim)\n            .filter(|value| !value.is_empty())\n        {\n            let (property, value) = declaration\n                .split_once(':')\n                .context(\"theme.css 声明语法无效\")?;\n            let property = property.trim();\n            let value = value.trim();\n            if !property\n                .bytes()\n                .enumerate()\n                .all(|(index, byte)| byte.is_ascii_lowercase() || (index > 0 && byte == b'-'))","sourceCodeStart":319,"sourceCodeEnd":355,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_package.rs#L319-L355","documentation":"Registry guard in parse_safe_css: the part extracted from a [data-ds-part=\"…\"] selector is not in allowed_parts, or the suffix uses a state/pseudo not registered. Selectors must reference parts and states the Skin API actually exposes.","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_package.rs:337 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use only part names from the Skin API's registered list","Remove unsupported state suffixes or pseudo-classes"],"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"}