feat(desktop): add ARIA live-region & navigation semantics to the console UI#350
Merged
Conversation
…sole Assistive tech could not perceive the console's dynamic surfaces. Add purely-additive ARIA semantics (no behavior/visual change): - StatusPill: role="status" + aria-live="polite" so run-status changes are announced; beacon marked aria-hidden. - EventStream log: role="log" + aria-live="polite" + aria-relevant="additions" + aria-label so streamed telemetry lines are announced. - App nav: aria-label on the nav, aria-current="page" on the active item, nav-dot marked aria-hidden. - ApprovalDrawer: rendered as a labelled <section> (aria-label naming the pending tool) so the approve/reject surface is a named group. #344 covered only visual focus + reduced motion; this adds the AT semantics. Closes #348
代码评审报告: feat(desktop): add ARIA live-region & navigation semantics to the console UI风险等级: 中 级联分析
问题发现模型未返回可结构化的问题发现;已提取可用的决策字段,原始非契约内容未附在评论中。 行级发现
Karpathy 评审
缺失覆盖
|
This was referenced Jun 14, 2026
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.
Linked Issue Or Context
Closes #348
Summary
Assistive technology could not perceive the console's dynamic surfaces. #344 added visual keyboard-focus rings and reduced-motion, but AT semantics were still missing. This PR adds purely-additive ARIA semantics — no behavior, layout, text, or styling changes:
role="status"+aria-live="polite"so run-status transitions (planning → running → completed/failed) are announced; decorative beacon markedaria-hidden.role="log"+aria-live="polite"+aria-relevant="additions"+aria-label="遥测流"so streamed telemetry lines are announced as they append.aria-label="主导航"on the nav,aria-current="page"on the active item, decorative nav-dots markedaria-hidden.<section>(aria-labelnaming the pending tool) so the approve/reject surface is a named group.Impact Scope
Renderer-only, leaf/near-leaf components. No store, IPC, or contract changes.
GitNexus Impact Summary
detect_changes→ exactly the 4 expected symbols touched (App,StatusPill,EventStream,ApprovalDrawer); 1 affected processApp → Submit(step 1,App) — additive attributes only, no behavioral change.impact(upstream)on each = LOW (single parent caller, all flow intoApp).Verification
biome checkon all 4 files — clean.pnpm --filter @frontagent/desktop typecheck— clean.pnpm --filter @frontagent/desktop test— 13 files, 96 tests passing.Design note on the ApprovalDrawer element
The issue suggested
role="group"on the drawer, but biome'sa11y/useSemanticElementsrule (correctly) prefers a native semantic element over aroleon a generic<div>, andaria-labelis unsupported on a bare<span>. So the drawer is a native<section aria-label=…>(semantic, label-supported, no layout impact since.approvalowns all styling, nobiome-ignoreneeded), and the risk badge keeps its visible text (already announced inline) rather than an unsupportedaria-label.Note on tests
apps/desktopfollows an established no-DOM-test architecture (no@testing-library/jsdom installed; logic lives in the store layer, components are not unit-tested). Per the repo-guard issue note, rather than introduce a DOM-testing stack (a much larger, convention-breaking change) for attribute assertions, verification relies on typecheck + biome's a11y ruleset + the contained additive diff. Happy to add a lightweight render assertion if maintainers want to adopt that stack.Checklist
pnpm quality:precommit, or explained why it could not run.pnpm quality:localfor critical skeleton changes — N/A, not a critical skeleton change.🤖 Generated with Claude Code