apps/chat/src/ChatSurface.svelte ships role="menu" on .commands-popover whose element children are a headless <div class="commands-popover-head"> and a <ul> of <li> — listitem, not menuitem. The six role="menuitem" buttons sit one level too deep, carry no tabindex, and the menu has no arrow-key handler: the widget is six tab stops instead of one. Escape closes the popover from a document-level handler and drops focus to <body> rather than returning it to the trigger.
Plan: https://github.com/lossless-group/augment-it/blob/rebuild/turbo-rsbuild/context-v/plans/Build-Selector-And-Close-The-Keyboard-Contract.md
Loop: https://github.com/lossless-group/augment-it/blob/rebuild/turbo-rsbuild/context-v/loops/Adopt-Selector-In-One-Member.md
apps/chat/src/ChatSurface.svelteshipsrole="menu"on.commands-popoverwhose element children are a headless<div class="commands-popover-head">and a<ul>of<li>—listitem, notmenuitem. The sixrole="menuitem"buttons sit one level too deep, carry notabindex, and the menu has no arrow-key handler: the widget is six tab stops instead of one. Escape closes the popover from a document-level handler and drops focus to<body>rather than returning it to the trigger.Plan: https://github.com/lossless-group/augment-it/blob/rebuild/turbo-rsbuild/context-v/plans/Build-Selector-And-Close-The-Keyboard-Contract.md
Loop: https://github.com/lossless-group/augment-it/blob/rebuild/turbo-rsbuild/context-v/loops/Adopt-Selector-In-One-Member.md