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
[Bug]: Aside integration refuses a symlinked ~/.aside ("configured root is missing or is not a safe directory") #5648
On a machine where ~/.aside is a symlink to a relocated directory (e.g. an external volume after a home-folder migration), the Aside integration tab can't load profiles:
Aside 프로필을 불러오지 못했습니다. ... Aside profile: the configured root is missing or is not a safe directory.
asideHomeDir() (src/clients/config-export.ts) always returns join(home, ".aside") and ignores its _env parameter, so there is no way to point opencodex at the real location. readProfiles() (src/clients/aside-profiles.ts) then lstats that path and refuses it because it is a symbolic link.
Aside itself works normally through the symlink. The account manifest, u/0/ and models.json under the real directory are all regular files and directories.
Expected: a user-created alias above the Aside root is accepted. The comment in boundary() already says "Aliases ABOVE the chosen root (notably macOS /var) are valid". Only links at or below the root should be refused.
The error above appears and "Sync all profiles" / "Sync now" are disabled (0 of 0 applied).
Suggested fix
Either of these would work:
Resolve only the top-level ~/.aside alias in asideHomeDir() when it is a symlink to a directory, and keep all existing link/identity checks for u/, u/<id> and models.json. I verified this locally:
exportfunctionasideHomeDir(_env=process.env,home=homedir()): string{constroot=join(home,".aside");try{if(lstatSync(root).isSymbolicLink()&&statSync(root).isDirectory())returnrealpathSync.native(root);}catch{/* fall through */}returnroot;}
With this patch, listAsideProfiles() returns the current account, and the dashboard lists the profile and can sync it.
Or honor an explicit override (e.g. ASIDE_HOME / an asideRoot config key) via the currently unused _env parameter.
Version
@bitkyc08/opencodex 2.63.0
Operating system
macOS 26.6.2 (Apple Silicon)
Logs or error output
Aside profile: the configured root is missing or is not a safe directory.
Checks
I searched existing issues and documentation.
I removed secrets, tokens, account details, request credentials, and personal data.
Confirmed on current dev. asideHomeDir() still returns the literal ~/.aside, and readProfiles() rejects that path when its leaf itself is a symlink. The safe fix is narrower than permitting links inside the profile tree: canonicalize only the top-level .aside alias once, require its resolved target to be a directory, then continue using the existing manifest, u/, account-directory, leaf-link, inode, and pre-mutation recheck boundaries against that canonical root. A regression must prove a relocated root works while linked u/, account, and models.json components remain rejected. This is a filesystem trust-boundary change, so it should stay open for a focused PR and maintainer review rather than applying the suggested snippet without those negative controls.
Fixed on dev by #5680 (squash-merged as aa2406b). A symlinked top-level ~/.aside is now followed once onto its directory. Links at or below the root (u/, account directories, models.json) are still refused.
Activity
Ingwannu commentedon Sep 23, 2026
Confirmed on current
dev.asideHomeDir()still returns the literal~/.aside, andreadProfiles()rejects that path when its leaf itself is a symlink. The safe fix is narrower than permitting links inside the profile tree: canonicalize only the top-level.asidealias once, require its resolved target to be a directory, then continue using the existing manifest,u/, account-directory, leaf-link, inode, and pre-mutation recheck boundaries against that canonical root. A regression must prove a relocated root works while linkedu/, account, andmodels.jsoncomponents remain rejected. This is a filesystem trust-boundary change, so it should stay open for a focused PR and maintainer review rather than applying the suggested snippet without those negative controls.fix(clients): accept a relocated Aside root behind a symlinked ~/.asi…
fix(clients): accept a relocated Aside root behind a symlinked ~/.asi…
fix(clients): accept a relocated Aside root behind a symlinked ~/.asi…
fix(codex): bundle lane D — Codex home and WSL runtime discovery, int…
lidge-jun commentedon Sep 23, 2026
Fixed on
devby #5680 (squash-merged as aa2406b). A symlinked top-level~/.asideis now followed once onto its directory. Links at or below the root (u/, account directories,models.json) are still refused.