Windows: running thread resume rejects same rollout path when one side uses \\?\ prefix

Open 💬 2 comments Opened May 27, 2026 by haowenGuo
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

Summary

On Windows, creating or resuming work against an already-running thread can fail with a stale-path error even when the requested rollout file and the active rollout file are the same file.

Observed error:

cannot resume running thread 019e6296-8510-7243-8d00-c899d5139d9e with stale path: requested `C:\Users\Lenovo\.codex\sessions\2026\05\26\rollout-2026-05-26T12-41-37-019e6296-8510-7243-8d00-c899d5139d9e.jsonl`, active `\\?\C:\Users\Lenovo\.codex\sessions\2026\05\26\rollout-2026-05-26T12-41-37-019e6296-8510-7243-8d00-c899d5139d9e.jsonl`

The two paths refer to the same file. The only difference is Windows' verbatim / extended-length path prefix (\\?\).

Impact

This can leave Codex Desktop unable to create tasks or resume a running thread. It can happen repeatedly if persisted thread metadata and the active running-thread path use different Windows path representations.

Likely cause

thread_processor.rs compares params.path and the active running-thread rollout path with direct PathBuf equality before rejoining a running thread. On Windows, direct equality treats C:\... and \\?\C:\... as different even when they identify the same file.

Expected behavior

The stale-path check should compare normalized paths, so Windows verbatim and non-verbatim equivalents are accepted while genuinely stale or different rollout files are still rejected.

View original on GitHub ↗

2 Comments

github-actions[bot] contributor · 3 months ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #23803
  • #23311
  • #24338
  • #24178
  • #23900

Powered by Codex Action

haowenGuo · 3 months ago

I have a small reference patch prepared here:

The patch changes the running-thread resume stale-path guard from direct PathBuf equality to path_utils::paths_match_after_normalization, and adds a Windows regression test for C:\... vs \\?\C:\... rollout path equivalents.

Validation performed locally:

  • git diff --check
  • cargo +stable fmt --check

The focused Rust test was also attempted, but dependency fetch/build did not complete in the local environment within the available time.