openai / openai/codex

[Windows][Global Dictation] One shortcut intermittently starts both composer and global dictation on 26.908

Open
#45,065 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app bug windows-os
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?
  1. Bind globalDictationToggle to a shortcut.
  2. Leave globalDictationHold and composer.startDictation unbound.
  3. Open a Codex task and focus the composer.
  4. Press the global dictation toggle shortcut once.
  5. 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:

  1. handleToggleHotkeyPressed calls tryStartInAppSession(focusedWindow, "toggle") when a Codex window is focused.
  2. The controller sends global-dictation-in-app-start to the renderer.
  3. waitForInAppDictationStart waits for global-dictation-in-app-started for only 150 ms.
  4. On timeout, handleToggleHotkeyPressed falls back to startSession("toggle") and starts the global session.
  5. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.