I can confirm this issue on Windows, with an additional sidecar-only variant that may be relevant to the proposed fix in #7201.
Environment
- T3 Code Nightly:
0.0.34-nightly.20260820.1141 - Codex CLI:
0.148.0 - OS: Windows 11 Pro, version
10.0.26200, x64 - Provider setup: two Codex provider instances using one shared home and a separate shadow home for the second account
- Authentication: ChatGPT subscription authentication
- The default Codex provider remains usable, but the shadow-home provider is disabled
Sanitized configuration:
| 1 | { |
| 2 | "driver": "codex", |
| 3 | "enabled": true, |
| 4 | "config": { |
| 5 | "homePath": "C:\\Users\\<user>\\.codex", |
| 6 | "shadowHomePath": "C:\\Users\\<user>\\.codex_p" |
| 7 | } |
| 8 | } |
Observed behavior
This has recurred across several recent T3 Code Nightly and Codex updates.
On startup or provider refresh, the secondary Codex provider is disabled during materializeCodexShadowHome. T3 encounters a regular SQLite runtime sidecar in the shadow home where it expects a symbolic link, then aborts provider creation.
Exact error
| 1 | Driver 'codex' failed to create instance: |
| 2 | Cannot create Codex shadow home entry 'logs_2.sqlite-shm' |
| 3 | because 'C:\Users\<user>\.codex_p\logs_2.sqlite-shm' |
| 4 | already exists and is not a symlink. |
The corresponding server trace reports:
| 1 | CodexShadowHomeEntryConflictError: |
| 2 | Cannot create Codex shadow home entry 'logs_2.sqlite-shm' |
| 3 | because 'C:\Users\<user>\.codex_p\logs_2.sqlite-shm' |
| 4 | already exists and is not a symlink. |
| 5 | |
| 6 | at CodexHomeLayout.ensureSymlink |
| 7 | at materializeCodexShadowHome |
Previous occurrences on the same machine failed on other members of the same class of runtime files:
| 1 | memories_1.sqlite-shm |
| 2 | queue_1.sqlite |
| 3 | logs_2.sqlite-shm |
Because materialization stops at the first conflict, the filename displayed by T3 does not represent the complete set of conflicting entries.
Shadow-home state at failure time
A complete inspection of the shadow-home root found eight regular SQLite sidecar files:
| Shadow-home entry | Type | Size |
|---|---|---|
logs_2.sqlite-shm | regular file | 32,768 bytes |
logs_2.sqlite-wal | regular file | 4,466,112 bytes |
memories_1.sqlite-shm | regular file | 32,768 bytes |
memories_1.sqlite-wal | regular file | 4,152 bytes |
queue_1.sqlite-shm | regular file | 32,768 bytes |
queue_1.sqlite-wal | regular file | 4,152 bytes |
state_5.sqlite-shm | regular file | 32,768 bytes |
state_5.sqlite-wal | regular file | 16,512 bytes |
The problem was therefore not limited to queue_1.sqlite.
Importantly, the corresponding base database entries were still symbolic links to the shared Codex home:
| 1 | logs_2.sqlite -> <shared-home>\logs_2.sqlite |
| 2 | memories_1.sqlite -> <shared-home>\memories_1.sqlite |
| 3 | queue_1.sqlite -> <shared-home>\queue_1.sqlite |
| 4 | state_5.sqlite -> <shared-home>\state_5.sqlite |
In this occurrence, the divergence was specifically:
| 1 | base .sqlite file: symbolic link |
| 2 | -wal sidecar: regular shadow-local file |
| 3 | -shm sidecar: regular shadow-local file |
This is slightly different from the original #5817 reproduction, where the shadow base database itself is described as becoming a regular file.
Recurrence evidence
Retained local logs show repeated failures on at least two consecutive days:
- August 19: repeated provider-creation failures on
memories_1.sqlite-shm - August 20: repeated provider-creation failures on
logs_2.sqlite-shm - An earlier retained error also references
queue_1.sqlite
The problem has returned after multiple manual recoveries and subsequent updates or restarts. It is not an isolated stale file left by a single interrupted process.
Different SQLite families become affected at different times. Some sidecars already existed from the previous day, while others were created or rewritten during the next T3/Codex run.
Impact
- The complete secondary Codex provider is marked disabled.
- Provider creation fails before the account can be used.
- The provider remains unavailable across refreshes and restarts.
- The first conflicting filename changes between occurrences.
- Removing only the filename shown in the UI is insufficient because additional regular sidecars may remain.
- The default provider and shared Codex home continue to work.
- The secondary account authentication file remains valid.
- The failure occurs during shadow-home materialization, before normal provider use.
Recovery confirmation
For diagnostic purposes, I backed up and moved all eight regular *.sqlite-wal and *.sqlite-shm files out of the shadow home. I did not modify the private auth.json or models_cache.json files.
I then disabled and re-enabled only the affected provider instance.
After rematerialization:
| 1 | materializeCodexShadowHome: Success |
| 2 | provider enabled: true |
| 3 | provider status: ready |
| 4 | authentication status: authenticated |
| 5 | SQLite sidecar symlinks: 10 |
| 6 | regular conflicting sidecars: 0 |
This immediately restored the provider, confirming that the regular SQLite sidecars directly caused provider creation to fail.
However, the same class of conflict has returned after later updates or runs, so this procedure is only a temporary recovery.
Relation to PR #7201
PR #7201 appears to target the same underlying class of failure:
https://github.com/pingdotgg/t3code/pull/7201
Its stated goal—keeping newly created Codex SQLite state shadow-local and treating a base database plus its WAL/SHM sidecars as one family—matches the recurring behavior observed here.
However, my captured state includes a sidecar-only divergence: the shadow base .sqlite entry remained a symbolic link while its -wal and -shm entries were regular files.
The PR description and diff appear to select shadow-local ownership when the shadow base database is already a regular file. I cannot confirm whether it also covers the observed case where only the WAL/SHM members have become regular files.
This Windows reproduction may therefore be useful for validating #7201 against both forms:
- A regular shadow base database plus its sidecars.
- A symlinked shadow base database with regular shadow WAL/SHM sidecars.
I am not proposing a separate implementation here. I am documenting the additional observed state so that the existing fix can be evaluated against the complete failure mode.