Repository navigation
[Bug][2.36.0][Codex App] Plus account loses GPT-5.6 models; downgrade to 2.35.0 restores them #3022
Description
Activity
coderabbitai commented
on Aug 30, 2026 coderabbitaiboton Aug 30, 2026 – with coderabbitaiContributorMore actions⚠️ Possible Duplicate Issue(s)
📝 Issue Planner
Check the box below or use the
@coderabbitai plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.- Create Plan
🧪 Issue enrichment is currently in open beta.
To disable automatic issue enrichment, add the following to your
.coderabbit.yaml:issue_enrichment: auto_enrich: enabled: false
💬 Have feedback or questions? Drop into our discord!
- addedbugSomething isn't workingSomething isn't workingcatalogModel catalog, slugs, visibility, routed entriesModel catalog, slugs, visibility, routed entriesinstallInstallation or packagingInstallation or packaging
on Aug 30, 2026 github-actions commented
on Aug 30, 2026 on Aug 30, 2026 – with GitHub ActionsContributorMore actionsIssue reopened
The report now contains the information required by the automated check. Thanks for updating it.
리뷰 · 우선순위 78 / 80
이 이슈는 지금
devHEAD870a2adb6(패키지 2.37.0)에도 그대로 열려 있다. 그리고 형태가 나쁘다. 2.35.0에서 되고 2.36.0에서 안 되고 내리면 다시 되는 A/B는 추측이 아니라 경계 재현이고, 이미 배포된 버전에서 Plus 계정이 값을 잃는 길이다. 내가 소스에서 확인한 결과 원인은 짚어낼 수 있었다.당신이 지목한 영역이 맞다. 2.35.0과 2.36.0 사이에 들어간 것은 #2891(
c3da277bc)이고, 그게 엔타이틀먼트 로스터를 요청하는client_version을 바꿨다. 아이러니는 그 커밋의 목적이 바로 이 증상을 고치는 것이었다는 점이다. #2886에서 GPT-5.6이 사라진 원인이 로스터를client_version=0.0.0으로 물어본 것이었고, 업스트림이 그 버전으로 필터해서 빈 답을 줬고, #2550의 fail-closed 게이트가 그 부재를 "확인된 부정"으로 읽었다.남은 구멍은 폴백 상수의 값이다.
src/codex/model-entitlements.ts의 버전 우선순위는 3단이다. (1) 인바운드 요청의client_version, (2) 저장된 Codex 런타임 버전, (3) 이 빌드의 번들 스냅샷이 게이트 모델에 대해 기록한 하한. 3단은 요청도 없고 런타임도 해석된 적 없는 배경 동기화를 위해 존재한다.그 3단의 실제 값을 확인했다:
GATED_MODEL_CLIENT_VERSION_FLOOR = 0.142.2 src/codex/data/upstream-models.json 기준 gpt-5.6-sol minimal_client_version = 0.142.2 gpt-5.6-terra minimal_client_version = 0.142.2 gpt-5.6-luna minimal_client_version = 0.142.2그런데 #2886의 제보자가 같은 계정으로 인증된 업스트림 로스터에 세 가지 버전을 직접 물어본 결과는 이랬다:
client_version=0.142.2 → HTTP 200, gpt-5.6 없음 client_version=0.144.0 → HTTP 200, gpt-5.6-sol/terra/luna 있음 client_version=0.146.0 → HTTP 200, gpt-5.6-sol/terra/luna 있음즉 번들 스냅샷이 기록한 하한이 실제 업스트림 게이트보다 낮다. 스냅샷은 0.142.2를 요구한다고 적어놨는데 업스트림은 그 버전에 GPT-5.6을 주지 않는다.
deriveGatedClientVersionFloor는 스냅샷에서 값을 성실하게 유도하고 하드코딩을 피하도록 설계됐지만, 유도 결과가 실제로 통하는 버전인지는 검증할 수 없다. 3단으로 떨어지는 경로는 0.0.0을 쓰던 옛 결함과 똑같은 결과를 만든다. 답이 빈 채로 오고, fail-closed 게이트가 그걸 부정으로 굳힌다.그래서 왜 어떤 사람은 되고 어떤 사람은 안 되는가. 1단이나 2단이 살아 있으면 실제 클라이언트 버전(0.144+)으로 물어보니 정상이다. 3단으로 내려가는 경우 — 요청 없는 배경 동기화이고, 이 호스트에서 Codex 런타임이 해석된 적 없거나
codex-runtime.json이 없는 경우 — 0.142.2로 물어보고 빈 답을 받는다. #2886 제보자가~/.opencodex를 통째로 치우고 새로 설치한 뒤 재현한 것, 그리고 그 머신에codexCLI가 없다고 말한 것이 이 경로와 정확히 맞는다.#3023과의 관계. 별개 결함이지만 같은 지점에서 만난다. #3023은 5분 캐시가 만료된 뒤 자격 증명을 다시 읽지 않아 행이 빠지는 문제고, 이건 다시 읽더라도 잘못된 버전으로 묻는 문제다. 둘 다 "엔타이틀먼트가 조용히 짧은 목록을 낸다"로 끝난다.
수리 방향. 스냅샷 유도값을 그대로 신뢰하는 대신, 게이트 모델이 실제로 돌아오는 버전을 하한으로 삼아야 한다.
GATED_MODEL_CLIENT_VERSION_FLOOR_FALLBACK을 올리는 것만으로는 부족하다 — 유도가 성공해서 0.142.2가 나오면 폴백은 쓰이지도 않는다. 그리고 fail-closed 게이트가 "빈 로스터"와 "확인된 부정"을 계속 같은 것으로 취급하는 한, 다음에 업스트림이 하한을 또 올리면 같은 일이 반복된다. 그 구분이 이 수리의 본체다.당신 쪽에서 더 필요한 것은 없다. A/B가 깔끔하고 버전 경계가 명확해서 여기서 바로 작업할 수 있다. 확인만 하나 부탁하면, 영향받은 머신에서
cat ~/.opencodex/codex-runtime.json이selectedVersion을 들고 있는지 알려주면 위 3단 가설이 당신 환경에서도 맞는지 굳어진다. 없거나 비어 있으면 예상과 일치한다.우선순위 78/80. 배포된 회귀이고, 유료 계정이 소유한 값을 잃고, 사용자가 다운그레이드로만 대응할 수 있다.
리뷰 · 우선순위 76 / 80
이 이슈는 지금
devHEAD870a2adb6(패키지 2.37.0) 에도 그대로 열려 있습니다. 작성자는 ChatGPT Plus 계정으로 Codex App 을 씁니다. OpenCodex 2.35.0 에서는gpt-5.6-sol/gpt-5.6-terra/gpt-5.6-luna가 보입니다. 2.36.0 으로 올리면 같은 계정에서 세 줄이 사라집니다. 다시 2.35.0 으로 내리면 바로 돌아옵니다. 운영체제는 macOS 26.6.2 입니다. 예전에 운영체제 칸이 비어 품질 봇이 닫았다가, 칸을 채운 뒤 다시 열렸습니다. 계정 자격이 바뀐 것이 아닙니다. 설치본 경계에서만 갈립니다.2.35.0 과 2.36.0 사이에서 엔타이틀먼트 파일을 바꾼 커밋은 #2891 (
c3da277bc) 입니다. 2.35.0 은https://chatgpt.com/backend-api/codex/models?client_version=0.0.0을 그대로 쳤습니다. 2.36.0 부터는 요청의client_version, 저장된 Codex 런타임 버전, 이 빌드 스냅샷이 게이트 모델에 적어 둔 하한, 이 세 칸을 순서대로 씁니다. 그 수리의 목적은 #2886 이었습니다.0.0.0으로 물으면 업스트림이 게이트 모델을 빼서 돌려주고, 실패 닫힘 게이트가 그 빈 목록을 확인된 부정으로 읽었습니다. 아이러니는 그 수리가 이번 제보의 버전 경계와 같다는 점입니다.HEAD 에서 3단 하한의 실제 값은
0.142.2입니다.src/codex/model-entitlements.ts의deriveGatedClientVersionFloor가src/codex/data/upstream-models.json에서 게이트 슬러그의minimal_client_version중 제일 높은 값을 고릅니다.gpt-5.6-sol/ terra / luna 세 줄이 모두0.142.2입니다. 유도가 성공하면 폴백 상수GATED_MODEL_CLIENT_VERSION_FLOOR_FALLBACK도 같은0.142.2라서 쓰이지 않습니다. 스냅샷이 적는 하한은 이 빌드가 아는 값이지만, 업스트림이 그 버전에 GPT-5.6 을 실제로 주는지는 검증하지 않습니다.관련 #2886 측정은 같은 인증으로 버전만 바꿔 물은 결과입니다.
0.142.2는 HTTP 200 인데 gpt-5.6 이 없고,0.144.0과0.146.0은 세 줄이 있습니다. 스냅샷 하한이 실제 게이트보다 낮습니다. 1단(요청 버전)이나 2단(런타임 파일)이0.144이상이면 목록이 맞습니다. 요청도 없고codex-runtime.json도 없으면 3단0.142.2로 묻고 빈 답을 받습니다. 실패 닫힘은confirmed이고 모델 집합이 비면 게이트 줄을 숨깁니다. Codex App 의GET /v1/models는 쿼리의client_version을 그대로 넘깁니다. 앱이 새 버전을 실어 보내면 이 구멍은 안 보입니다. 앱이 버전을 안 보내거나, 배경 동기화·내보내기·Direct 자격 검사가 3단으로 떨어지면 피커에서 사라집니다.같은 시각의 #3023 과 묶지 마세요. #3023 은 5분 캐시가 식은 뒤 관리면
GET /api/models가 자격을 다시 안 읽는 구멍입니다. 이건 다시 읽더라도 잘못된 버전으로 묻는 구멍입니다. 둘 다 짧은 네이티브 목록으로 끝나지만 고치는 자리가 다릅니다. #3024 는 날짜 접미사 접기라서 더 멉니다. #2886 은 이미 #2891 로 닫힌 옛0.0.0플레이스홀더입니다. 이번 이슈를 그 중복으로 닫지 마세요. 열린 PR 중에 이 하한을 고치는 것은 없습니다. types.ts/config.ts 분할과도 안 겹칩니다. 미리보기 배포는 계획에 없습니다.2.35.0 이 되던 이유도 같이 적습니다. 그때는
0.0.0으로 물었습니다. 그 값이 빈 로스터를 만들던 것이 #2886 이었습니다. 그런데 이 Plus 계정 A/B 는 2.35.0 에서 세 줄이 보입니다. 가능한 설명은 두 가지입니다. 그때 이 계정의0.0.0응답에 아직 GPT-5.6 이 들어 있었거나, 피커가 프록시 게이트가 아닌 Codex App 쪽 캐시/관측 행을 보고 있었을 수 있습니다. 어느 쪽이든 2.36.0 의 실패 닫힘 +0.142.2하한은 HEAD 에서 같은 증상을 만들 수 있습니다. 작성자에게 더 필요한 재현은 거의 없습니다. 확인이 하나 있으면, 그 맥에서~/.opencodex/codex-runtime.json의selectedVersion이 있는지입니다. 없거나 비면 3단 가설과 맞습니다.라인 src/codex/model-entitlements.ts 81 - 폴백 상수가
0.142.2다. 유도가 성공하면 이 값은 쓰이지 않는다. 폴백만 올리는 패치는 이번 구멍을 못 막는다.
라인 src/codex/model-entitlements.ts 83-86 -GATED_MODEL_CLIENT_VERSION_FLOOR가 스냅샷에서 유도된다. HEAD 에서 결과는0.142.2다.
라인 src/codex/model-entitlements.ts 122-135 -resolveCodexEntitlementClientVersion3단이다. 요청도 런타임도 없으면 그 하한으로 묻는다.0.0.0플레이스홀더는 이미 거절한다.
라인 src/codex/model-entitlements.ts 414-422 - 업스트림이 200 으로 짧은 목록을 주면confirmed: true에 빈 게이트 집합이 된다. 실패가 아니라 확인된 부정이다.
라인 src/codex/model-entitlements.ts 597-618 -cachedAvailableAccountGatedNativeModels는 만료되지 않은 확인 칸만 센다. 짧은 확인 목록이면 Sol/Terra/Luna 가 빠진다.
라인 src/codex/catalog/native-models.ts 5-9 - 게이트 집합에 세 줄과 Daybreak Blue 가 들어 있다. 집합 자체는 버그가 아니다.
라인 src/codex/catalog/metadata.ts 424-426 - 관리/내보내기 행은 그 캐시 읽기로 게이트 줄을 남긴다.
라인 src/server/index.ts 1160-1163 -GET /v1/models는 쿼리client_version을 넘긴다. 앱이 새 버전을 실으면 데이터면은 살 수 있다. 3단으로 떨어지는 배경 길과는 다르다.
경로 src/codex/data/upstream-models.json gpt-5.6-sol/terra/lunaminimal_client_version- 세 줄 모두0.142.2다. 스냅샷을 새로 받아도 업스트림 게이트가 더 높으면 같은 일이 다시 난다.메인테이너의 판단이 필요한 지점
- 하한을 스냅샷 유도값 대신, 게이트 모델이 실제로 돌아오는 버전으로 고정할지
- 빈 로스터를 확인된 부정으로 남길지, 짧은 성공을 미확인으로 낮춰 정적 줄을 숨기지 않을지. 후자는 [Bug]: account-unentitled gpt-5.6-sol/terra/luna are advertised as native models and relayed as 502 stream errors #2548 광고 과잉과 부딪친다
- [Bug][2.36.0] /api/models drops entitled GPT-5.6 rows after the 5-minute entitlement cache expires #3023 관리면 캐시 미스와 이 하한을 한 PR 에 넣을지. 넣지 않는 쪽이 안전하다
- 작성자 머신에 런타임 파일이 있는지 한 줄만 더 받을지, 지금 A/B 만으로 수리를 시작할지
너의 추천
열어 둔다. 라벨을 바꾸지 마라. 닫지 마라. #2886 중복으로 닫지 마라. #3023 과도 묶지 마라. 고치는 자리는deriveGatedClientVersionFloor/GATED_MODEL_CLIENT_VERSION_FLOOR다. 폴백 상수만 올리지 마라. 유도가0.142.2를 내는 한 폴백은 안 탄다. 게이트 세 줄이 실제로 포함된 버전을 하한으로 삼고, 그 값을 단위 테스트로 잠가라. 실패 닫힘 게이트와 #2548 광고 금지는 유지하라. types/config 분할에 안 깔리는 좁은 PR 로dev에 올려라. 미리보기 배포는 하지 마라.이 댓글은 grok-bot이 작성했습니다
- added 4 commits that reference this issue
on Aug 31, 2026 - addedlanded-via-maintainerOriginal PR closed after landing via a maintainer merge trainOriginal PR closed after landing via a maintainer merge train
on Aug 31, 2026 5 remaining items
This is still broken in 2.39.0 as far as I can tell.
Automated translation bookkeeping — detected language: English.
I had the same issue on OpenCodex 2.39.0 and 2.40.0. The problem turned out not to be OpenCodex itself, but my Codex CLI version.
So update the CLI version and then refreshing OpenCodex / syncing the catalog, GPT-5.6 Sol, Terra, and Luna appeared again.
Confirm that update the Codex CLI version from 0.142.5 to 0.153.0 solved the problem.
- added 4 commits that reference this issue
on Sep 4, 2026 - added 4 commits that reference this issue
on Sep 17, 2026
Client or integration
Codex App
Area
Authentication / entitlement / model catalog
Summary
After upgrading OpenCodex from 2.35.0 to 2.36.0, a ChatGPT Plus account can no longer use the GPT-5.6 family in Codex.
Downgrading the same OpenCodex installation back to 2.35.0 immediately restores GPT-5.6 availability for the same Plus account.
Affected models:
gpt-5.6-solgpt-5.6-terragpt-5.6-lunaThis looks like a 2.36.0 regression in the entitlement/catalog synchronization path rather than an actual account entitlement change, because the result is reproducible across the version boundary with the same account.
Reproduction
Controlled A/B result
Version
Regression observed in 2.36.0. Control version: 2.35.0.
Operating system
macOS 26.6.2
Provider and model
OpenAI Codex login / ChatGPT Plus:
gpt-5.6-solgpt-5.6-terragpt-5.6-lunaSuspected area
2.36.0 includes changes around requesting/reconciling the upstream entitlement roster using the real Codex client version. The clean 2.35 → 2.36 → 2.35 A/B suggests that the refreshed entitlement/catalog logic may be producing a false negative for an entitled Plus account.
Related issue #2886 reports a similar false-negative catalog projection on an earlier version, but this report specifically captures a 2.36.0 regression where 2.35.0 works for the same account and downgrading restores GPT-5.6.
Expected behavior
An entitled ChatGPT Plus account that can use GPT-5.6 on 2.35.0 should retain the same GPT-5.6 models after upgrading to 2.36.0. A missing/stale/incorrect entitlement roster should not incorrectly remove or reject models the account is actually entitled to use.
Checks