You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Session paths split by casing on case-insensitive macOS volumes #44014
On the default case-insensitive macOS filesystem, the same directory can be opened with different component casing. realPath preserves the caller spelling, so OpenCode stores separate Location keys and exact directory filters can hide existing sessions.
Plugins
None
OpenCode version
V2 at 2c8e2a2b2
Steps to reproduce
Create /tmp/Academic/Project on a case-insensitive APFS volume.
Create a session using /tmp/academic/project.
List sessions using /tmp/Academic/Project.
The created session is missing because the stored path uses the caller casing.
Thanks for the report, I was able to reproduce this.
I didn't have macOS, so I used a case-insensitive FAT volume on Linux as a stand-in for case-insensitive APFS:
Created /mnt/ci44014/Academic/Project.
Created a session through POST /api/session with location.directory set to /mnt/ci44014/academic/project. It is stored with that exact casing.
GET /api/session?directory=/mnt/ci44014/academic/project returned the session, but GET /api/session?directory=/mnt/ci44014/Academic/Project returned {"data":[]}.
This happens on 2.2.0 and still happens on the latest dev (a882cf98a). The script below reproduces it.
Activity
iBobik commentedon Sep 16, 2026
Related end-user workaround for macOS-hosted Docker devcontainers using virtiofs:
Until paths are canonicalized centrally, deny known wrong-case paths for every filesystem-capable tool, including
glob:{ "permission": { "read": { "*": "allow", "app/App.vue": "deny" }, "edit": { "*": "allow", "app/App.vue": "deny" }, "glob": { "*": "allow", "*App.vue*": "deny" }, "bash": { "*": "allow", "*app/App.vue*": "deny" } } }Adapt the path to the canonical casing in your repository. Also instruct agents to use casing exactly as returned by Git.
If the duplicate entry already exists:
Do not run
rmagainst the wrong-case alias inside the container. On a case-insensitive host, that may delete the real file.iBobik commentedon Sep 17, 2026
It was happening again, this seems solved it:
opencodejr commentedon Oct 28, 2026
Thanks for the report, I was able to reproduce this.
I didn't have macOS, so I used a case-insensitive FAT volume on Linux as a stand-in for case-insensitive APFS:
/mnt/ci44014/Academic/Project.POST /api/sessionwithlocation.directoryset to/mnt/ci44014/academic/project. It is stored with that exact casing.GET /api/session?directory=/mnt/ci44014/academic/projectreturned the session, butGET /api/session?directory=/mnt/ci44014/Academic/Projectreturned{"data":[]}.This happens on 2.2.0 and still happens on the latest
dev(a882cf98a). The script below reproduces it.Related issues, most closely related first:
Reproduction script (repro.sh)
Run it:
bash repro.sh