fix: UI/UX accessibility and async state guard improvements#13
Merged
yappologistic merged 3 commits intomainfrom Mar 26, 2026
Merged
fix: UI/UX accessibility and async state guard improvements#13yappologistic merged 3 commits intomainfrom
yappologistic merged 3 commits intomainfrom
Conversation
- Fix wrong aria-labels in OpenInPicker ("Subscription actions" → "Open in editor", "Copy options" → "More editor options")
- Disable export dialog controls (format toggles, download button) during save-to-workspace
- Disable share dialog copy/open buttons during revoke operation
- Make terminal split button actually disabled (was CSS-only faux-disabled)
- Add focus-visible reveal to terminal close button (was invisible to keyboard)
- Add role="separator" with aria-label to terminal resize handle
- Add aria-expanded to disclosure buttons (PlanSidebar, ProposedPlanCard, ChangedFilesTree)
- Add role="tree" and empty state to ChangedFilesTree
- Add aria-label to MessageCopyButton icon-only button
- Add aria-labels to PermissionPoliciesSection move/delete buttons
- Add aria-pressed to PermissionPoliciesSection approval kind toggles
- Add role="radiogroup" with role="radio" and aria-checked to ThreadExportDialog format selector
- Update AGENTS.md with UI/UX audit guidelines
Prevents Windows Git (core.autocrlf=true) from showing every file as modified due to LF/CRLF mismatch. Forces LF for all text files across platforms.
The library's getOrCreateWorkerPoolSingleton() fires initialize() without
catching the returned promise. When the React tree unmounts quickly (e.g.
browser-test teardown), terminateWorkerPoolSingleton() resets the pool
state while init is still in flight, causing an unhandled rejection
("WorkerPoolManager: workers failed to initialize").
Add a DiffWorkerPoolInitGuard component that attaches a no-op .catch()
to the pending init promise, preventing the unhandled rejection from
failing the browser test suite.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 Changed
Fixes 13 minor UI/UX issues found during a systematic accessibility and interaction audit across the web app.
Functional UX bugs
disabledinstead of CSS-only faux-disabled (was still clickable and tabbable)Accessibility
role="radiogroup",role="radio", andaria-checkedto format selectoraria-labelto icon-only buttonaria-expandedto proposed plan disclosurearia-expandedto expand/collapse buttonaria-expandedto directory toggles,role="tree", and empty statefocus-visiblereveal to per-terminal close button (was invisible to keyboard users), addedrole="separator"with label to resize handlearia-labelto move up/down/delete icon-only buttons,aria-pressedto approval kind togglesDocs
Why
These issues were found during a systematic UI/UX audit. Each fix improves either keyboard accessibility, screen reader support, or prevents users from triggering conflicting async operations.
Checklist
bun run fmtpassesbun run lintpassesbun run typecheckpassesapps/webtests pass (641/641)packages/contractstests pass (59/59)packages/sharedtests pass (53/53)