Scope the open-workspace tint to the chrome's own container - #244
Conversation
The banner's workspace controls are the chrome's own, so the rule that tints the open one belongs in the @scope block rather than at document level, where it widened the shared class vocabulary by a name no widget wears.
|
The nightly leg failed again on run 33738376174 ( Every one of the seven is owned by an open PR, and all six of those PRs are Ownership map for the seven, and the queue's state
Queue state read at the time of writing — every PR green, every one blocked only by the admin-merge ruleset: #241 covers |
Problem
The nightly leg of
cifailed on run 33735071949 (a57ae29) with seven cases. Six are already owned by open PRs:test_a_widgets_label_takes_a_comment_inside_the_control_it_labels,test_a_closed_leaf_clears_itself_off_the_trayandtest_the_leaves_tray_takes_the_keyboardby #236; the ring walk by #239'sship-reviewprecondition standing ahead of #240'slf-shotframefault; and both oftest_page_fixture_renders[pr-walkthrough](the 4px sideways scroll onpr-scale-groups) andtest_nested_command_projections_stop_at_their_own_boundary(§ inner-worker) by #243.The seventh is new with
a57ae29and nobody's yet:#242 wrote the open workspace's tint as
.lf-btn.on, .lf-btn.lf-workspace[aria-expanded="true"]inchrome-style.js, at document level.lf-workspaceis worn by three controls and all three are the chrome's own — the Threads toggle built atleaf.js:817, and All leaves and Asks, whichtrayIsmarks attrays.js:194. Every one of them is insidechromeRoot, the.lf-chromecontainer the private stylesheet is scoped to. So the name reached document level without being shared vocabulary, which is the seam the pinned set exists to catch — the same one #152 answered for the keycap rules.Solution
Move the selector into the
@scope (.lf-chrome)block, beside.lf-banner-more[data-lf-news], which paints the same accent face for the same kind of banner state..lf-btn.onkeeps its document-level rule, unchanged and now on its own:onis worn out in the page and is the reason that line was there before #242.Nothing about the paint moves. Specificity is unchanged, and the one rule that could contend —
.lf-banner-menu > .lf-btn { border-color: transparent }, for a workspace control folded into the overflow menu — is(0,2,0)against this selector's(0,3,0)on both sides of the move, so scope proximity never gets a say. Fixing it at the pinned set instead would have widened the shared vocabulary by a class no widget can wear, which is what the assertion's own message asks you not to do.Testing
On this branch, rebased on
fdba9e1d:uv run pytest tests— 808 passed, 6 skippedtest_a_coined_class_cannot_reach_the_chromes_rulesand both parameters of Clarify banner actions and workspace state #242'stest_workspaces_replace_each_other_and_name_the_open_onepassuv run pytest tests/test_render_conversations.py tests/test_render_controls.py --run-nightly— 141 passed, and the three failures are Fit the Page map list inside its sheet and read six nightly fixtures at the layer's current contracts #236's two tray cases and the ring walk, all reproducing identically onmainNot vacuous: deleting the scoped rule fails the workspace test at both 500 and 1200 with the resting face (
rgb(238, 234, 222)where the active face isrgb(255, 254, 251)under--chip) rather than passing by construction.chrome-style.jsis served rather than bundled, so there is nothing to re-vendor, and no user-visible pixel changes, so there is no before/after shot to hand over.Automated fix for failed run