Skip to content

Windows: Codex shadow home fails when state_5.sqlite-shm exists as a regular file #79

Open

Description

@chrisohearn

On Windows (REVO-VM-008, T3 0.1.10-nightly.20261112.4564), every Codex provider instance fails to start a run:

Cannot create Codex shadow home entry 'state_5.sqlite-shm' because
'C:\Users\ChrisO'Hearn\.t3\userdata\providers\codex\<instance>\shadow\state_5.sqlite-shm'
already exists and is not a symlink.

Seen on 2026-11-13 around 01:20 UTC on both codex_0aca91ff-… (ChatGPT - Pro) and codex_4ce8319d-… (ChatGPT - Revotech). With Claude also signed out on that machine, no provider can run there.

Likely cause: SQLite created state_5.sqlite-shm (and probably -wal) inside the shadow home as regular files, while the shadow-home builder expects every entry to be a symlink to the real ~/.codex and refuses to overwrite.

Suggested fix: skip SQLite sidecar files (*-shm, *-wal, *-journal) when linking the shadow home, or replace them when the main database file is a link. On Windows, also handle the case where symlink creation falls back to a copy.

🤖 Generated with Claude Code

Activity

  1. chrisohearn commented on Nov 13, 2026

    @chrisohearn
    OwnerAuthor

    Status: still valid, unfixed. No PR touches the Codex shadow-home builder yet. Related ledger row: fleet/windows-vm-agents (it links this issue; waiting on Claude sign-in on REVO-VM-008).

    Triage by the round-four GitHub hygiene pass (ledger key r4/w7-github), 2026-11-13. Left open.

  2. chrisohearn commented on Nov 13, 2026

    @chrisohearn
    OwnerAuthor

    Cause (inferred; not reproduced on Windows). The shadow home links state_5.sqlite and the other top-level databases into the real .codex. SQLite's POSIX VFS resolves a symlinked database path before naming -wal/-shm, so on Linux and macOS those files land beside the real database. The Windows VFS does not resolve the link, so Codex created regular -wal/-shm files inside the shadow directory. The next shadow-home build refused them. The regular files also meant each shadow home had its own WAL for a database it shares with the real home, which is a corruption risk.

    Fix: #98.

    • Codex launches with a shadow home now get CODEX_SQLITE_HOME=<real home>, so the databases and their sidecars live in the real home. On codex 0.167.2 this moves every top-level *.sqlite.
    • The builder no longer links sidecars and never fails on them:
      • It removes sidecar links and empty leftovers.
      • It moves leftovers that hold WAL data aside as .stale-<ms>, without deleting them.
      • If a file can't be removed or renamed, it logs a warning and continues.

    The post-deploy check is Aorka script 23035, with the new expected output given in the PR body.

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions