Triage
Confirmed in current desktop source. This is a real accessibility bug, not a support/setup issue.
Message-link right-click already goes through a custom desktop menu (ChatMarkdown → showExternalLinkContextMenu → LocalApi.contextMenu.show → desktopBridge.showContextMenu). Applications / Shift+F10 fire that same contextmenu handler. The request then drops the invocation source:
DesktopBridge.showContextMenu/LocalApi.contextMenu.showonly accept items + position (packages/contracts/src/ipc.ts).- IPC
ContextMenuInputis{ items, position? }(apps/desktop/src/ipc/methods/window.ts). ElectronMenu.showContextMenucallsmenu.popup()withwindow, optionalx/y, andcallbackonly (apps/desktop/src/electron/ElectronMenu.ts). There is nosourceTypeanywhere on this path.
Electron 43 already supports popup({ sourceType }) on Windows/Linux. When it is omitted, Chromium treats the menu as mouse-opened and does not select the first item, so NVDA browse mode never moves onto the options. That matches the isolated Electron comparison in the report.
The same contract is used by other desktop menus (file chips, sidebar, media). File chips already special-case clientX/Y === 0 for keyboard placement, but they still do not forward a source. This issue can stay scoped to message links; the fix belongs on the shared menu request.
Not upstream: Electron already exposes the API. T3 just never sends the keyboard source.
Related
- Nearby NVDA work, not a duplicate: https://github.com/pingdotgg/t3code/issues/10153 and https://github.com/pingdotgg/t3code/pull/10154 (composer suggestions)
- Nearby keyboard a11y, different surface: https://github.com/pingdotgg/t3code/pull/5521
Next step
Forward the keyboard source through the existing showContextMenu request and pass it to menu.popup(). Confirm with NVDA browse mode on the Windows desktop app (Applications / Shift+F10 on a message link). No further reproduction notes needed for the source gap.