Codex Desktop (Windows ARM64) crash-loops on launch after server-side feature flag rollout — NAPI delay-load failure in serialport addon (ChatGPT.exe exports no NAPI symbols)

Resolved 💬 1 comment Opened Jul 15, 2026 by Z2ZATL Closed Jul 15, 2026

Summary

Codex Desktop 26.707.9981.0 (arm64, Store-signed package) ran fine for ~24 hours after updating, then began crash-looping at 2026-07-15 15:51:13 UTC — the exact second an in-session statsig feature-flag refresh succeeded (trigger=interval). Since then, every launch shows the window for ~3–10 seconds and the browser process crashes. Because the flag values are cached locally, the crash reproduces on every startup, and survives OS reboots.

Crash dump analysis shows the root cause is a delay-load failure (0xC06D007F) resolving napi_create_function against the host executable, which exports no NAPI symbols in this ARM64 build. The rollout appears to have activated a code path that loads the @worklouder/device-kit-oaiserialport native addon in the main process.

Environment

  • App: OpenAI.Codex 26.707.9981.0 arm64 (package family OpenAI.Codex_2p2nqsd0c76g0, SignatureKind: Store), installed 2026-07-14 15:38 UTC via auto-update. Desktop release string in logs: 26.707.72221, bundled codex-cli 0.144.2.
  • OS: Windows 11 Home 24H2+ build 10.0.26200, ARM64 (Surface, Snapdragon X Plus, 16 GB RAM)
  • Worked fine on this exact version from 2026-07-14 15:43 UTC until 2026-07-15 15:51 UTC (multiple long sessions, incl. an ~11-hour session).

Timeline (all UTC)

| Time | Event |
|---|---|
| 07-14 15:38 | Auto-update installed 26.707.9981.0 |
| 07-14 15:43 → 07-15 15:51 | App used normally, long sessions, no launch crashes |
| 07-15 15:51:12–13 | Desktop log: [statsig-refresh-diagnostics] refresh started (trigger=interval)values updated hasValues=truerefresh finished success=truelog ends this same second, process dies mid-session |
| 07-15 15:51 → now | Every launch: window appears, renderer mounts routes, then browser process crashes ~3–10 s in. 8+ consecutive crashes observed, incl. after a full OS reboot. Crashpad writes a dump each time. |

Crash analysis (from Crashpad minidump)

Dump: %LOCALAPPDATA%\Packages\OpenAI.Codex_2p2nqsd0c76g0\LocalCache\Roaming\Codex\web\Codex\Crashpad\reports\b518681a-9e2f-4e26-ba7c-b14676b85d7d.dmp (I can provide it privately; ptype=browser)

  • Exception: 0xC06D007F (VC++ delay-load: procedure not found) in KERNELBASE.dll (RaiseException), thread 10424
  • DelayLoadInfo (decoded from the exception parameter):
  • szDll = node.exe
  • dlp.szProcName = napi_create_function
  • dwLastError = 127 (ERROR_PROC_NOT_FOUND)
  • hmodCur = base of ChatGPT.exe — i.e. the delay-load hook correctly redirected node.exe → host exe, but the export is missing
  • Host exe export table (app\ChatGPT.exe, machine=ARM64): only 2 exportsGetHandleVerifier, IsSandboxedProcess. Zero napi_* exports. Any NAPI native addon that delay-loads against node.exe will therefore crash in this build.
  • NAPI addon loaded at crash time (present in the dump's module list):

app\resources\app.asar.unpacked\node_modules\@worklouder\device-kit-oai\node_modules\@worklouder\wl-device-kit\node_modules\serialport\node_modules\@serialport\bindings-cpp\prebuilds\win32-arm64\node.napi.node

Why I believe a server-side flag flip is the trigger

  • The binary (with the missing exports and the bundled serialport prebuild) was installed 24 h before the first crash and worked fine.
  • The mid-session crash coincides to the second with a successful statsig values refresh (see desktop log codex-desktop-e9c02e14-…-t0-….log, 15:51:12.645–15:51:13.039).
  • Every startup since then crashes a couple of seconds after [statsig-refresh-diagnostics] ready provider mounted (cached values), with the same dump signature.
  • Nothing else on the machine changed at that moment (no Windows update, no app update, no reboot).

Expected behavior

Either ChatGPT.exe (ARM64) should export the Node-API symbols so bundled NAPI addons can bind, or the device-kit/serialport code path should not be enabled (or should fail gracefully) on builds whose host exe lacks the exports.

Suggested immediate mitigation on your side

Revert/limit the feature flag for win32-arm64 desktop clients — the crash loop currently makes the app completely unusable on this platform (crash telemetry should be visible in Sentry; crashpad uploads were succeeding from this machine).

Workarounds tried

  • OS reboot — no change (cached flag re-triggers the crash)
  • Reinstall/repair is pointless per the analysis above (bug is in the signed package binary + server-side flag)
  • Codex CLI (codex.exe app-server, 0.144.2) still works fine — backend is unaffected; only the Electron main process crashes.

Logs available on request

  • Desktop logs: %LOCALAPPDATA%\Packages\OpenAI.Codex_2p2nqsd0c76g0\LocalCache\Local\Codex\Logs\2026\07\15\*.log (crashing launches all end abruptly right after startup; the 15:51 session ends at the statsig refresh)
  • Crashpad dump (44 MB) as above
  • app-server SQLite logs (~/.codex/logs_2.sqlite) — backend healthy until killed, each crashed launch shows a 5–30 s backend lifetime

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗