BigPizzaV3/CodexPlusPlus · error
theme.css 使用了未注册的 Skin API part 或状态
Error message
theme.css 使用了未注册的 Skin API part 或状态
What it means
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.
Source
Thrown at crates/codex-plus-core/src/dream_skin_package.rs:337
})
{
bail!("theme.css 选择器或规则语法无效");
}
let close = open
+ 1
+ rest[open + 1..]
.find('}')
.context("theme.css 规则缺少结束括号")?;
let Some(after_prefix) = selector.strip_prefix("[data-ds-part=\"") else {
bail!("theme.css 只能选择 Skin API 注册的 data-ds-part");
};
let (part, suffix) = after_prefix
.split_once("\"]")
.context("theme.css data-ds-part 语法无效")?;
if !allowed_parts.contains(&part)
|| (!suffix.is_empty() && suffix != ":hover" && suffix != ":focus-visible")
{
bail!("theme.css 使用了未注册的 Skin API part 或状态");
}
let mut rule_declarations = Vec::new();
let mut seen = HashSet::new();
for declaration in rest[open + 1..close]
.split(';')
.map(str::trim)
.filter(|value| !value.is_empty())
{
let (property, value) = declaration
.split_once(':')
.context("theme.css 声明语法无效")?;
let property = property.trim();
let value = value.trim();
if !property
.bytes()
.enumerate()
.all(|(index, byte)| byte.is_ascii_lowercase() || (index > 0 && byte == b'-'))View on GitHub (pinned to f2074595a2)
Solutions
- Use only part names from the Skin API's registered list
- Remove unsupported state suffixes or pseudo-classes
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at crates/codex-plus-core/src/dream_skin_package.rs:337 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of BigPizzaV3/CodexPlusPlus@f2074595a2 (2026-08-23).
Data as JSON: /api/errors/2194a9c2b10842b7.
Report an issue: GitHub.