Repository navigation
[Windows] Blank client area on 26.831 / 26.901 (Chromium 152): renderer paints but window never shows it; --disable-features=CalculateNativeWinOcclusion avoids it, Page.reload restores it #42547
Description
Related: #40878 (same blank-client-area phenotype on 26.820/26.825). This report adds a newer version line (26.831 / 26.901, Chromium 152), a launch flag that has been deterministic on this machine so far, evidence that the renderer keeps painting while the window never shows it, and a way to pass Chromium switches to the Store (MSIX) package.
What version of the Codex App are you using (From "About Codex" dialog)?
OpenAI.Codex 26.831.2377.0(Store/MSIX, internal app version26.831.21537) - first launch on 2026-09-03 was blankOpenAI.Codex 26.901.1978.0(internal26.901.20858) - same behavior- Both embed Chromium
152.0.7977.64(ChatGPT.exefile version;/json/versionreportsChrome/152.0.7977.64). The 26.831 bundle declareselectron: 42.3.0. - The previous package
26.825.6671.0(Chromium151.0.7922.174) rendered normally on the same machine on 2026-09-02, one day earlier.
What subscription do you have?
ChatGPT Pro
What platform is your computer?
Microsoft Windows NT 10.0.26200.0 x64 (Windows 11 Pro 25H2, build 26200.9168)
- CPU AMD Ryzen 5 2600, 24 GB RAM
- GPU AMD Radeon RX 570, driver
31.0.12027.9001(2023-03-30), ANGLE D3D11, feature level 12_0 - Two displays, both at 100% scaling: 1920x1080 (primary) and 2560x1440
- Google Chrome
152.0.7977.75and an Electron 42 / Chromium 148 app render normally on the same GPU and driver at the same time.
What issue are you seeing?
After the Store update to 26.831 the main window opens but the whole client area is a single flat color, #202020, which is the BrowserWindow backgroundColor for the dark theme (the opaque, non-Mica surface path). The window caption buttons (minimize / maximize / close) are drawn; nothing else is. Updating to 26.901 did not change it. Every normal launch since the update has been blank.
What I verified while the window was blank:
- The app is alive and working. The main process logs a normal startup with no errors:
window main frame finished load,window ready-to-show,app routes mounted after ~9 s, app-server handshake OK. Renderer, GPU and utility processes stay alive;Local Statereportsexited_cleanly: trueandsystem_crash_count: 0. - The renderer is painting the full UI. Attaching DevTools over
--remote-debugging-portand callingPage.captureScreenshotonapp://-/index.htmlreturns the complete Codex UI (sidebar, projects, home composer).document.body.innerHTMLis ~600 KB,#roothas a React root,document.visibilityStateisvisible,document.hiddenisfalse,devicePixelRatiois 1, inner size matches the window (1280x820). - The presented window content is flat.
PrintWindow(PW_RENDERFULLCONTENT)of the top-level window samples exactly one color (#202020) over the whole client area; a UI Automation walk of the window shows only the caption buttons (accessibility for the web content was not enabled, so this is only a secondary signal). - GPU status is normal.
SystemInfo.getInfoover CDP:gpu_compositing: enabled,rasterization: enabled,webgl/webgpu: enabled,skia_graphite: disabled_off,direct_rendering_display_compositor: disabled_off_ok,directComposition: true,supportsOverlays: false,skiaBackendType: GaneshGL,processCrashCount: 0. Driver bug workarounds:disable_direct_composition_sw_video_overlays, disable_nv12_dynamic_textures, disable_video_overlay_if_moving, exit_on_context_lost, force_rgb10a2_overlay_support, limit_d3d11_video_decoder_to_11_0, ...(the usual AMD set). - Window structure is identical to a painting instance: top-level
Chrome_WidgetWin_1withWS_EX_NOREDIRECTIONBITMAP, childrenChrome_RenderWidgetHostHWND(visible) andIntermediate D3D Window(visible, not cloaked, same size as the client area). - One Crashpad sidecar was written at the very first launch of 26.831:
{"capture_kind":"dump_without_crashing","ptype":"gpu-process"}. Later blank launches wrote no reports. - Auth is fine (
getAuthStatus/account/readsucceed, ChatGPT API calls return 200) and this is not theworkspace_dependenciesloop from Codex Windows app stuck on blank/spinner at startup — unsupportedworkspace_dependenciesfeature loop #19437 / [Bug] Windows Desktop App (26.422.3464.0) white screen on startup due to workspace_dependencies loop #19770.
So the frames exist in the renderer / viz surface but are never composited into what the window presents. A page reload gives the window a new surface and it appears immediately.
What steps can reproduce the bug?
- Install
OpenAI.Codex 26.831.2377.0or26.901.1978.0from the Store on the machine above. - Launch Codex normally (Start menu, Store, or
explorer.exe shell:AppsFolder\OpenAI.Codex_2p2nqsd0c76g0!App). - Wait 45 s or longer. The client area stays flat
#202020.
Counts on this machine (each measured at least 45 s after launch by sampling the window pixels; "painted" means the normal UI is visible):
| Launch | Result |
|---|---|
| Normal launch, no switches (26.831 x2 by the user, 26.901 x3 in controlled runs) | 5 / 5 blank |
Same package launched with --disable-features=CalculateNativeWinOcclusion (26.901 x3, two of them also with --remote-debugging-port=9222) |
3 / 3 painted, document.visibilityState = visible |
Blank instance, then Page.reload sent over CDP |
2 / 2 painted within 20 s, no restart needed |
Things that did NOT recover a blank instance (each verified by re-sampling the window): minimize + restore, hide + show (SW_HIDE/SW_SHOW), maximize + restore, resizing by 40 px, moving the window inside the monitor and to the other monitor, attaching DevTools (Runtime.enable / Log.enable), Page.captureScreenshot, Emulation.setDeviceMetricsOverride + clearDeviceMetricsOverride, hiding and re-showing the Chrome_RenderWidgetHostHWND child, fully covering the window with another app and uncovering it, and installing the pending 26.901 update.
To pass Chromium switches to the Store package without losing package identity, activate it through IApplicationActivationManager (the flags are otherwise unreachable on Store builds, as noted in #23624):
$src = @"
using System; using System.Runtime.InteropServices;
public enum ActivateOptions { None = 0 }
[ComImport, Guid("2e941141-7f97-4756-ba1d-9decde894a3d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IApplicationActivationManager {
[PreserveSig] int ActivateApplication([In, MarshalAs(UnmanagedType.LPWStr)] string aumid, [In, MarshalAs(UnmanagedType.LPWStr)] string args, [In] ActivateOptions o, [Out] out uint pid);
[PreserveSig] int ActivateForFile([In, MarshalAs(UnmanagedType.LPWStr)] string aumid, [In] IntPtr items, [In, MarshalAs(UnmanagedType.LPWStr)] string verb, [Out] out uint pid);
[PreserveSig] int ActivateForProtocol([In, MarshalAs(UnmanagedType.LPWStr)] string aumid, [In] IntPtr items, [Out] out uint pid);
}
[ComImport, Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")] public class ApplicationActivationManager {}
public static class L { public static uint Go(string aumid, string args) { uint pid; var m = (IApplicationActivationManager)new ApplicationActivationManager(); m.ActivateApplication(aumid, args, ActivateOptions.None, out pid); return pid; } }
"@
Add-Type -TypeDefinition $src
[L]::Go('OpenAI.Codex_2p2nqsd0c76g0!App', '--disable-features=CalculateNativeWinOcclusion')The switch shows up on the main process command line and the app runs as the normal Store package.
What is the expected behavior?
The window should present the UI that the renderer is already painting, on every launch, without Chromium switches or a reload.
Additional information
- Working hypothesis, not proven: with native window occlusion tracking enabled, the window's visibility flips during startup (created hidden, shown, briefly judged occluded, then visible again) and that transition races with the first surface embedding, so the browser side keeps drawing the background color and never embeds the renderer's surface; a reload creates a new surface and fixes it.
--disable-features=CalculateNativeWinOcclusionremoves the occlusion flip, which matches the 3 / 3 result. The 5 / 3 / 2 counts are small; happy to run more launches or a diagnostic build. - The client area is
#202020here, i.e. the opaque surface path, not the transparent / Mica path discussed in [Windows] Blank client area on 26.820.7780.0; --disable-direct-composition restores rendering #40878, so that path is affected too. - The machine's AMD driver is old, but Chrome 152 and other Chromium-based apps present normally on it, and the GPU process reports no crashes or lost contexts during the blank launches.
- The "Reload Window" application-menu item is registered with the accelerator
Command+Control+R, which does not exist on Windows, so an end user has no keyboard way to trigger the reload that fixes the window. A working Windows accelerator (for exampleCtrl+Shift+R) would be a cheap mitigation while the root cause is being fixed. - Logs (main-process desktop logs, Crashpad sidecar, CDP dumps) are available on request; I can also upload through
/feedbackif that is preferred.
Activity
github-actions commentedon Sep 3, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
vizelio48 commentedon Sep 3, 2026
Independent confirmation on a newer Windows 26.901 build.
Page.reloadis a reliable workaround on my machine, whileCalculateNativeWinOcclusionalone is not.I am seeing essentially the same blank-client-area failure on Windows 11.
Current affected build
26.901.22334, released Sep 3, 2026OpenAI.Codex_26.901.2854.0_x64__2p2nqsd0c76g0OpenAI.Codex_2p2nqsd0c76g0I previously reproduced the blank-window problem on the 26.831 line as well. Updating to 26.901 did not resolve it.
Symptom
On a normal Store launch the native window opens, including the title bar/window controls, but the client area remains a uniform dark/blank surface indefinitely.
The app does not appear to be crashing.
Earlier diagnostics on the affected installation showed normal startup progress, including the main frame loading,
ready-to-show, routes mounting, authentication succeeding, and app-server initialization succeeding.I also did extensive local-state troubleshooting before reaching the result below:
A Microsoft Store Beta build on the same Windows installation was able to render normally, while the affected Stable builds remained blank.
Important reproduction on
26.901.2854.0First I launched the packaged executable directly with:
That produced a visible UI, but it was not a normal full Store activation: only the Work/Codex surfaces were available and my normal Chat/cloud conversations were not present.
I then launched the real Store package through
IApplicationActivationManagerwith:I verified from
Win32_Process.CommandLinethat the mainChatGPT.exeprocess really did receive the flag:Despite that, the correctly activated Store instance was still completely blank.
So on this newer build, disabling
CalculateNativeWinOcclusionby itself is not sufficient on my machine.What reliably restored the UI
I launched the Store package through
IApplicationActivationManagerwith:The window was still blank.
The DevTools endpoint was reachable and exposed the main renderer target:
I then sent:
{"id":1,"method":"Page.reload","params":{"ignoreCache":true}}over the renderer's DevTools WebSocket.
Immediately after
Page.reload, the complete UI appeared.I tested the resulting application by navigating through chats, menus and Settings. The normal Chat/Work/Codex UI was present and the application appeared fully functional.
This result is highly repeatable for me:
I now use a small local launcher that performs the same sequence automatically: activate the real Store package, wait for the
app://-/index.htmlrenderer, sendPage.reload, then exit. This makes the current Stable build usable without modifying WindowsApps or the app package.Current assessment
This strongly supports the presentation/surface-embedding failure described in this issue rather than corrupted ChatGPT/Codex user data.
On my machine the renderer exists and can be contacted while the visible top-level window remains blank. Reloading the renderer creates/reattaches a surface that Windows then presents normally.
The fact that this still reproduces on package
26.901.2854.0, which is newer than the 26.901 build originally reported here, also indicates that the regression is still present in the current Stable line.I can provide additional sanitized logs or repeat specific diagnostic tests if useful.
NORMALSALINE0413 commentedon Sep 4, 2026
Additional reproduction on 26.831.2377.0 / Windows 11 25H2 / RTX 3070 Laptop
Reporting an additional affected machine, with a successful
--disable-direct-compositionlaunch. This adds a different GPU configuration to this issue and overlaps with the workaround in #40878.Environment
OpenAI.Codex 26.831.2377.0, x64; package status OK.26200.8875.31.0.15.4630.7.6.5.The package, OS build, CPU, GPU and driver above were checked locally on 2026-09-05. We have not established the active display routing or a hybrid-GPU cause.
Observed behavior and successful workaround
--disable-direct-composition, the user confirmed that Codex opened normally.Win32_Processverified that the currently running main process actually contains that switch. The GPU-process command line also contains it.The working launch commands were:
Sanitized main-process command line observed locally:
Evidence limits
CalculateNativeWinOcclusionalone on this machine.Start-Process -C:\...invocation. The corrected-FilePath $exe -ArgumentList ...invocation worked; these shell errors are not evidence of a Codex authentication failure.Could the team investigate this configuration alongside the existing blank-window reports and document a supported persistent workaround for Store installations? Normal launch should display the UI without requiring a Chromium switch.
This report was prepared with Codex assistance at the affected user's request. Only the diagnostic summary and commands are shared; no conversation transcript, raw logs, credentials, personal file paths, or screenshots are uploaded.
LeeDKuen commentedon Sep 5, 2026
Follow-up on 26.901.5280.0: recurring black screen, stalled startup queries and plugin loading; user-confirmed recovery by cancel/refetch
Prepared: 2026-09-06, Asia/Seoul (UTC+09:00).
Follow-up from the original reporter of #42547, prepared with Codex assistance and approved for public posting.
This report intentionally excludes the user's email, account identifiers, conversation IDs, workspace names, tokens, and raw browser/network logs. Contact email can be supplied separately through a private support channel.
Summary and impact
This is additional evidence from the same affected machine on a newer package. It does not retract the original report's renderer-screenshot versus native-window-presentation observations. A frontend query stall and a presentation/surface problem may coexist, and cancel/refetch may also trigger rendering work. We have not performed a controlled experiment separating query completion from repaint/surface effects; recovery after retry is not sufficient to rule out the original compositor/occlusion hypothesis.
The Windows desktop app repeatedly shows its startup logo, then a persistent black window when launched normally from the Start menu. Plugin settings have also remained loading without displaying installed plugins. The app-server and authentication can initialize successfully while frontend initialization queries remain pending/fetching.
Canceling and refetching selected stalled frontend queries, without changing GPU settings or reinstalling plugins, restored the visible app and plugin list. The user confirmed successful recovery and subsequently confirmed successful launch through an automatic recovery shortcut after fully exiting the application. Normal Start-menu launches previously reproduced the black screen after a successful one-time recovery.
This is evidence of a frontend startup/query-lifecycle problem, not proof of the deepest underlying defect. Please investigate and provide an official fix; the current workaround depends on unsupported internal state inspection.
Environment
Reproduction on the affected machine
Expected: startup resolves into a usable main UI and installed plugin settings, or reports an actionable initialization error and offers a retry.
Actual: the app can remain visually black or show indefinitely loading plugin settings despite successful backend initialization. Exact reproduction rate across all launches is unknown; some diagnostic launches eventually displayed UI.
Observed backend and frontend behavior
Supplied startup logs show these successful milestones:
Numerous account/read, config/read, model/list and thread-related responses were routed with errorCode=null. Earlier diagnostics observed plugin/installed returning installation information while the corresponding settings UI remained loading. These successes do not establish that every frontend query had received and applied its own response.
Direct inspection of React Query state in affected diagnostic launches found selected queries with status=pending and fetchStatus=fetching. Across different runs, affected keys included:
Not all keys were stalled in every run. In the latest verified recovery, the only recorded retried key was ["experimental-features", "list"].
Controlled recovery evidence
Sanitized result excerpt:
{ "state": "queries_released_ui_content_present", "snapshot": { "ready": true, "pending": [], "textLength": 1256, "controls": 274 }, "repairs": [[["experimental-features", "list"]]], "visualConfirmationRequired": true }DOM text/control counts alone were not treated as proof of visual recovery. The user separately confirmed that the app and plugins were visible, including after fully exiting and relaunching through the recovery shortcut.
The recovery uses the existing query client: cancelQueries with the exact query key, followed by refetchQueries with the exact key and type=active. The revised helper observes a query remaining pending for at least 20 seconds before retrying and allows a further 20 seconds before repeating, to avoid continuously canceling ordinary slow requests. It does not retry chat-generation queries. This is a diagnostic workaround, not a supported API or proposed production fix.
Troubleshooting already performed and confounders
Other warnings: correlation is not causation
Logs also contained a React Router empty leaf-route warning, Windows-unavailable Artifact Session Unix-socket warning, stale rollout-path warnings, ignored experimental feature keys, missing Korean currency translations with fallback, GCM deprecated-endpoint errors, and an unreadable Google Drive extension registration. None was isolated as the cause of the black screen.
Some connection-state logs carried an error object labeled connection-failed while simultaneously reporting state=connected and wrapping backend WARN text. Please review whether such stderr warnings incorrectly affect frontend connection/query lifecycle; this is an investigation lead, not a proven defect.
The Chrome extension earlier displayed: "Unable to start ChatGPT. Codex App-server manifest entry is missing required path nodePath". The user later confirmed the extension also worked, but no direct causal link to query recovery was established and the recovery helper did not edit nodePath or its manifest. Please track this separately if needed.
Requested engineering follow-up
Please correlate these observations with the original presentation-path evidence rather than assuming all blank windows have one established cause. The user remains unable to rely on normal Start-menu startup and needs a supported fix instead of a diagnostic launcher.
Privacy and supporting material
This report is a sanitized synthesis of local diagnostics and explicit user confirmations. Raw session transcripts, cookies, authentication files, GCM stores, network captures, project paths, and conversation contents are intentionally not attached. Any additional requested evidence should be reviewed and shared privately with OpenAI Support.
mtitanic777 commentedon Sep 6, 2026
Same 26.901, worse symptom on Windows 11 (build 26200, x64) — window never becomes visible at all.
OpenAI.Codex 26.901.6511.0 (ChatGPT/Codex desktop, Microsoft Store), Windows 11 Home 26200, x64.
Observed:
Chrome_WidgetWin_0at the correct size/position, but the window is never shown:WS_VISIBLEis never set (IsWindowVisible= false). No splash, no content, nothing on screen.ShowWindowAsync(SW_SHOW)posts fine but the window never appears, suggesting the UI thread is not pumping / the show is gated by the occlusion logic.%LOCALAPPDATA%\Packages\OpenAI.Codex_2p2nqsd0c76g0\LocalCache\Local\Codex\Logs\stops right afterLaunching app ... platform=win32andAppshot hotkey inactive configured=true enabled=false; no error, no crash dump. Log also shows[sparkle] in_app_updates_policy_wait_started timeoutMs=300000.codex(0.144.5) works fine — only the desktop GUI is affected.Already tried, none helped:
ChatGPT Installer.exe, same 26.901.6511.0 build);Add-AppxPackage -Register(store "Repair");ChatGPT.exeprocesses before launching;app\ChatGPT.exe --disable-features=CalculateNativeWinOcclusiondirectly (flag appears not to reach the renderer — window still hidden).Happy to attach logs or event-log output if useful.
yousuke106 commentedon Sep 11, 2026
Additional Windows reproduction on 26.903.9818.0: one Page.reload restored the UI
I can add a reproduction from another Windows machine on MSIX package OpenAI.Codex 26.903.9818.0 (x64). The startup black screen recurred on September 11, 2026. This is additional evidence, not a confirmed root cause or a claim that the original presentation/compositor diagnosis is incorrect.
Controlled recovery test
--remote-debugging-port=<ephemeral port>. The listener was verified as loopback-only and owned by that process. GPU settings and the existing profile were retained.Page.getFrameTreeand a bounded, read-only DOM/React-state probe. This test did not enable the Debugger or Network domains, install logpoints, or cancel/refetch queries.Page.reloadwithignoreCache: true, guarded by the current frame/loader identity.The reload was sent at 2026-09-11 14:47:23 UTC (23:47:23 JST).
Before reload, the document reported
readyState=complete; the root was present, withdisplay:block,visibility:visible, andopacity:1. The sampled current React tree contained loading/pending states. The post-reload React traversal reached its configured limit, so I am not claiming that every query was verified as complete.Native logs show plugin reconciliation starting approximately 4 seconds after the reload and completing approximately 8 seconds after it. The visual recovery was confirmed separately from those logs and DOM counts.
Controls and limitations
ignoreCache: truebypassed the cache for that navigation; stored cache was not deleted.Could the team investigate this newer affected package and identify a supported fix or recovery action? The current workaround still requires reloading the main renderer after a failed startup.
This comment was prepared with Codex assistance and approved for posting. It contains only a diagnostic summary; no conversation transcript, credentials, account identifiers, personal paths, raw logs, or screenshots are attached.