Conversation
This was referenced Apr 25, 2026
viyatb-oai
approved these changes
Apr 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Windows can represent the same canonical local path with either a normal drive path or a verbatim device path prefix. The failure pattern that motivated this PR was an assertion diff like
C:\...versus\\?\C:\...: different spellings, same file.That became visible while validating the permissions stack above this PR. The stack increasingly routes paths through
AbsolutePathBuf, which normalizes supported Windows device prefixes, while several existing tests still built expected values directly withstd::fs::canonicalize()or comparedAbsolutePathBuf::as_path()to a rawPathBuf. On Windows, that can make tests fail because the two sides choose different textual forms for an otherwise equivalent canonical path.This PR is intentionally split out as the bottom PR below #19606. The runtime permissions migration should not carry unrelated Windows test stabilization, and reviewers should be able to verify this as a test-only change before looking at the larger permissions changes.
Failure Modes Covered
conversation_summaryexpected rollout paths were built from raw canonicalizedPathBufs, while app-server responses could carryAbsolutePathBuf-normalized paths.thread_resumecompared returned thread paths directly to previously stored or fixture paths, so a verbatim-prefix spelling could fail an otherwise correct resume.marketplace_addcompared plugin install roots throughas_path()against raw canonicalized paths, reproducing the sameC:\...versus\\?\C:\...mismatch in both app-server and core-plugin coverage.What Changed
app-server/tests/suite/conversation_summary.rs, normalize both expected rollout paths and receivedConversationSummary.pathvalues throughAbsolutePathBufbefore comparing the full summary object.app-server/tests/suite/v2/thread_resume.rs, normalize both sides of thread path comparisons before asserting equality. This keeps the tests focused on whether resume returned the same existing path, not whether Windows used the same string spelling.app-server/tests/suite/v2/marketplace_add.rsandcore-plugins/src/marketplace_add.rs, compare install roots asAbsolutePathBufvalues instead of comparing an absolute-path wrapper to a raw canonicalizedPathBuf.Behavior
This PR does not change production app-server or marketplace behavior. It only changes tests to assert semantic path identity across Windows path spelling variants. It also leaves API response values untouched; the normalization happens inside assertions only.
Verification
Targeted local checks run while extracting this fix:
cargo test -p codex-app-server get_conversation_summary_by_thread_id_reads_rolloutcargo test -p codex-app-server get_conversation_summary_by_relative_rollout_path_resolves_from_codex_homecargo test -p codex-app-server thread_resume_prefers_path_over_thread_idWindows-specific confidence comes from the Bazel Windows CI job for this PR, since the failure is platform-specific.
Docs
No docs update is needed because this is test-only infrastructure stabilization.
Stack created with Sapling. Best reviewed with ReviewStack.