Skip to content

[Windows Desktop 26.707.8479.0] New windows still fan out full conversation snapshots for every streaming thread #32722

Open

Description

@HyperSpAceBoy

Summary

The Microsoft Store Windows desktop package OpenAI.Codex_26.707.8479.0 still ships the unbounded connected-client snapshot fan-out described in #20781.

When a new desktop client/window connects, the production bundle iterates every entry in streamingConversations and calls broadcastConversationSnapshot. Each snapshot contains the complete in-memory conversationState, including loaded turn history. With large resident threads, opening an otherwise empty window can therefore serialize and broadcast unrelated multi-hundred-megabyte conversation state, producing large app-server CPU/memory bursts and whole-system pointer/UI stalls.

This report confirms that the same mechanism remains in a current Windows desktop build after the July 2026 desktop integration update. It is not a Git indexing report, and it intentionally keeps the separate per-thread MCP lifecycle issue out of scope.

Environment

  • OS: Windows 11 x64
  • Surface: Codex inside the Microsoft Store ChatGPT/Codex desktop app
  • Package: OpenAI.Codex_26.707.8479.0_x64__2p2nqsd0c76g0
  • Bundled app-server reported at startup: 0.144.2
  • Verification date: 2026-07-13
  • Workload: multiple local Codex threads/windows, including very large completed histories

Current production-bundle evidence

Read-only inspection of the installed app.asar shows the connected-client branch is still effectively:

handleClientStatusChanged({ status }) {
  if (status === "connected") {
    for (const conversationId of this.streamingConversations) {
      this.broadcastConversationSnapshot(conversationId);
    }
    return;
  }
}

The snapshot path still dispatches the full state:

change: {
  type: "snapshot",
  revision,
  conversationState
}

There is no selected-thread filter, completed-thread exclusion, turn-count/byte gate, lazy hydration boundary, or backpressure around this branch.

The bundle does contain a 256 MiB IPC ceiling, but it is applied only after serializing the entire broadcast:

const serialized = JSON.stringify(message);
const payloadBytes = Buffer.byteLength(serialized, "utf8");
if (payloadBytes > 268435456) {
  // drop broadcast
}

That is not an effective performance bound:

  1. The complete conversation state has already been constructed and JSON-serialized before the check.
  2. Payloads below 256 MiB, including the ~116 MiB frames already documented in VS Code Codex extension repeatedly broadcasts huge thread-stream-state-changed snapshots for completed long threads, causing extension-host/renderer CPU spikes #20781, are still sent in full.
  3. A dropped oversized broadcast can still incur the CPU, allocation, and copying cost that causes the input stall.

No Skipping large conversation snapshot broadcast or equivalent pre-serialization guard exists in this Windows build.

Sanitized measured reproduction from the same machine/build family

On the immediately preceding 26.707 Store build, with three large threads already resident:

  • rollout sizes were approximately 4.81 GiB, 1.905 GiB, and 0.135 GiB;
  • the newly opened blank task was approximately 0.002 GiB and was not the payload source;
  • opening the new window drove the shared app-server to approximately 624% CPU and 30.7 GiB working set;
  • after partial draining it was still approximately 360% CPU and 9.95 GiB working set;
  • live Git process count remained zero;
  • a later blank-window acceptance test still produced an approximately three-second pointer stall and grey renderer while about 89 GiB of system RAM remained free.

The current 26.707.8479.0 build was inspected rather than deliberately stress-reproduced again because the original path causes disruptive whole-system input stalls. The exact triggering fan-out and full-state serialization code remains present.

Steps to reproduce

  1. Keep several local Codex threads resident, including one or more large completed histories.
  2. Open a new Codex/ChatGPT desktop window or otherwise connect a new desktop client.
  3. Observe client-status-changed: connected.
  4. Observe a full thread-stream-state-changed snapshot for every conversation retained in streamingConversations, not only the selected thread.
  5. Measure app-server/renderer CPU, memory, IPC payload size, and pointer responsiveness.

The blank new thread itself may be tiny; the cost comes from unrelated state already resident in the shared app-server.

Expected behavior

A newly connected window should receive only the minimum state required to render its current route.

At minimum:

  • completed/inactive threads should not remain eligible for reconnect snapshot fan-out;
  • a new client should not receive complete snapshots for unrelated threads;
  • thread hydration should start from metadata plus a bounded recent tail;
  • older turns should load lazily/paginate on demand;
  • snapshot size/count limits must run before full JSON serialization;
  • oversized state should use a bounded/paginated protocol rather than build-and-drop;
  • patch updates should remain the normal steady-state path.

Requested regression coverage

Please add a test that:

  1. creates multiple conversations, including a completed large-history thread;
  2. connects a second client/window;
  3. asserts the second client does not receive full snapshots for unrelated/completed conversations;
  4. asserts CPU work and serialized bytes remain bounded independently of retained history size.

Related

Please publish the fixed desktop version in the changelog when this path is bounded. The generic phrase “additional performance improvements and bug fixes” does not let affected users know whether it is safe to remove local containment or retest giant histories.

Activity

  1. added
    bugSomething isn't working
    appIssues related to the Codex desktop app
    windows-osIssues related to Codex on Windows systems
    app-serverIssues involving app server protocol or interfaces
    on Jul 13, 2026
  2. github-actions commented on Jul 13, 2026

    @github-actions
    Contributor
  3. HyperSpAceBoy commented on Jul 13, 2026

    @HyperSpAceBoy
    Author

    Confirmed relationship: #20781 describes the same unsafe full-state snapshot mechanism.

    This issue is intentionally a current-build Windows Desktop regression reproduction, not a claim that the underlying mechanism is unrelated.

    The additional coverage here is specific and current:

    • Microsoft Store Windows package 26.707.8479.0
    • bundled app-server 0.144.2
    • deterministic trigger: connect/open an otherwise empty new Desktop window
    • the production bundle still iterates every streamingConversations entry and sends a full conversationState snapshot
    • the 256 MiB frame ceiling is still checked only after JSON.stringify, so it does not bound serialization cost
    • measured app-server burst: 624.4% CPU and 30.7 GB working set
    • Git process count remained zero during the reproduction

    #20781 remains open and, as of this verification, has no assignee, milestone, linked fix, or changelog entry announcing a fix.

    Please either retain this issue as Windows Desktop regression coverage or merge/cross-link it into #20781. In either case, this behavior must not be treated as fixed merely because the older report exists.

  4. TheWickie commented on Jul 28, 2026

    @TheWickie

    I can independently reproduce a catastrophic variant of this on a newer Windows package.

    Environment

    • OS: Windows 10 x64, build 19045
    • Codex package observed in Windows Event Log: OpenAI.Codex_26.721.4979.0_x64__2p2nqsd0c76g0
    • Integrated desktop package: OpenAI.ChatGPT-Desktop_1.2026.190.0_x64__2p2nqsd0c76g0
    • Surface: new Codex experience integrated into the ChatGPT Windows desktop app
    • Trigger context: connecting from the ChatGPT mobile app to a desktop Codex project containing an exceptionally large, long-lived, tool-heavy thread
    • Workload: a large reverse-engineering/deconstruction project involving 1988 Motorola 68000 code, with extensive accumulated analysis and tool history

    User-visible result

    While accessing the large desktop Codex thread from mobile, the Windows PC became progressively unresponsive and eventually froze completely. Memory pressure became so severe that Task Manager could not be opened. A manual hardware reset was required. This has recurred with the same workflow.

    Correlated Windows Event Log timeline (local BST)

    • Earlier clean restart completed at approximately 20:33.
    • Codex package activated at approximately 20:36.
    • 01:39: Windows Application Popup reported Out of Virtual Memory.
    • 01:39: Chrome processes began crashing.
    • 01:42: Windows reported Virtual Memory Minimum Too Low and attempted to increase the paging file.
    • 01:42: four distinct git.exe processes crashed almost simultaneously (c00000fd), followed by additional Git failures later.
    • 01:48: ChatGPT.exe, Elgato components, and further Git processes failed.
    • 01:48: Everything reported Fatal error: out of memory ... error: 1455 (Windows commitment limit).
    • 01:53: Chrome hung.
    • Approximately 01:55: the unresponsive PC was manually reset.
    • Subsequent Kernel-Power 41 recorded BugcheckCode=0, consistent with the manual reset rather than a BSOD.

    The System and Application logs show system-wide committed virtual-memory exhaustion. There was no evidence of UnrealEditor.exe, UnrealEditor-Cmd.exe, ShaderCompileWorker, or another UE process running after the earlier clean restart. An Epic Launcher CrashReportClient hang occurred before that restart and was unrelated.

    The mobile connection plus exceptionally large resident thread make the full-conversation snapshot fan-out described here a strong match. The simultaneous Git failures may also intersect with the separate stale/repeated Git child-process reports, but they occurred after Windows had already announced memory exhaustion, so the logs do not establish Git as the initial allocator.

    Raw EVTX files are not attached publicly because they contain private account, machine, network, and device identifiers. Sanitized excerpts or the original logs can be provided through an appropriate private diagnostic channel if maintainers request them.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    appIssues related to the Codex desktop appapp-serverIssues involving app server protocol or interfacesbugSomething isn't workingperformancewindows-osIssues related to Codex on Windows systems

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions