Skip to content

fix(frontend): low-severity accessibility fixes (focus, aria, target size) #729

Closed

Description

@cristim

Summary

Low-severity accessibility items from the 2026-10-08 UI review.

Where

Reviewed commit b50ca38. UX-36 verified live (axe); the others are source-level.

  • UX-27: Escape in the RI-exchange filter popover drops focus to the body (the History popover handles it correctly). frontend/src/riexchange.ts:1268-1271; correct reference frontend/src/lib/history-filter-popover.ts:116-121. Related: refactor(frontend): consolidate column-filter popover plumbing into shared lib #18 (consolidation refactor; would fix it incidentally but does not mention the defect).
  • UX-31: chip-select search keeps aria-activedescendant on the trigger and focus is not returned to the trigger after a pick. frontend/src/lib/chip-select.ts:181,199-204,235.
  • UX-34: skeleton loaders are not announced (no aria-busy); the ladder <canvas tabindex=0> is a dead Tab stop. frontend/src/lib/skeleton.ts; frontend/src/ladder-timeline.ts:36. Related: chore(frontend): standardize loading indicators and add slow/empty fallbacks #186 (loading indicator consistency, not announcement).
  • UX-36: axe: #topbar-filters has aria-label on a plain div (needs role="group"); 34 small inline links on Admin General fail target-size. frontend/src/index.html:42.

Failure scenario

Keyboard users lose their place after Escape or a chip pick; screen-reader users get no loading announcement and a Tab stop with no action; the global filter label is ignored by assistive tech.

User impact

Keyboard and screen-reader users on RI exchange, filters, the ladder and Admin General.

Suggested fix

Return focus to the trigger on Escape and after a pick; set aria-busy on skeleton containers; remove tabindex from the canvas (or give it a keyboard action); add role="group" to #topbar-filters; enlarge inline link targets.

Screenshots

In the review fleet archive (/Users/cristi/.claude/agent-comms/review-fleet-20261008/screens/), NOT uploaded: usab-th-filter-enter.png (focus falls to body in a filter header, related), usab-admin-general.png (UX-36). Others: none (source-level).

Severity

Low: WCAG gaps with workarounds; axe rates two of them serious but they are minor structural issues.

Reviewer IDs: UX-27 (usab L2), UX-31 (usab L6), UX-34 (usab L13), UX-36 (usab L15)
Found by the 2026-10-08 review fleet.

Activity

  1. IAmJSD commented on Oct 24, 2026

    @IAmJSD
    Collaborator

    Claiming: working on this

  2. self-assigned this
    on Oct 24, 2026
  3. IAmJSD commented on Oct 26, 2026

    @IAmJSD
    Collaborator

    Closing as fixed on main. #1370 fixed UX-31 (chip-select aria-activedescendant + focus return), UX-34 aria-busy on skeletons and UX-36 role=group on #topbar-filters. It added tests for UX-27, already fixed on main by #1315. The ladder canvas tabindex was removed by #688. Caveat: the UX-36 '34 small inline links on Admin General' item could not be reproduced (Admin General has no elements on main), so it is unverified rather than fixed.

    The fix PRs said Refs, so GitHub did not close this automatically. Checked against main on 2026-10-26 by IAmJSD's agent (IAmJSD is acting owner while the maintainers are away). Reopen if anything here is still wrong.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions