Skip to content

fix: UI/UX accessibility and async state guard improvements#13

Merged
yappologistic merged 3 commits intomainfrom
emdash/better-symbols-unite-1a8
Mar 26, 2026
Merged

fix: UI/UX accessibility and async state guard improvements#13
yappologistic merged 3 commits intomainfrom
emdash/better-symbols-unite-1a8

Conversation

@yappologistic
Copy link
Copy Markdown
Owner

What Changed

Fixes 13 minor UI/UX issues found during a systematic accessibility and interaction audit across the web app.

Functional UX bugs

  • ThreadExportDialog: format toggles and download button now disabled during save-to-workspace (prevents conflicting actions)
  • ThreadShareDialog: copy/open buttons now disabled during revoke (prevents acting on a link being removed)
  • ThreadTerminalDrawer: split-terminal button is now actually disabled instead of CSS-only faux-disabled (was still clickable and tabbable)

Accessibility

  • OpenInPicker: fixed wrong aria-labels ("Subscription actions" ? "Open in editor", "Copy options" ? "More editor options")
  • ThreadExportDialog: added role="radiogroup", role="radio", and aria-checked to format selector
  • MessageCopyButton: added aria-label to icon-only button
  • PlanSidebar: added aria-expanded to proposed plan disclosure
  • ProposedPlanCard: added aria-expanded to expand/collapse button
  • ChangedFilesTree: added aria-expanded to directory toggles, role="tree", and empty state
  • ThreadTerminalDrawer: added focus-visible reveal to per-terminal close button (was invisible to keyboard users), added role="separator" with label to resize handle
  • PermissionPoliciesSection: added aria-label to move up/down/delete icon-only buttons, aria-pressed to approval kind toggles

Docs

  • Updated AGENTS.md with 4 new durable guidelines from the audit

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

  • This PR is small and focused
  • bun run fmt passes
  • bun run lint passes
  • bun run typecheck passes
  • apps/web tests pass (641/641)
  • packages/contracts tests pass (59/59)
  • packages/shared tests pass (53/53)

- 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
@github-actions github-actions Bot added size:M vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Mar 26, 2026
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.
@github-actions github-actions Bot added size:L and removed size:M labels Mar 26, 2026
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.
@yappologistic yappologistic merged commit eefa774 into main Mar 26, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant