You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chore(webview): remove dead CSS classes from the global stylesheet - #2251
Removes dead CSS classes from webview-ui/src/index.css. 3 lines added, 63 removed, one file.
Headline: most of PR-D1's planned scope was already removed upstream
PR-D1 was planned against a stale tree. The diet validation swarm scanned afec61ad3 (2026-10-07). origin/main is 159c42e15 (2026-10-30) and already contains 1cbc0f4d6"deps(knip): enable production mode and remove dead code (#527)" (2026-10-17, 121 files, -4372 lines) plus 69a7d7df8 and 16425bcf3, which removed 19 of the 20 planned rows.
Every planned row was re-verified on origin/main before cutting. Result: 19 already gone (0 hits), 1 removed here, 1 kept deliberately.
Per-row verification (all counts are git grep -nw <sym> -- . on origin/main)
Row
Planned
Status on origin/main
Evidence
ICodeIndexManager 70L
remove
already removed
0 hits; 1cbc0f4d6 deleted 83L from interfaces/manager.ts
The seats disagree (DEEP: dead, 2 hits both in index.css; MLARGE: dead; GLM: dead but flagged as a documented toolkit pattern). I checked the mechanism DEEP relied on and it does not hold: @vscode/webview-ui-toolkit@1.4.0dist/ contains zero occurrences of dropdown-container (grep -ro | wc -l -> 0), and the dropdown component only emits select-indicator. So the class is not runtime-injected by the toolkit.
It is still kept, because removing a documented toolkit pattern is a visual-risk call that needs a render check, and this PR is declaration-only with zero runtime change by design. Deferred to a NEEDS-TEST unit together with the ui/ wrapper work.
Out of scope (explicitly untouched)
Per the CEO ruling, none of the following are in this PR:
All dead ui/ wrappers (dropdown-menu, select-dropdown, autosize-textarea, radio-group) and their radix deps - seat split unresolved, deferred to a later NEEDS-TEST unit.
The ChatRow placeholder switch(code) - the comment literally says "Do not remove this".
restoreTodoListForTask / parseMarkdownChecklist - LIVE (3 and 32 hits).
The 13 remaining *ToolUse + TOOL_DISPLAY_NAMES rows and the 2 shim spec-consumed interfaces - PR-D2's job.
checkbox / popover / dialog / slider radix exports - LIVE via barrel.
vscrui-checkbox* CSS - LIVE: vscrui Checkbox is imported by 11 prod files and always renders label.vscrui-checkbox + inner svg.
scss and .chromium - not classes. scss is text inside a comment URL (index.css:255); .chromium does not exist in preflight.css (its only occurrences are bugs.chromium.org URLs in comments).
Verification
Check
Command
Result
src typecheck
pnpm --dir src run check-types
pass (clean)
webview typecheck
pnpm --dir webview-ui run check-types
pass (clean)
webview build
pnpm --dir webview-ui run build
pass, exit 0
knip
pnpm knip
identical to baseline: 5 config hints, 0 errors, no new issues
Zero runtime behavior change. No TS/TSX touched, so no import, type, or logic surface moves. The only shipped artifact delta is a smaller stylesheet: 4 dead class names disappear from the bundle, every live selector is preserved and was verified present in the built output.
What:
- Drop the `.border-x` / `.border-y` selectors from the `@layer components`
border-color rule (`.border`, `.border-r`, `.border-l`, `.border-t`,
`.border-b` stay).
- Drop `.animate-smooth-bounce` (the `smooth-bounce` keyframe stays: RooHero
applies it through an inline `animation` style).
- Drop the `.code-block-scrollable` selectors: the two border/transition
rules and the five `::-webkit-scrollbar-*` rules plus their comment block.
`.scrollable` and its `body:hover` / `body:focus-within` variants stay.
- Drop `.custom-markdown > pre` and `.animate-slide-in-right` together with
its now-orphaned `slide-in-right` keyframe.
Why:
- Every removed class has zero references across the tracked tree
(`git grep <class> -- . ':!webview-ui/src/index.css'` returns 0 for each).
No component, test, visual fixture, or dependency emits them. The
`.code-block-scrollable` emitter was deleted upstream when the className was
commented out; the stylesheet rules were left behind.
- `.animate-smooth-bounce` was never applied: RooHero.tsx:24 sets
`animation: "smooth-bounce 1s ease-in-out infinite"` directly, which is why
the keyframe must stay and only the wrapper class goes.
Impact:
- No runtime behavior change. The built stylesheet keeps every live sibling
(verified against `src/webview-ui/build/assets/index.css`: `animate-fade-in`,
`smooth-bounce`, and `scrollable` are all still emitted; the four removed
names are absent).
- 63 lines removed, 3 lines added (the shortened selector terminators).
- Also normalizes this file's line endings to LF to match the committed blob,
which incidentally clears a pre-existing Prettier failure on the file.
Deliberately out of scope (kept): `.dropdown-container`. The seats disagree on
whether it is dead, and it is a documented toolkit dropdown pattern, so it is
deferred to a NEEDS-TEST unit rather than decided here.
Reviewing files that changed from the base of the PR and between 159c42e and e4b0eb0.
Files selected for processing: 1
webview-ui/src/index.css
Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 6 remain after this review.
Recent review details
Additional context used
Path-based instructions: 2
Check React state and effect dependencies, cleanup, accessibility, i18n, and light/dark theme behavior.
CodeRabbit configuration file
Files:
webview-ui/src/index.css
Act as an adversarial second-opinion reviewer.
CodeRabbit configuration file
Files:
webview-ui/src/index.css
📝 Summary
Summary by CodeRabbit
Style
Scrollbar reveal behavior now applies to scrollable areas more broadly, including when the page is hovered or focused; code-block-specific scrollbar behavior has been removed.
Removed several border color rules, code-block background styling, and the slide-in and smooth-bounce animations. These visual effects are no longer available.
The stylesheet updates scrollbar reveal selectors to use .scrollable and removes code-block-specific scrollbar styling. It also removes border-color selectors, animation classes and keyframes, and a Markdown preformatted-block background override.
Scrollbar reveal rules now target .scrollable elements. Code-block-specific reveal conditions and WebKit scrollbar styling are removed.
Border, animation, and Markdown rules webview-ui/src/index.css
The border-color selector drops .border-x and .border-y. The stylesheet removes the animate-smooth-bounce class, the transparent Markdown pre background override, and the slide-in-right animation and class.
Zoo-Code-Org/Zoo-Code#1763: Changes the task header to use .scrollable, the selector used by this PR’s scrollbar reveal rules.
Merge Risk: Minimal · up to e4b0e
No actionable merge-blocking issue is established for this CSS cleanup. It is mergeable subject to normal checks.
Pre-merge checks: 7 · 1
Failed checks: 1 warning
Check name
Status
Explanation
Resolution
Description check
The description gives detailed implementation context and test results, but it omits the required approved GitHub Issue link and does not complete the required pre-submission checklist or template sec…
Add a Related GitHub Issue entry with an approved issue number, complete the Pre-Submission Checklist, and address the required Documentation Updates and Get in Touch sections.
Passed checks: 7 passed
Check name
Status
Explanation
Title check
The title clearly and concisely describes the main change: removing unused CSS classes from the global stylesheet.
Linked Issues check
Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check
Check skipped because no linked issues were found for this pull request.
Regression Evidence
PASS. The diff removes selectors with no live references in either reviewed revision: .border-x, .border-y, .animate-smooth-bounce, .code-block-scrollable, .custom-markdown, and `.animate-sl…
Security Boundaries
PASS. The pull request changes only webview-ui/src/index.css. The diff removes unused CSS selectors, animation declarations, and scrollbar rules. It adds no code that handles secrets or PII, validat…
Persistence Integrity
PASS: The pull request changes only webview-ui/src/index.css. The diff removes CSS selectors, scrollbar rules, a Markdown style, and animation declarations. It adds no persistence operation, write p…
Lifecycle Resource Cleanup
PASS. The reviewed range changes only webview-ui/src/index.css. It removes CSS selectors, keyframes, and scrollbar styling, and narrows the .scrollable selector rules. It adds no listener, watcher…
Full details: Regression Evidence
Explanation
PASS. The diff removes selectors with no live references in either reviewed revision: .border-x, .border-y, .animate-smooth-bounce, .code-block-scrollable, .custom-markdown, and .animate-slide-in-right. CodeBlock uses styled components and does not emit .code-block-scrollable; MarkdownBlock uses StyledMarkdown and does not emit .custom-markdown; RooHero uses the retained smooth-bounce keyframe through an inline animation. The live .scrollable behavior remains, and its existing ChatView coverage remains. No concrete changed behavior or durable visible UI change requires new focused coverage.
Full details: Security Boundaries
Explanation
PASS. The pull request changes only webview-ui/src/index.css. The diff removes unused CSS selectors, animation declarations, and scrollbar rules. It adds no code that handles secrets or PII, validates or executes input, or changes approval or allowlist controls. No changed path matches a security-boundary failure condition.
Full details: Persistence Integrity
Explanation
PASS: The pull request changes only webview-ui/src/index.css. The diff removes CSS selectors, scrollbar rules, a Markdown style, and animation declarations. It adds no persistence operation, write path, default propagation, rollback path, or state consumer. No changed persistence path can trigger the specified failure conditions.
Full details: Lifecycle Resource Cleanup
Explanation
PASS. The reviewed range changes only webview-ui/src/index.css. It removes CSS selectors, keyframes, and scrollbar styling, and narrows the .scrollable selector rules. It adds no listener, watcher, provider, timer, task, disposal, cancellation, or restart path. No changed lifecycle resource cleanup issue exists.
Full details: Description check
Explanation
The description gives detailed implementation context and test results, but it omits the required approved GitHub Issue link and does not complete the required pre-submission checklist or template sections.
Resolution
Add a Related GitHub Issue entry with an approved issue number, complete the Pre-Submission Checklist, and address the required Documentation Updates and Get in Touch sections.
Finishing Touches
🧪 Generate unit tests (beta)
Create a new PR
Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Warning
Some tools did not complete. Review the errors below.
Biome (2.5.15)
webview-ui/src/index.css
File contains syntax errors that prevent linting: Line 22: Tailwind-specific syntax is disabled.; Line 25: Tailwind-specific syntax is disabled.; Line 27: Tailwind-specific syntax is disabled.; Line 214: Tailwind-specific syntax is disabled.
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
Thanks for contributing. This comment tracks the review sequence and the next action.
Current step: Awaiting fresh human maintainer or CODEOWNER approval.
Automated review is complete for the latest commit but does not replace human approval.
Review-state labels are managed by this workflow; do not edit them manually. community-approved is managed the same way — do not add or remove it manually. It signals a fresh community code approval for the current head as an advisory priority only; maintainer review is still required.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Removes dead CSS classes from
webview-ui/src/index.css. 3 lines added, 63 removed, one file.Headline: most of PR-D1's planned scope was already removed upstream
PR-D1 was planned against a stale tree. The diet validation swarm scanned
afec61ad3(2026-10-07).origin/mainis159c42e15(2026-10-30) and already contains1cbc0f4d6"deps(knip): enable production mode and remove dead code (#527)" (2026-10-17, 121 files, -4372 lines) plus69a7d7df8and16425bcf3, which removed 19 of the 20 planned rows.Every planned row was re-verified on
origin/mainbefore cutting. Result: 19 already gone (0 hits), 1 removed here, 1 kept deliberately.Per-row verification (all counts are
git grep -nw <sym> -- .onorigin/main)origin/mainICodeIndexManager70L1cbc0f4d6deleted 83L frominterfaces/manager.tsIndexProgressUpdate8LextractEnvironmentDetailsForMiniMax11L1cbc0f4d6(api/transform/minimax-format.ts)waitForClineInitialization11L1cbc0f4d6CachePoint5L16425bcf3buildNativeToolsArray5L1cbc0f4d6(core/task/build-tools.ts)ClineProviderEvents5L1cbc0f4d6(core/webview/ClineProvider.ts)flushModelProviders4L1cbc0f4d6(api/providers/fetchers/modelEndpointCache.ts)1cbc0f4d6(core/auto-approval/commands.ts)getCurrentLanguage4L1cbc0f4d6(i18n/index.ts)formatGitSuggestion3L1cbc0f4d6(shared/context-mentions.ts)getModeConfig3L69a7d7df8(shared/modes.ts)MessageQueueState1L1cbc0f4d6loadRooConfiguration1L1cbc0f4d6(services/roo-config/index.ts)registerCommandsunused imports 2LPackage/timports remain insrc/activate/registerCommands.tsEditMessage/DeleteMessageWithCheckpointDialog1cbc0f4d6(CheckpointRestoreDialog.tsx)McpServerRestrictionImplb69989b82scanDOMForSearchableSettings1cbc0f4d6(useSettingsSearch.ts).border-x/.border-y.animate-smooth-bounce.code-block-scrollable(7 rules + comment).custom-markdown.animate-slide-in-right+ orphaned keyframe.dropdown-containerWhy
.dropdown-containeris keptThe seats disagree (DEEP: dead, 2 hits both in
index.css; MLARGE: dead; GLM: dead but flagged as a documented toolkit pattern). I checked the mechanism DEEP relied on and it does not hold:@vscode/webview-ui-toolkit@1.4.0dist/contains zero occurrences ofdropdown-container(grep -ro | wc -l-> 0), and the dropdown component only emitsselect-indicator. So the class is not runtime-injected by the toolkit.It is still kept, because removing a documented toolkit pattern is a visual-risk call that needs a render check, and this PR is declaration-only with zero runtime change by design. Deferred to a NEEDS-TEST unit together with the
ui/wrapper work.Out of scope (explicitly untouched)
Per the CEO ruling, none of the following are in this PR:
ui/wrappers (dropdown-menu,select-dropdown,autosize-textarea,radio-group) and their radix deps - seat split unresolved, deferred to a later NEEDS-TEST unit.ChatRowplaceholderswitch(code)- the comment literally says "Do not remove this".restoreTodoListForTask/parseMarkdownChecklist- LIVE (3 and 32 hits).*ToolUse+TOOL_DISPLAY_NAMESrows and the 2 shim spec-consumed interfaces - PR-D2's job.checkbox/popover/dialog/sliderradix exports - LIVE via barrel.vscrui-checkbox*CSS - LIVE:vscruiCheckbox is imported by 11 prod files and always renderslabel.vscrui-checkbox+ innersvg.scssand.chromium- not classes.scssis text inside a comment URL (index.css:255);.chromiumdoes not exist inpreflight.css(its only occurrences arebugs.chromium.orgURLs in comments).Verification
pnpm --dir src run check-typespnpm --dir webview-ui run check-typespnpm --dir webview-ui run buildpnpm knipsrc/webview-ui/build/assets/index.cssanimate-slide-in-right0,animate-smooth-bounce0,custom-markdown0,code-block-scrollable0animate-fade-in1,smooth-bounce1,scrollable10prettier --check webview-ui/src/index.cssnode scripts/stryker-diff.mjs ci --base <origin/main> --head <HEAD>src/eslint-suppressions.json.gitkeepfiles)Targeted suites (webview, the modules whose CSS this touches):
CodeBlock.spec.tsx+MermaidBlock.spec.tsx- 2 files, 10/10 passedChatView.scroll-debug-repro.spec.tsx(exercises.scrollable) - 1 file, 14/14 passedRisk
Zero runtime behavior change. No TS/TSX touched, so no import, type, or logic surface moves. The only shipped artifact delta is a smaller stylesheet: 4 dead class names disappear from the bundle, every live selector is preserved and was verified present in the built output.
No changeset, no CHANGELOG (per
AGENTS.md).