Skip to content

a11y: ai-chat-panel — streaming AI messages and task status updates have no aria-live region #1192

@claude

Description

@claude

Summary

The AI chat message stream in web/src/components/ai-chat-panel.tsx dynamically appends messages and updates task statuses, but neither region is wrapped in an aria-live container. Screen reader users receive no announcement of new AI responses or task state changes (pending → in_progress → done).

Location

web/src/components/ai-chat-panel.tsx

  • Chat message list: the container that renders AI and user messages
  • TaskListPanel: task status items update dynamically

WCAG Criteria

  • 4.1.3 Status Messages (Level AA): programmatically determinable status messages must be announced without receiving focus
  • 4.1.2 Name, Role, Value (Level AA): dynamic regions must surface role/state to AT

Expected Fix

Wrap the chat messages container with aria-live="polite" and aria-atomic="false":

<div
  aria-live="polite"
  aria-atomic="false"
  aria-relevant="additions text"
  aria-label={t("chatMessagesAriaLabel")}
>
  {messages.map(...)}
</div>

For task status, either add an aria-live="polite" region that announces completions, or add role="status" to the task list area.

Severity

B — Accessibility defect / WCAG violation

🤖 Filed by automated a11y audit (round 1)

Metadata

Metadata

Assignees

No one assigned

    Labels

    a11yAccessibility (WCAG) issuesa11y-auditFiled by automated accessibility auditclaude-fixRun the Claude issue-triage workflow on this issuefrontend

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions