[Windows][Global Dictation] One shortcut intermittently starts both composer and global dictation on 26.908
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
What version of the Codex App are you using (From “About Codex” dialog)?
Codex Desktop 26.908.4834.0
What subscription do you have?
ChatGPT subscription; the exact tier does not appear relevant to this local shortcut-routing bug.
What platform is your computer?
Windows 11 Pro 10.0.26200 (build 26200), x64
What issue are you seeing?
The configured global dictation toggle shortcut can intermittently start both composer dictation inside Codex and the floating global dictation session from one keypress.
The user first noticed this within roughly the last 12 hours, but the exact first-occurrence time is not known. Changing the shortcut combination did not resolve it. During read-only diagnostics, the binding changed from Alt+1 to Ctrl+Shift+D, while the symptom was reported to persist.
Current shortcut state observed at 2026-09-13 01:00 JST:
globalDictationToggle = Ctrl+Shift+D
globalDictationHold = unbound
composer.startDictation = unbound
composer.startVoiceMode = unbound
realtimeVoice = unbound
Only one root packaged app process was running, from the current 26.908.4834.0 package. No old-version root process was found, so two independent app instances do not explain the symptom.
What steps can reproduce the bug?
- Bind
globalDictationToggleto a shortcut. - Leave
globalDictationHoldandcomposer.startDictationunbound. - Open a Codex task and focus the composer.
- Press the global dictation toggle shortcut once.
- Repeat while switching tasks, returning focus to the composer, or while a task is busy.
Intermittently, both of these start from the same press:
- composer dictation in the Codex input field;
- the floating global dictation UI/session.
Changing the actual key combination does not prevent the problem because both configurations still use the same globalDictationToggle command.
What is the expected behavior?
One shortcut press must create at most one recording session. When Codex accepts the in-app request, the global fallback must not remain active. If the in-app acknowledgement arrives after the fallback deadline, the two paths should reconcile and cancel one session.
Additional information
Read-only inspection of the packaged Windows app shows the same routing pattern described in #37623:
handleToggleHotkeyPressedcallstryStartInAppSession(focusedWindow, "toggle")when a Codex window is focused.- The controller sends
global-dictation-in-app-startto the renderer. waitForInAppDictationStartwaits forglobal-dictation-in-app-startedfor only150 ms.- On timeout,
handleToggleHotkeyPressedfalls back tostartSession("toggle")and starts the global session. - The renderer can still process the original request and start composer dictation after the controller has already fallen back. No late-success reconciliation was found in the inspected path.
Current packaged bundle:
app.asar SHA-256:
2BD5B96A48232F3CCF3DF6BE50965920699EA3A1B4512DCDD770E209FD1F009E
Local AppX deployment history:
2026-09-12 11:38 JST 26.908.4834.0 staged; preferred package version changed
2026-09-12 12:05 JST registration failed with 0x80073D02 because 26.903 was running
2026-09-12 19:21:32 JST update from 26.903.9818.0 to 26.908.4834.0 registered successfully
2026-09-13 00:18:29 JST current 26.908 root process started
This timing makes the update relevant, but it does not prove that 26.908 introduced the underlying race. A previous local inspection of 26.903 found the same overall in-app-first/global-fallback route, while the old package files are no longer available for a byte-level comparison. The update may instead have changed renderer, focus, or composer-mount timing enough to make an existing 150 ms race occur more often.
This report combines the user's direct observation with read-only local diagnostics. No automated microphone recording was performed.
Related: #37623 reports the same late-acknowledgement race on macOS. This issue records the matching behavior and packaged implementation on Windows 11 with Codex 26.908.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with handleToggleHotkeyPressed, tryStartInAppSession, waitForInAppDictationStart, and startSession, then trace the renderer events global-dictation-in-app-start and global-dictation-in-app-started. Reproduce the focused-composer and busy-task cases, and verify that one shortcut press produces at most one recording session, including when the in-app acknowledgement is delayed.
Written by the indexing model from the issue text.
Assessment
- Domain
- desktop
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100