Repository navigation
fix(composer): Access menu's allowed rules sit on the mode rows' columns, and only their × lights - #27579
Conversation
…mns, and only their x lights The permission menu's "Granted access" rules are a fieldset, and the fieldset's own padding (0.35em 0.75em) put the heading 6px and each rule 4px left of the modes' text, with the remove x 21px inside the modes' number and check column. The rule row also took a hover wash around its small x. Clear the fieldset padding, start the heading and rules on the modes' text column (with or without the shield column), center the x on the trailing column, and drop the row wash: the x keeps its own pill. Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es are all there Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a |
|
Owned by an agent session · session |
|
Owned by an agent session · session |
|
Found 6 test failures on Blacksmith runners: Failures
|
The rule row's 2px block padding was off the design-token scale. The pane is border-box and the row has a 28px min-height, so dropping it keeps the row's height and centering; the old 2px 8px 2px 10px entry leaves the baseline. Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…enus keep the columns The 24px lead was physical left padding. In a right-to-left menu the grid's columns reverse but that padding stayed on the left, so the heading and rules missed the modes' text column by 24px and the remove x sat off their trailing column. padding-inline-start follows the direction; the test now also measures a right-to-left menu from its inline start. Agent-Session: https://cmux.com/deeplink/agent?id=aid-fb75b7af9902231028aa Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Shipped in:
|
…Session Info (carry #28580) (#28617) * cmux NEXT: the mode menu lists only the modes; grants are revoked in Session Info Leo, 2026-10-29: "What the hell is this? Why the fuck is this? Grant access, trust this. What is this bottom fucking bullshit? ... It's not fucking good." The composer's permission-mode menu drew a "Granted access" section under the modes (a "Trusted <folder>" row and an "Allow for this chat" row, each with an x), added in #20339. The menu now lists the modes alone. The two grants move to Session Info's Environment section as rows with Revoke, through the same callbacks (folder trust undo, chat.permission_chat.revoke). Chats that offer no modes no longer draw a lock-only Access chip for a grant. Removes access-grants-columns.test.ts (#27579), which measured only the section's columns, and the LockIcon left without a caller. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f2206f5448805d85f14b * cmux NEXT: Environment gallery shows grants with Revoke; drop stale grant comments Adds the Environment gallery's granted variant (folder trust and a chat allowance, each with Revoke), updates three comments that still placed grants in the mode menu, and removes the now-unused permission.grants string. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-f2206f5448805d85f14b * cmux NEXT: grants stay revocable from the chat menu; Session Info's Revoke shows on its row's hover Review of #28617 at 617a991 (P1): with default settings Session Info is off (Debug Settings `agent.inspector`), and once trust is decided the trust bar is gone, so a trusted folder had no visible way back. The chat menu (…), in every chat, now ends its tools rows with Revoke Granted Access when the chat has grants: a submenu naming each one (the folder's trust, a chat-wide allowance), whose pick revokes it through the same callbacks. Never the composer's mode menu (Leo, 2026-10-29: "What is this bottom fucking bullshit?"). header/grantsMenu.ts builds the grants once for both places. chat-menu-revoke-access.test.tsx: with Session Info off and a decided trust grant, the chat menu lists the grant and picking it revokes (red with no row, green with it). P2: Session Info's Environment shows a grant's Revoke only while that row is hovered or holds focus, at once with no fade, as the pull request chips' x does (#28533); it stays in the Tab order. Gallery: header-tools `menu-revoke-access`; environment-save `granted-hover`. The design-token baseline shrinks by the access-grants height the first commit removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * test(session info): only the hovered or focused grant row shows its Revoke Pins inspector.css: a grant's Revoke is transparent at rest and lights only on its own row's :hover/:focus-within (456cd87), so a list of grants never repeats a lit Revoke on every row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * style(test): format inspector-grant-revoke-hover.test.ts (vp fmt) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * fix(next): exempt the grant row's plain Revoke from the popup hover-reveal check Revoke is a plain button that revokes on click and opens no popup, so it needs no :has([data-popup-open]) twin; check:popup-hover-reveals was red at 2dc4161. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * test(session info): the grants test calls renderSessionInfo after the rename (#29921) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: cmux-bot[bot] <348531757+cmux-bot[bot]@users.noreply.github.com>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo (2026-10-28, standing order): "I feel like you guys could be doing more audits of the app. Like there's some amount of, like, satisfying and pretty stuff that can happen that we're not quite taking full advantage of." And today: "you can also just look at things and notice things and see how we want to improve things."
Found in a polish audit of the composer's menus on the Linux gallery.
What was wrong
The composer's Access (permission mode) menu lists the chat's allowed rules under the modes ("Granted access": "Trusted cmux-tui", "Allow git grep in cmux for this session"), each with a remove ×.
<fieldset>, and only its top padding was set, so the browser's own fieldset padding (0.35em 0.75em) stayed. The heading started 6.25px left of the modes' text, each rule 4px left of it, and the × centered 21px inside the modes' number and check column. Three text columns and two trailing columns in one menu.What changed (
composerLocation.css, plus one design-token baseline row)8px 0 0), not just its top.:has()on the menu.textand centers its trailing mark ontrail).padding-inline-start, so a right-to-left menu keeps the same columns from its right edge.2px 8px 2px 10pxpadding is gone, and its baselined design-token entry goes with it. The row keeps its 28px min-height (the pane is border-box), so its height and centering do not change.Nothing else moves: the separator, the modes, the menu's width, colours and glass are unchanged. No behavior or default changes.
New
test/access-grants-columns.test.ts(Chromium and WebKit; dark, light, and right-to-left): the heading and every rule start on the modes' text column (measured from the inline start), every × centers on the modes' trailing column, and hovering a rule or its × leaves the row unlit. Red on base (the heading is 6.25px off), green here.Screenshots
Gallery: agent-pane.composer-pickers/access-grants, agent-pane.composer-pickers/permission-menu
Before (base gallery, Linux Chromium, dark): "Granted access" at 218px, its rules at 220px, the modes' text at 224px; the × at 461px against the modes' "2" and check at 482px; hovering a rule washes the whole row. After: all three on 224px, the × on 482px, only the × lights. The gallery advisory run's receipt carries both images, dark and light.
Verification
CMUX_BROWSER_TESTS=1 bun test test/access-grants-columns.test.ts test/access-chip-pending-warning.test.tsxat 80bf789: 17 pass, 0 fail, andcheck:design-tokenspasses (fast checks run 40956122298).vp fmt --checkand the browser-test lane check pass.Risk: low. Styles for one section of one menu.
:has()is already used across the pane's stylesheets and is in the app's WebKit. #27144 (draft, on HOLD) moves this menu to a native popup in the app; the DOM menu stays as its fallback, and this changes none of the lines it touches.🤖 Generated with Claude Code
Agent session: agent session
Summary by cubic
Fixes the composer's Access permission menu so the allowed rules align with the mode rows' columns and only their remove × lights on hover.
The "Granted access" rules were a fieldset whose default padding sat the heading and rules a few pixels off from the modes' text column, with each × misplaced against the trailing number/check column. Hovering a rule also washed the whole row around its small ×, against the rule that a hover highlight covers only the control it belongs to.
:has()).Adds a browser test (Chromium and WebKit; dark, light, and RTL) covering the alignment and hover behavior, which fails on the base styles.
Written for commit 80bf789. Summary will update on new commits.