Repository navigation
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs changes before merge. What this changesThis PR adds keyboard navigation and spoken message names, timestamps, and tool-call positions to native chat. Example: NVDA reads two successful powershell calls with inputs dir and pwd.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness⛔ Needs changes before merge - 4 items remain This PR addresses a confirmed accessibility bug that remains on main, but three message-reading defects need correction before merge. Priority: P1 Before merge
Findings
Provenance
Tests
Agent review detailsHow this fits togetherThe native chat timeline projects conversation entries into Reactor controls; message containers and tool expanders expose their text and focus behavior through Windows UI Automation. flowchart LR
A[Conversation entries] --> B[Timeline projection]
B --> C[Message containers]
B --> D[Tool activity renderer]
C --> E[Windows UI Automation]
D --> E
E --> F[NVDA speech]
Technical reviewBest possible solution: Repair message accessibility in the existing timeline and tool owners while preserving code literals, sender identity, expanded-work narration, virtualization, and message actions. Do we have a high-confidence way to reproduce the issue? Current-main source confirms the reporter's unnamed, unfocusable message containers and indistinguishable repeated tool names; this review performed no live reproduction. Is this the best way to solve the issue? The existing owners are appropriate and no new subsystem is needed, but the message-name projection must preserve literal code and cover both top-level and expanded-work messages. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 9d36f5c8bfa0. Provenance checked
TestingProof path: shipped entry point. SecurityNone. EvidenceAcceptance criteria:
What I checked:
Likely related people:
Preflight sourceSource unknown. Source comparison at the observed PR snapshot only. Completion is self-reported; body, policy, tests, execution, and report bytes are not verified. Root-cause clusterRelationship: Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment HistoryReview history (1 earlier review cycle)
Reviewed November 10, 2026, 11:40 AM ET / 16:40 UTC (Revision 2). |
…position Transcript rows were unnamed, unfocusable and announced raw markdown, so NVDA read the whole history as one group and Up/Down did nothing. Name each ItemContainer from the visible message text and time, keep markdown literals in the name, make containers tab stops with Up/Down navigation, and add a localized position and input summary to repeated nested tool calls.
3aa6017 to
faa5aa5
Compare
|
Rebuilt this fix on top of Current head @clawsweeper re-review |
|
🦞👀 Re-review progress:
|
PR cleanup reviewReviewed head: Source cleanup review at faa5aa5 against main e59374c found three remaining gaps: (1) ReactorChatTimeline.cs:925-935 strips code delimiters before Markdown rewriting, so literal init and x content is altered in the accessible name; (2) lines 857-864 omit the user speaker label; (3) the Worked commentary path at 458-462 bypasses the new outer name after the inner assistant name was removed. The existing NVDA evidence is valuable, but these paths need focused coverage and a rerun. Current-head checks also have no CI Gate/build-test receipt yet. Action in this cleanup pass: leaving this PR open. No branch changes or runtime-proof waiver. The findings above come from source, discussion and recorded-CI review; Windows validation was not rerun in this pass. |
Closes #1944
What Problem This Solves
Fixes: with a screen reader, the chat transcript is announced as one unnamed list, Up and Down do not move between messages, each message is announced as raw markdown with no send time, and repeated tool calls in one activity all announce the same text.
User Impact
User impact: screen reader users can Tab into the chat history, hear one message at a time with its sender, literal text and the time shown in the window, press Up or Down to walk the transcript, and hear each nested tool call's position and input summary instead of an identical label.
Why This Change Was Made
improve(chat): align native conversation and tool activity with web(#2093) rebuilt the transcript but left itsItemContainers unnamed, unfocusable and without a key handler, so the rows were unreachable from the keyboard and NVDA read the list as one group.This change names each focusable container from the visible message text (markdown literals kept, no "code block" placeholder) plus the same timestamp the footer shows, makes message containers Tab stops, and moves focus with Up/Down through the parent
ItemsRepeater. Nested tool calls keep their name, status and input, and add a localized position when a card is one of several.Evidence
MessageRows_AnnounceLiteralMarkdownAndTheVisibleTimemounts the production timeline renderer and asserts: the row container is a Tab stop, its name contains the literal fenced body09:00 Focus time,snake_caseanda<b(nocode block), and it carries the visible time in the current UI language.RepeatedToolRows_AnnounceTheirPositionAndInputmounts twopowershellcards withcommand: dir/command: pwdin one activity and asserts the localized position label plus each input summary.Raw (redacted) NVDA + UI Automation evidence
Change Type
Scope
Required proof pools
windows-winui-interactive: native Up/Down navigation and NVDA speech are covered above on a current-head isolated app; a maintainer-owned interactive run can confirm it on their desktop.Validation
Host note: this machine has a zh-CN UI, so a number of pre-existing UI tests fail on it; the same failures reproduce on a clean
upstream/mainworktree (see below), and the two workarounds used for the .NET test host (local temp output and a workspace-localOPENCLAW_REPO_ROOT) do not touch product code../build.ps1— pass (prerequisites, docs validation, Shared/Cli/WinNodeCli/SetupEngine/WinUI builds).dotnet test tests/OpenClaw.Tray.Tests -c Debug --no-build— 5843 passed, 0 failed.dotnet test tests/OpenClaw.Shared.Tests -c Debug --no-build— 5411 passed, 28 skipped, 0 failed.dotnet test tests/OpenClaw.Connection.Tests -c Debug --no-build— 1746 passed, 1 skipped, 0 failed.dotnet test tests/OpenClaw.WinNode.Cli.Tests -c Debug --no-build— 141 passed, 0 failed.dotnet test tests/OpenClaw.Tray.IntegrationTests -c Debug --no-build— 53 passed, 25 skipped, 0 failed.dotnet test tests/OpenClawTray.FunctionalUI.Tests -c Debug -r win-x64 --no-build— 19 passed, 0 failed.dotnet test tests/OpenClaw.SetupEngine.Tests -c Debug --no-build— 2595 passed, 2 failed, 4 skipped; both failures are host-specific (WSL prints localized output, and a fixture path with an apostrophe), and the same two fail on a cleanupstream/mainworktree.Category!=Accessibility&Category!=NativeOnboardingProof&Category!=GatewayFixture: 605 passed / 276 failed / 9 skipped on this branch; cleanupstream/mainf18317a6produces 604 / 276 / 9 with an identical failed-test name set, so the failures are pre-existing zh-CN/desktop environment issues, not regressions.Real Behavior Proof
10.0.26320.0; MSIXOpenClawFoundation.OpenClaw.Dev 2026.11.1.13(Debug) built from this head; NVDA2026.3.1; local Gatewayws://127.0.0.1:18789.faa5aa54.Down,Down,Up; expanded tool activityChatToolActivity_e120and focused its two nested cards; read%TEMP%\\nvda.logDEBUG speech deltas by byte offset.下午10:28-style times; each arrow press produced a newevent_gainFocusplus speech and the list position moved 35 → 36 → 38 → 36; tool cards spoke第 1 个,共 2 个/第 2 个,共 2 个with the input preview; the focused row's action button spoke复制消息, 按钮.Yes/No/N/A):N/A— evidence is copied UI Automation output and NVDA log lines.Security Impact
No)No)No)No)No)Yes, explain the risk and mitigation: n/aCompatibility and Migration
Yes)No)No)Review Conversations