github Yeachan-Heo/oh-my-codex v0.21.31

5 hours ago

oh-my-codex v0.21.31

0.21.31 is a patch release for setup symlink safety and dispatch reliability improvements (14 files, +761/−79; PR #3881 and #3886).

Highlights

  • Setup symlink destination refusal (#3881): The omx setup command now detects and rejects symlinked managed destinations (including dangling links) before reading, backing up, or writing. This prevents scenarios where a committed .gitignore or prompt path symlink could cause ensureBackup to overwrite files outside the repository. The check validates every path component without following symlinks, not just the leaf destination, preventing writes through symlinked ancestor directories. The check is applied to all write paths: .gitignore, native agent TOMLs and manifest, HUD config, and skill receipt. This is a behavioral change: setup now fails closed on symlinked managed destinations.

  • Dispatch message reliability (#3886): Fixed mailbox dispatch enqueue-barrier sequencing to guarantee message ordering under concurrent worker acknowledgements. Dispatch now re-validates monitor state inside the barrier to prevent stale wakes, and correctly acknowledges notifications to prevent repeated reschedules. The fix applies to all dispatch paths that interact with the mailbox monitor.

Compatibility

  • No breaking API changes; setup security and dispatch reliability improvements only.
  • Existing sessions remain unaffected unless they have symlinked managed destinations (which will now be rejected with a clear error message and workarounds).
  • Setup now fails fast on symlinked destinations instead of silently writing through them.
  • Dispatch reliability is transparent to callers; no changes needed to session code.

Known Gaps (tracked for v0.21.32)

Three setup.ts findings require path canonicalization improvements:

  • P1: CODEX_HOME authority root: When user-scope setup uses a supported CODEX_HOME outside the OS home directory, validation incorrectly anchors to homedir() instead of the configured Codex home. This is fixed in PR #3890 (fix/setup-scope-realpath-0.21.32).

  • P2: Symlinked parent paths: When an ancestor of the scope root is a symlink, the destination is not canonicalized before comparison, causing rejection in valid symlinked-parent environments. This is fixed in PR #3890.

  • P2: OMX_ROOT override validation: When OMX_ROOT or OMX_STATE_ROOT points outside the repository, runtime directory validation incorrectly uses projectRoot as the authority. This is fixed in PR #3890.

Validation

  • Pinned release candidate passed latest-per-name release CI with all required checks green (verified at 19:57Z on 2026-10-22).
  • Release branch CI passed with all required checks green.
  • All Codex code review findings documented above for v0.21.32 follow-up.
  • Local gates pass: build, typecheck, and lint.

Merged PR inventory

PR Author Title
#3881 @shenyankm fix(setup): refuse symlinked managed destinations
#3886 @Yeachan-Heo fix(team): dispatch message ordering and stale wake prevention

Contributors

Thanks to @shenyankm, @Yeachan-Heo, and @claude Code for contributing to this release.

Full Changelog: v0.21.30...v0.21.31

—
[repo owner's gaebal-gajae (clawdbot) 🦞]

Don't miss a new oh-my-codex release

NewReleases is sending notifications on new releases.