improve(ui): remove the Roundness appearance setting#102641
Conversation
Corner radius is owned by themes; drop the browser-local multiplier that scaled all --radius-* variables (added in #49436). Stale borderRadius localStorage keys are ignored and dropped on next settings write.
|
Codex review: needs real behavior proof before merge. Reviewed July 9, 2026, 6:14 AM ET / 10:14 UTC. Summary PR surface: Source -225, Tests -22. Total -247 across 12 files. Reproducibility: not applicable. as a cleanup PR rather than a bug report. Source inspection of current main confirms the old multiplier was only invoked by in-session Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Land this only if maintainers explicitly want radius to be theme-owned and accept dropping stale Do we have a high-confidence way to reproduce the issue? Not applicable as a cleanup PR rather than a bug report. Source inspection of current main confirms the old multiplier was only invoked by in-session Is this the best way to solve the issue? Yes, the implementation is the narrow maintainable removal: it deletes the UI rows, prop threading, normalization/persistence, and orphaned CSS together. The remaining question is product acceptance of removing the shipped preference. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against fc5a4defaf62. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source -225, Tests -22. Total -247 across 12 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
Corner radius is owned by themes; drop the browser-local multiplier that scaled all --radius-* variables (added in openclaw#49436). Stale borderRadius localStorage keys are ignored and dropped on next settings write.
Related: #49436
What Problem This Solves
The Control UI exposed a browser-local "Roundness" appearance setting (segmented rows in Quick Settings and the Appearance page) that scaled every
--radius-*CSS variable through a global multiplier. Corner radius is a theme design decision (Claw/Knot/Dash and imported custom themes); a global user knob distorts theme intent. The multiplier also only took effect after changing an appearance setting in-session — it was never applied at startup — so a saved non-default roundness silently reverted on every page load anyway.Why This Change Was Made
Removes the knob end-to-end so corner radius is always theme-owned: the Roundness rows in Quick Settings and the Appearance page, the
borderRadiusfield/normalization/persistence in UI settings,applyBorderRadius()and itsBASE_RADIIscaling table, the prop threading through the config views, the orphaned.settings-roundnessstyles, and the raw-copy i18n baseline entries for the removed labels. The--radius-*variables stay as static theme values inui/src/styles/base.css. StaleborderRadiuslocalStorage keys are ignored and dropped on the next settings write; no compat shim for browser-local state that was never applied at boot.User Impact
The Roundness rows disappear from Quick Settings and the Appearance settings page. Every theme renders with its standard corner radii, matching what users already saw on each fresh page load. The Text size (accessibility) setting is untouched.
Evidence
pnpm tsgo:coreandpnpm tsgo:test:ui: cleannode scripts/run-vitest.mjson the six touched test files: 214 tests passed (187 node/jsdom + 27 browser)pnpm ui:i18n:check: green afternode --import tsx scripts/control-ui-i18n.ts sync --write; baseline diff is removal-only (56 lines for the dropped raw strings)oxfmt --checkandscripts/run-oxlint.mjson touched files: cleanRelease-note context: Control UI/appearance: remove the Roundness setting; corner radius is now owned by themes.