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
CLI binary releases not notarized — blocks Homebrew Cask distribution #23366
The codex CLI macOS binaries in GitHub releases are code-signed with Developer ID (OpenAI OpCo, LLC / 2DC432GLL2) but not notarized with Apple.
$ codesign -vvv codex-aarch64-apple-darwin
codex-aarch64-apple-darwin: valid on disk
codex-aarch64-apple-darwin: satisfies its Designated Requirement
$ spctl --assess --verbose=4 codex-aarch64-apple-darwin
codex-aarch64-apple-darwin: rejected
source=Unnotarized Developer ID
This blocks Homebrew Cask distribution — the tap requires all casks to be signed and notarized:
brew audit --cask codex:
Signature verification failed:
test-requirement: code failed to satisfy specified code requirement(s)
The homebrew/cask tap requires all casks to be signed and notarized by Apple.
A bit more diagnostic context that might help whoever picks this up: the regression appears to be specifically from the macOS release pipeline restructure between rust-v0.130.0 and rust-v0.131.0, not just a missed notarization step.
Evidence — signature diff between the two releases:
$ codesign -dvv codex-aarch64-apple-darwin # 0.130
Authority=Developer ID Application: OpenAI OpCo, LLC (2DC432GLL2)
Timestamp=9 May 2026 at 1:20:59 AM ← secure RFC 3161 timestamp from Apple TSA
Signature size=9053
$ codesign -dvv codex-aarch64-apple-darwin # 0.131
Authority=Developer ID Application: OpenAI OpCo, LLC (2DC432GLL2)
Signed Time=18 May 2026 at 8:43:53 PM ← local clock only, no Apple TSA
Signature size=4744
0.131 lost both the secure timestamp and the notarization, which is why spctl flipped from the lenient "the code is valid but does not seem to be an app" on 0.130 to "source=Unnotarized Developer ID" on 0.131 — and that's what the cask CI's signature_verification check rejects.
Pipeline change that caused it:
In 0.130, .github/workflows/rust-release.yml ran the macos-code-sign composite action in-CI, which does:
For 0.131, the pipeline was restructured into a two-phase build_unsigned → promote_signed flow (#22559, #22737, #22900) where macOS binaries are signed externally in a secure enclave and re-imported. The promote_signed path only verifies the imported signature — there's no xcrun notarytool submit in it:
Have the external signing service also notarize (and use --timestamp against Apple's TSA so the signature gets the secure RFC 3161 timestamp). This is the cleaner fix.
Or, add an xcrun notarytool submit --wait step in the promote_signed job after line 771 (the secrets APPLE_NOTARIZATION_* already exist and are wired up — they just aren't used in this code path).
Either restores parity with the 0.130 release flow and unblocks Homebrew/cask#264918.
cc @shijie-oai@bolinfest, flagging since you worked on the build_unsigned/promote_signed restructure (#22737, #22559, #22788, #22900). The notarization gap I described above appears to be a side-effect of that flow change.
Activity
github-actions commentedon May 18, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
ardasevinc commentedon May 19, 2026
oh boy, we need this fixed. switching to npm release for now
kim0 commentedon May 19, 2026
A bit more diagnostic context that might help whoever picks this up: the regression appears to be specifically from the macOS release pipeline restructure between
rust-v0.130.0andrust-v0.131.0, not just a missed notarization step.Evidence — signature diff between the two releases:
0.131 lost both the secure timestamp and the notarization, which is why
spctlflipped from the lenient "the code is valid but does not seem to be an app" on 0.130 to "source=Unnotarized Developer ID" on 0.131 — and that's what the cask CI'ssignature_verificationcheck rejects.Pipeline change that caused it:
In 0.130,
.github/workflows/rust-release.ymlran themacos-code-signcomposite action in-CI, which does:For 0.131, the pipeline was restructured into a two-phase
build_unsigned→promote_signedflow (#22559, #22737, #22900) where macOS binaries are signed externally in a secure enclave and re-imported. The promote_signed path only verifies the imported signature — there's noxcrun notarytool submitin it:https://github.com/openai/codex/blob/main/.github/workflows/rust-release.yml#L767-L771
Two ways to fix:
--timestampagainst Apple's TSA so the signature gets the secure RFC 3161 timestamp). This is the cleaner fix.xcrun notarytool submit --waitstep in thepromote_signedjob after line 771 (the secretsAPPLE_NOTARIZATION_*already exist and are wired up — they just aren't used in this code path).Either restores parity with the 0.130 release flow and unblocks Homebrew/cask#264918.
kim0 commentedon May 19, 2026
cc @shijie-oai @bolinfest, flagging since you worked on the build_unsigned/promote_signed restructure (#22737, #22559, #22788, #22900). The notarization gap I described above appears to be a side-effect of that flow change.
shijie-oai commentedon May 20, 2026
@kim0 132 mainline is out - this should reenable homebrew to pick our codex CLI now. Please let us know if there is any more issue at this point.
krehel commentedon May 20, 2026
Homebrew/homebrew-cask#265214 has been merged with version as
0.132.0- looks to be resolved.Thanks all! Appreciate the help!