Skip to content

fix(sessions): allow Windows snapshot publication and cleanup - #552

Merged
SaladDay merged 2 commits into
mainfrom
codex/issue542-windows-manifest
Nov 5, 2026
Merged

SaladDay merged 2 commits into
mainfrom
codex/issue542-windows-manifest

Conversation

@SaladDay

@SaladDay SaladDay commented Nov 5, 2026 •

Copy link
Copy Markdown
Owner

Windows session scans can fail to publish snapshots or retire cache directories because cc-switch still holds lock-file handles inside the directory being renamed.

Release those child handles while retaining the existing parent scope/root lock through the rename. This keeps active builders and readers protected and preserves atomic pointer publication. The change covers publishing, generation collection, and CLI/query namespace retirement; it does not change session scanning, parsing, or cache formats.

Extend the existing reader-lifetime test to check eventual generation retirement, add query-startup coverage for live versus abandoned namespaces, and run the full paged-manifest suite in the existing Windows CI job.

Validation:

  • 38 paged-manifest tests and 8 session-command tests passed locally in isolated directories.
  • cargo fmt --check and git diff --check passed.
  • cargo clippy --lib --no-default-features completed with existing warnings outside the changed lines.
  • Windows CI: all 38 paged-manifest tests passed, along with the default Windows CLI build check.
  • Rust CI: Linux library checks, 4,567 library unit tests (2 ignored), 10 binary tests, selected integration tests, and formatting passed.
  • A fresh independent blind review found no blocking issues; its isolated library-only manifest run also passed all 38 tests.

Closes #542

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

sessions: manifest publish always fails on Windows with "Access is denied (os error 5)" — directory rename blocked by own in-directory lock handles

1 participant