Skip to content

fix(a11y): name Agent Dashboard column regions - #26865

Merged
nwparker merged 1 commit into
mainfrom
nwparker/obvious-kanban-a11y-10-09
Oct 10, 2026
Merged

nwparker merged 1 commit into
mainfrom
nwparker/obvious-kanban-a11y-10-09

Conversation

@nwparker

@nwparker nwparker commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

ELI5

Screen-reader users can find each Agent Dashboard column by its visible name.

What Changed

The in-app board and popout showed “Needs You”, “Working”, “Done”, and optional “Idle”, but their column sections had no accessible names. The shared board now names each section with the same existing translated text shown in its header. Chromium exposes those named sections as regions containing their cards.

Adapted from @matbrgz’s #25564, with Matheus Breguêz’s co-author credit. Added localized and optional-idle regression coverage.

Why

The existing section element already provides the region semantics once named. Reusing its translated heading avoids a separate label catalog or redundant role, and fixes both surfaces in one place. Layout, card actions and keyboard/focus behavior stay unchanged.

Linked Issue

Fixes #25563

Visual Proof

N/A — this adds accessibility metadata with no visual change. Hidden Electron/CDP captured the real drawer and popout components before and after: both went from zero named regions to “Needs You”, “Working”, “Done”, and “Idle”. Chinese captures expose “需要你”, “工作中”, “已完成”, and “空闲”; default captures omit Idle. Each region contains its matching card, and all focusable controls are unchanged. The popout screenshots are pixel-identical; the drawer differs only in an existing status-dot animation phase.

Testing

  • I manually tested these changes locally
  • Automated tests added/updated, or explained why not below

Two regressions fail on baseline and pass with the fix. All 48 dashboard suites / 409 tests pass, including existing search/focus and drawer/popout tests. Renderer typecheck, full-file lint/format, changed-code quality and desktop Vite build pass. Independent review passed 25 overlapping focused tests and found no blocker.

Actual current drawer/Sheet and popout/board/card components were rendered with canonical CSS in a hidden macOS Electron renderer. Fixture snapshot/store inputs and unused IPC/closed terminal preview were substituted; column markup was not. The exact commit also passed the same 3 portable happy-dom component suites / 25 tests on each native host: Windows x64 Node24.18.0 and Linux x64 Node26.8.1, with Vitest5.0.3 and isolated locked dependencies. Those runs made no UI/model calls and establish component portability, not native accessibility-tree or screen-reader behavior. Native screen-reader speech and live SSH snapshots were not tested. This changes no platform paths, host status, workspace handling or wire fields.

AI Disclosure

Review

Independent and final root source reviews clean at be492dc. Exact-commit Windows/Linux portable component checks passed (25 each). Full CI passed all five Node24 unit shards, static/type checks, relay integration, both packaging jobs and the required verify check at the reviewed commit. The ready-event run also passed with explicit reuse of those identical successful required checks; the Headless follow-on passed. This PR is ready for review and remains open.

Agent skill upstream boundary

  • Not applicable, or this change copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.

Notes

Names use the existing localization keys. This changes only how the shared board’s sections are exposed to assistive technology.

Checklist

  • This PR is small and focused
  • I explained what changed and why (ELI5, the user-facing before/after, the mechanism, and why over the alternatives)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)

Reuse each translated column heading as the section accessible name in the
drawer and popout. Cover default regions, card association and translated
optional Idle.

Co-authored-by: Matheus Breguêz <matbrgz@gmail.com>
@nwparker
nwparker marked this pull request as ready for review October 9, 2026 11:58
@coderabbitai

coderabbitai Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 74289ab4-7c8f-4991-9190-551f2b84647e

📥 Commits

Reviewing files that changed from the base of the PR and between 4845ae8 and be492dc.


📒 Files selected for processing (2)
  • src/renderer/src/components/dashboard-popout/AgentKanbanBoard.test.tsx
  • src/renderer/src/components/dashboard-popout/AgentKanbanBoard.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.



📝 Walkthrough

Walkthrough

Kanban columns now use their bucket label as both the section’s accessible name and its visible heading. Tests verify the default column regions, card placement, absence of the Idle region by default, and translated labels when idle agents are shown.


Priority: ➖ Normal

Severity of issue fixed: Medium

Merge Risk: ⚪ Minimal · up to be492

The change addresses the column-naming request, with tests for the default and translated labels. No actionable merge risk is evident.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 2 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check Passed Issue #25563 requires named groups for the Agent Dashboard status columns in the drawer and popout. KanbanColumn renders each shared column as a <section aria-label={label}>, where label uses th…
Out of Scope Changes check Passed The reviewed changes are limited to the shared Agent Dashboard column component and its focused regression tests. The implementation reuses the visible translated heading as the accessible name. The t…
Title check Passed The title clearly and concisely describes the main change: adding accessible names to Agent Dashboard column regions.
Description check Passed The description is complete and relevant. It includes the required explanation, change details, rationale, linked issue, visual-proof justification, testing results, review notes, compatibility consid…


  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR


  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@nwparker
nwparker merged commit e3bca6c into main Oct 10, 2026
54 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Agent dashboard kanban columns have no accessible name

1 participant