[app][macOS][26.810.52044] Hard crash loop after 151.0.7922.137 framework self-update: V8 OOM in reading_mode parse_distilled_html on every launch
Summary
After the desktop app self-updated at 14:11 local time today (Codex Framework 151.0.7922.76 → 151.0.7922.137, app version 26.810.52044 build 6662), it entered a hard crash loop on macOS: every launch aborts within ~60–90 seconds with a V8 heap OOM (SIGABRT) in the reading-mode HTML distillation parser. The app is unusable — 8 identical crashes today, across a fresh relaunch each time.
The same account state ran fine for ~1.5 hours on the previous framework earlier the same day, so this looks like a regression introduced by the .137 framework, not corrupted user data.
Environment
- macOS 15.x (Darwin 25.5.0), Apple Silicon
- ChatGPT desktop app
26.810.52044(build6662), bundlecom.openai.codex - Codex Framework
151.0.7922.137(self-updated 2026-08-16 14:11 local) - Previous framework
151.0.7922.76(installed 2026-08-12) — no crashes
Crash signature
Consistent across all 8 crash reports (EXC_CRASH / SIGABRT, faulting thread):
libsystem_kernel.dylib __pthread_kill
libsystem_pthread.dylib pthread_kill
libsystem_c.dylib abort
Codex Framework node::OOMErrorHandler(char const*, v8::OOMDetails const&)
Codex Framework reading_mode$cxxbridge1$194$parse_distilled_html
Codex Framework reading_mode$cxxbridge1$194$parse_distilled_html
Codex Framework v8::CppHeap::CollectGarbageInYoungGenerationForTesting(cppgc::EmbedderStackState)
...
Codex Framework node::WorkerThreadsTaskRunner::WorkerThreadsTaskRunner(...)
Node OOM → abort() in the embedded Node/V8 layer while reading_mode … parse_distilled_html is on the stack.
Timeline (all times local, 2026-08-16)
| Time | Event |
|---|---|
| 12:28 | App launch on framework .76-era build; resumes last thread normally; runs ~1.5 h without issues |
| 14:11:24 | App bundle self-updates; Frameworks/Codex Framework.framework/Versions/ now contains only 151.0.7922.137 |
| 14:12:45 | First crash |
| 14:12–14:18 | 5 crashes in 6 minutes (relaunch loop), then process stays down |
| 14:27, 14:29, 14:34 | Manual relaunches; identical crash each time |
What I ruled out (all checked before filing)
- Local session stub: the thread the app resumes at startup (
thread/resumein logs) has only a 42 KB local rollout.jsonl. Quarantining it (moving it out of~/.codex/sessions/) does not stop the crash — the parsed content appears to come from the server-side thread state. - Browser partition state:
Partitions/codex-browser-apphad no writes in the hours before the first crash;Session Storageis ~24 KB; IndexedDB ~16 KB. Clearing candidates found nothing to clear. - Profile / window-restore state: the resumed conversation ID appears nowhere under
Application Support/Codex/Default,Local State, orSaved Application State. - Stale processes: killed a leftover
codex_chroniclefrom a crashed instance that was holding the app-server sidecar lock (log:Waiting to acquire lock (owned by pid=…)), which had the app'sIpcRouterre-spawning every ~150 ms (220+ per-thread log files within one minute of launch). Cleaning this up did not affect the crash either.
Additional observations
- During the lock contention described above, one instance created 220+ thread log files in under a minute (
~/Library/Logs/com.openai.codex/.../...-t0through-t221), all butt0empty. Possibly a secondary bug worth a look: the sidecar lock holder from a crashed instance is never reaped, and the new instance thrashes instead of failing over. - Possibly related existing reports: #33582 (memory grows to 55 GB), #32769 (crash when starting a new task) — but those predate
.137; this one is a hard startup loop that began at the minute of the framework update.
Expected behavior
If reading-mode distillation of a restored thread's content exceeds the heap, the app should skip/fail that one parse (poison-pill handling) instead of aborting the whole process — the current behavior makes the app permanently unusable with no user-visible error and no way to recover from inside the app.
Ask
- Poison-pill handling around
parse_distilled_html(bound the input size or catch the OOM path). - A way to launch without resuming the previous thread (safe-mode flag), so users can recover without filesystem surgery.
Happy to provide the full .ips crash reports or run a debug build — the crash reproduces 100% on this machine.
4 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Same here — identical crash loop on my machine today.
## Environment
26.810.52044(build6662), bundlecom.openai.codex151.0.7922.137## Crash signature (identical, 20+ occurrences today)
abort
node::OOMErrorHandler(char const*, v8::OOMDetails const&)
reading_mode$cxxbridge1$194$parse_distilled_html
reading_mode$cxxbridge1$194$parse_distilled_html
v8::CppHeap::CollectGarbageInYoungGenerationForTesting(...)
Faulting thread alternates between
V8Workerandcomputer-use. Every instanceaborts ~2 minutes after launch. The app was fine before today — the crash loop
started 2026-08-16, matching the reporter's timeline.
## What I ruled out (same conclusion: server-side content)
Cache,Code Cache,Local Storage,Session Storagein bothDefaultandPartitions/codex-browser-app: no effect~/.codex(logged out) → stable 4+ minutes. Any configuration with the account logged in → crash within ~2 minutes, even with~/.codexstrippedto just
auth.json+config.tomllogin
NODE_OPTIONSdoes not help — the OOM happens in a Node worker thread with its ownresourceLimitsI have 20+ from today alone.
+1 on the asks: poison-pill handling around
parse_distilled_html, and asafe-mode launch flag that skips resuming the previous thread.
Confirming this is still live on a newer framework and app build — crash loop started here today, minutes after a framework self-update.
Environment
26.818.41705(build6971), bundlecom.openai.codex151.0.7922.170— self-updated 2026-08-22 ~04:37 local (BST).Frameworks/Codex Framework.framework/Versions/contains only.170.Timeline (all local, 2026-08-22)
| Time | Event |
| --- | --- |
| 04:37–04:47 | Framework self-update to
151.0.7922.170|| 09:08, 09:43, 10:22, 11:32 | 4 crashes, all identical signature |
Zero ChatGPT crash reports on this machine before today.
Crash signature (all 4 reports)
EXC_CRASH / SIGABRT,abort()from the app itself. Faulting thread iscomputer-usein 3 reports andV8Workerin 1 — matching the reporter and @meet-cjli:One nuance: the 09:43 report has the same
parse_distilled_htmlframes and the samecomputer-usethread but noOOMErrorHandlerframe near the top — same path, possibly a slightly different failure mode within it.Not system memory pressure here either — machine had free pages at crash time; this is the V8 heap limit inside the worker, as @meet-cjli characterized.
So: whatever regressed in
.137is still present in.170, on the current public app build. Happy to attach the full.ipsfiles if useful.Follow-up bisect data point from the same machine as my comment above: the ChatGPT Classic app is stable on the same account.
/Applications/ChatGPT Classic.app— bundlecom.openai.chat, version1.2026.184(build1784145287)Combined with @meet-cjli's logged-out-stability result, this narrows it further: the account's server-side state isn't inherently toxic — the content only aborts the process when the unified app's Codex Framework reading-mode pipeline parses it. Classic (which never had that pipeline) is unaffected.
Also noting for other affected users landing here: Classic appears to still be obtainable and works as a chat-only stopgap until the framework fix ships.