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
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
sampleoutputs, log-DB excerpts, or run an instrumented build.
3 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Not a duplicate of #34141 in my assessment, though possibly related: #34141 is Windows on a Plus (consumer) subscription with the whole workspace cycling back to the loading spinner, and no diagnosis attached. This issue is macOS under workspace personal-access-token auth, with the specific evidence pointing at broken user identity in that auth mode: composer remounting ~9×/s (measured via MutationObserver), continuous Statsig
no userIDgate failures at the same cadence, and the app receiving 401 ("Could not parse your authentication token") from an endpoint that returns 200 for the same token via curl and the bundled CLI.If the underlying cause turns out to be the same 26.715 UI state loop surfacing in different auth contexts, feel free to merge them — but the PAT-identity evidence here shouldn't get lost in that case. (#34126 is unrelated: corrupted config.toml after power loss, indefinite startup hang.)
Follow-up on the duplicate check: I watched the screen recording attached to #34141, and it shows visually the exact same behavior as on my macOS setup (composer briefly appearing, UI immediately cycling away, nothing clickable). So despite the different platform (Windows vs macOS) and auth mode (Plus subscription vs workspace personal access token), the root cause is likely shared — a 26.715 UI re-render/remount loop that missing PAT identity is apparently just one way to trigger.
That makes the diagnosis in this issue (measured ~9×/s ProseMirror remount, Statsig
no userIDcadence, app-side 401 vs curl/CLI 200 with the same token) a candidate explanation path for #34141 as well. Merging the two is fine from my side.