mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-11-03 10:37:48 +09:00
## Summary Allow all targeted style-deletion paths to remove an invalid state selector that already exists, including Builder UI deletion of local and token declarations and CLI/MCP design-token remediation. Creation and update validation remain strict. ## Root cause The style audit reads legacy declarations directly and can report selectors that the current selector validator rejects. Deletion reused the creation/update validator, so the system could identify an invalid stored declaration but could not represent its coordinates for targeted removal. The first fix addressed only design-token deletion, leaving Builder UI and the generic style APIs inconsistent. ## Implementation - [x] Give style deletions a shared deletion-only state-selector contract. - [x] Accept an invalid selector only when the exact target, breakpoint, property, and state already exist. - [x] Reject arbitrary invalid selectors that do not identify an existing declaration. - [x] Reuse one matcher for local, selected/token, and design-token deletions. - [x] Keep creation and update selector validation strict. - [x] Add Builder UI regression coverage for token and local declaration deletion. - [x] Add an audit regression that deletes the reported design-token selector, applies the patch, and confirms the warning is cleared. - [x] Regenerate the public runtime operation contract. - [x] Complete the DRY review: deletion matching, validation, key deduplication, and stored-style scanning are centralized. - [x] Review documentation impact: no authored documentation changes are required; generated operation contracts describe the behavior. - [x] Review fixture impact: no fixture inputs or generated fixture bundles are affected. - [x] Run relevant tests, typechecks, lint, formatting, package-boundary, generated-API, and generated-documentation checks. - [ ] Agent evaluations — not run because repository policy requires separate explicit approval. ## Verification - The two Builder UI regression tests failed with `Operation input is invalid` before the shared fix and passed afterward. - Project-build suite: 82 files, 2,097 tests passed. - CLI suite: 60 files, 968 tests passed. - Builder style-data target: 7 tests passed. - Audit and styles targets: 195 tests passed. - Project-build, Builder, and CLI typechecks passed. - Full repository lint passed. - Package-boundary, generated-API, and generated-documentation checks passed. - Formatting and `git diff --check` passed. Closes #6062