macOS desktop 26.715.31925: window flickers and rejects all input under workspace personal-access-token auth — composer remounts ~9x/s, Statsig "no userID" spam, models fetch 401 despite valid token

Open 💬 3 comments Opened Jul 19, 2026 by Larrylicious

Summary

Since updating to 26.715.31925 on macOS, the desktop app is unusable when signed in with a workspace personal access token (at-…, Business workspace): the window visibly flickers and accepts no clicks or keyboard input. The previous build (26.707.91948) worked with the same token.

Root cause evidence (gathered via sample, the app's log DB, and CDP against the running app): the composer UI remounts ~9×/second in an endless loop, apparently driven by broken user identity under PAT auth (Statsig gate checks fail with "no userID"; models endpoint fetch fails 401 with "Could not parse your authentication token" even though the same token works via curl and the bundled CLI).

Environment

  • App: ChatGPT/Codex desktop 26.715.31925 (Electron/Chromium 150.0.7871.124, Node 24.14.0), bundled CLI client_version 0.145.0
  • macOS 26.5.2 (25F84), MacBook Pro (Mac17,9, M5 Pro, arm64)
  • Auth: workspace personal access token (at-…), i.e. codex login --with-access-token; codex login status = "Logged in using personal access token"
  • No external HID devices connected (to rule out the #26908-family input-freeze reports)

Symptoms

  • Window flickers continuously right after launch; nothing is clickable; typing impossible
  • Persists across app restarts, a full reboot, and re-running codex login --with-access-token
  • Started immediately after the manual update 26.707.91948 → 26.715.31925

Diagnosis

1. Not a native hang. sample of browser process, renderer, and compositor shows all main threads mostly idle in their event loops; GPU process stable; no crashpad reports.

2. The composer remounts ~9×/s (measured). A MutationObserver over 5 s with zero user interaction:

{"seconds":"5.0","nodesAdded":440,"nodesRemoved":440,"attrChanges":954,"activeElement":"BODY."}

The churning nodes are the prompt editor and its toolbar (DIV.ProseMirror, DIV.no-drag.pointer-events-auto.flex, …), each added and removed 44–88 times in 5 s. document.activeElement stays on BODY, which is why input never lands anywhere.

3. Feature-gate checks fail continuously with no userID. Renderer console during the churn (65 messages / 6 s, same cadence as the remounts):

WARN [Statsig] The user does not have the required id_type "userID" for Gate "…"

(dozens of distinct gate IDs, repeating for as long as the app runs)

4. The app's models fetch gets 401 although the token is valid. From the app's log DB at startup:

ERROR codex_models_manager::manager list_models{refresh_strategy=online}:
failed to refresh available models: unexpected status 401 Unauthorized:
{"detail":"Could not parse your authentication token. Please try signing in again."},
url: https://chatgpt.com/backend-api/codex/models?client_version=0.145.0

But the same token works fine outside the app:

  • curl -H "Authorization: Bearer <at-token>" "https://chatgpt.com/backend-api/codex/models?client_version=0.145.0"200 with the full model list
  • bundled CLI codex exec → completes normally

So the app itself is sending broken/other credentials on (at least some) requests while signed in via PAT.

5. Regression vs 26.707. The old build logged occasional 401 bursts on the plugin-catalog endpoints under PAT too, but the UI stayed fully usable.

Expected

Desktop app remains usable when authenticated with a workspace personal access token, as in 26.707 — or, if some backend calls can't be served under PAT auth, the app degrades gracefully instead of remount-looping the composer.

Notes

  • Switching the app to browser OAuth login is not a viable workaround for us: the workspace account is shared with a headless agent, and OAuth's single-active-session rotation evicts it (the scenario described in #22903).
  • Happy to provide the full sample outputs, log-DB excerpts, or run an instrumented build.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗