Skip to content

feat(codex): prepare Codex Spark retirement and remove its quota UI - #4334

Merged
lidge-jun merged 7 commits into
devfrom
codex/spark-retirement
Sep 13, 2026
Merged

feat(codex): prepare Codex Spark retirement and remove its quota UI#4334
lidge-jun merged 7 commits into
devfrom
codex/spark-retirement

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Sep 12, 2026

Copy link
Copy Markdown
Owner

Summary

Hold for retirement — DO NOT MERGE. Tibo's September 11 announcement says GPT-5.3-Codex-Spark retires “next week”; no exact date/time was given. This draft prepares removal and leaves the current service and integration branches unchanged.

Remove Spark from Codex-login model discovery, restored catalogs and dedicated request compatibility. Remove its quota scope, collection, settings endpoint field and account-card UI. Old Spark-only quota becomes unknown rather than shared capacity, and stale model/quota observations cannot revive it. Shared/Reserve isolation, generic Lite/tools/custom windows, historical costs and other providers' Muse Spark remain intact.

Related: #4130 fixes Spark Lite while Spark is available. This draft neither carries nor closes it.

Verification

  • Local product tests/typecheck/build/install: NOT RUN per maintainer instruction; pushed with --no-verify.
  • Independent inherited-agent plan and implementation reviews: PASS. CI exposed obsolete model-policy expectations and incomplete catalog fixtures; repaired while preserving retirement negatives and positive controls. Full Windows coverage also exposed two pre-existing pnpm/Devin fixture portability defects, repaired in a separate tests-only commit; production update/Devin code is unchanged.
  • Final-head full Cross-platform CI: re-running at head 2b976c96 (run 34693477839). The previous head 622372f79 was fully green (26/26 jobs, run 34673706298) before this rebase.
  • UI: matching CI-built dashboard, GUI tree 08717a046c2b2550c8ed08499511e5edc6aa2801, synthetic fixture API only. Desktop/mobile visually inspected; refresh, pause-exhausted and resume verified. Fixture server stopped and port closed.
  • Announcement verified by opening the primary post through the signed-in Aside browser.
  • Rebased onto dev after fix(devin-cli): honor platform path semantics in credential discovery #4400 landed the same pnpm/Devin fixture portability fix plus the production src/oauth/devin-cli.ts change; the now-redundant tests-only commit was dropped and the src/codex/routing.ts import and codex-quota-parser-parity describe block were merged with the quota-avoidance work from fix(codex): apply a quota refusal's avoidance window to the main login #4396/fix(codex): let clear-cooldown lift an avoidance the cooldown outlived #4397.

Account controls after Spark removal

Mobile screenshot · Screenshot provenance

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

@coderabbitai

coderabbitai Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the enhancement New feature or request label Sep 12, 2026
@github-actions

github-actions Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

✅ READY

  • all PR quality gates passed.

Hygiene

Deterministic PR hygiene checks passed.

@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 61 / 80

설명
이 PR은 Codex 로그인 쪽의 GPT-5.3-Codex-Spark를 나중에 빼기 위한 준비용 초안입니다. Tibo가 9월 11일에 “다음 주에 Spark를 종료한다”고 말했고, 정확한 시각은 없습니다. 그래서 본문에도 DO NOT MERGE / Draft가 적혀 있고, 지금 돌아가는 서비스는 그대로 두라는 뜻입니다.

지금 dev HEAD는 d8df1b106이고, 방금 #4328(프로바이더 노트 두 줄 자르기 + 팝업)과 그 앞 #4325(Local 탭)까지 카탈로그 GUI 스택이 올라온 상태입니다. 이 PR의 작업 줄은 그와 거의 겹치지 않습니다. 대신 Codex 카탈로그·쿼터·계정 UI에서 Spark만 깨끗이 빼는 쪽입니다.

코드를 보면 대략 네 묶음입니다. (1) src/codex/catalog/native-models.ts에서 NATIVE_OPENAI_MODELSgpt-5.3-codex-spark를 빼고 RETIRED_NATIVE_OPENAI_MODELS에 넣습니다. 이미 dev에 있는 gpt-5.4 / gpt-5.4-mini 은퇴 목록(#4327) 옆에 Spark를 붙이는 형태입니다. (2) src/codex/quota.tsisRetiredCodexSparkModel을 두고, 옛 Spark 커스텀 창 라벨을 withoutRetiredCodexQuota로 걸러 냅니다. 헤더 파서도 은퇴 모델이면 null을 돌려서, 죽은 Spark 증거가 공유 쿼터로 다시 살아나지 않게 합니다. (3) src/codex/routing.ts에서 CodexQuotaScope"spark"를 빼고 shared|reserve만 남깁니다. Spark 전용 친화(affinity)와 스코프 맵 항목도 같이 사라집니다. (4) GUI의 CodexAccountPool / codex-account-pool-main-card에서 Spark 토글·i18n·CSS를 지우고, showCodexSparkQuota 설정 필드도 src/types/config.ts / src/config.ts / management 라우트에서 뺍니다. 예전 설정 파일이 있어도 스위치가 다시 켜지지 않게 하려는 설계입니다.

어댑터 쪽에서는 src/adapters/openai-responses.ts의 Spark 전용 stripSparkCompatibility / stripUnsupportedReasoningParams를 제거합니다. 일반 Responses Lite·네임스페이스 scrub·다른 공급자(Meta Muse Spark 포함)는 남겨 둔다고 계획 문서에 명시되어 있습니다. 은퇴 판별이 예전 includes("codex-spark") 스타일에서 정확한 슬러그 gpt-5.3-codex-spark로 바뀐 점도 Muse Spark를 건드리지 않으려는 방향과 맞습니다.

docs-site 여러 언어와 structure/에도 “더 이상 Spark 네이티브/쿼터 UI가 없다”는 설명이 같이 들어갔습니다. 스크린샷 증거와 devlog/_plan/260912_codex_spark_retirement/ 계획 단위도 붙어 있습니다. #4130(Spark Lite 수정)은 이 PR이 닫거나 이어받지 않는다고 본문에 적혀 있습니다.

라인 - 이게 무슨 문제다
mergeable_state dirty / CONFLICTING - 베이스가 옛 dev(약 e432cf56)라서 지금 HEAD d8df1b106(#4325 Local 탭, #4328 note clamp 포함)와 충돌합니다. 종료 당일 머지 전에 rebase가 필요합니다.
windows CI (1–5/6) 및 macos control - 최종 헤드 c3fe2639에서 아직 in_progress입니다. 본문이 요구한 exact-head Cross-platform CI 완료 전에는 머지 후보로 보지 마세요.
로컬 product tests/typecheck/build/install - 메인테이너 지시로 NOT RUN이고 --no-verify 푸시입니다. CI가 대신 막아 주지만, 충돌 해소 커밋 뒤에는 같은 게이트를 다시 초록으로 확인해야 합니다.
src/types/config.ts / src/config.tsshowCodexSparkQuota 제거 - 의도된 동작이지만, 옛 설정 문서에 필드가 남아 있을 때 management API가 조용히 무시하는지(부활 금지) 한 번 더 확인이 필요합니다.
isRetiredCodexSparkModel - 경로 마지막 세그먼트 정확 일치라 Muse Spark에는 안전해 보이지만, 클라이언트가 다른 alias/표기로 Spark를 부르면 일반 라우팅은 남을 수 있습니다. 계획도 “광고된 네이티브 멤버십 제거이지 전역 denylist는 아니다”라고 적어 두었습니다. 그 범위를 메인테이너가 받아들일지 결정이 필요합니다.
structure/·docs-site 대량 수정 - 카탈로그 wp4(unified search + structure/docs-site)와 같은 문서를 건드릴 수 있어, 머지 타이밍을 카탈로그 스택과 겹치면 충돌 비용이 커집니다.

메인테이너의 판단이 필요한 지점

  • 종료 시각이 공지에만 “next week”(해석상 2026-09-14~20)로만 있으니, 언제 Draft를 Ready로 바꾸고 rebase·머지할지
  • 충돌을 지금 미리 풀어 둘지, 종료 직전 한 번에 rebase할지
  • Muse Spark / 벤치·히스토리 비용 / generic customWindows를 정말 손대지 않았는지 최종 확인 기준
  • fix(responses): disable Spark Lite in WebSocket metadata #4130 등 Spark가 아직 살아 있는 동안의 수정 PR을 종료 전에 닫을지 유지할지
  • 카탈로그 wp4와 문서 충돌을 피하려고 이 PR의 structure/docs-site 조각을 나중에 다시 맞출지

너의 추천
지금은 머지하지 마세요. Draft·Hold를 유지하고, Windows/macOS 잔여 CI가 최종 헤드에서 모두 초록이 되는지 먼저 보세요. dev#4325/#4328으로 움직였으니 종료 전에 dev로 rebase한 뒤, Spark가 실제로 내려간 날(또는 공지가 확정된 날)에만 착륙시키세요. 카탈로그 wp4가 문서 트리를 크게 건드리는 중이면 그 직후보다 wp4 전후를 피해 넣는 편이 덜 아픕니다.

이 댓글은 grok-bot이 작성했습니다

luvs01 added a commit to luvs01/opencodex that referenced this pull request Sep 12, 2026
Carries the test-only fixture changes from lidge-jun#4334 (622372f), and completes native path expectations for Devin CLI credential lookup.

Co-authored-by: JUN <bitkyc08@gmail.com>
luvs01 added a commit to luvs01/opencodex that referenced this pull request Sep 12, 2026
Carries the test-only fixture changes from lidge-jun#4334 (622372f), and completes native path expectations for Devin CLI credential lookup.

Co-authored-by: JUN <bitkyc08@gmail.com>
@lidge-jun
lidge-jun force-pushed the codex/spark-retirement branch from 622372f to 2b976c9 Compare September 12, 2026 12:22
The retirement branch was cut ~300 commits behind dev, so the Spark surfaces it
removes had been extended in the meantime. Conflicts are resolved in favor of
removing Spark while keeping the unrelated work that landed alongside it:

- openai-responses: drop the Spark Lite body-shape override and the
  bodyCarriesLiteToolShape helper it was the only caller of.
- codex/quota: keep the retirement tombstone and predicate, drop the WHAM Spark
  window parsing and the Spark header merge, and carry dev's new pool quota
  history evidence argument through the header path. historyWindows no longer
  emits a spark family, since no observation path can produce one; the family
  stays in the history schema so older persisted samples still parse.
- structure docs: keep both sides' notes, and remove the Spark Lite contract
  paragraph that documented the behavior this branch deletes.
- tests: retarget the scoped-lane routing cases to the surviving reserve scope,
  generalize the Lite identity and bracket-normalization cases, and align the
  quota parity expectations with a retired refresh being inert.
@lidge-jun

Copy link
Copy Markdown
Owner Author

Maintainer integration record — final pull request of the batch, merged by @lidge-jun.

#4334 retires Codex Spark across 34 core files and was deliberately held until last. It collides with almost every other lane in this batch, so rebasing it once against a fully landed dev was cheaper and safer than resolving the same conflicts after each lane. The 35 other pull requests in the batch are already on dev.

  • Exact head at integration: 80a4278740670384a935bad7afe5f8b7ecc100a6.
  • CI evidence: every check passes on this head — ci aggregate, gates, Linux shards 1-4, both macOS shards, keyring across three platforms, docker smoke, npm-global across three platforms, storage policy, service lifecycle on systemd, launchd and schtasks, react-doctor, and enforce-target.
  • Unlike the lane links in this batch, this pull request is a tip standing alone, so it received a full hosted run in the ordinary way and is gated on it directly. No [skip ci] deviation applies here.
  • Ordering held: fix(responses): align Spark Lite metadata with serialized body #4359 aligned Spark Lite metadata with the serialized body and landed earlier in the responses lane, so removing Spark here does not strand that fix.
  • Dev regression context: run https://github.com/lidge-jun/opencodex/actions/runs/34736799436 concluded success on a dev commit that already contained all 35 earlier landings.
  • Review state: no outstanding maintainer change requests.
  • Security review: not applicable — no authentication, credential, OAuth, workflow, release-automation, or dependency-installation surface.

@lidge-jun
lidge-jun marked this pull request as ready for review September 13, 2026 04:23
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 13, 2026 04:23
@lidge-jun
lidge-jun merged commit 72601a1 into dev Sep 13, 2026
31 of 32 checks passed
@lidge-jun
lidge-jun deleted the codex/spark-retirement branch September 13, 2026 04:23
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 13, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-13T04:27:06.079686Z 80a4278 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

No wire model carries a model-specific Lite override: the retired `gpt-5.3-codex-spark` body
normalization is gone, so Lite intent is whatever the caller or configured header says. A changed
Lite identity still retires the previous socket, and subsequent eligible requests with the same

P2 Badge Update the public Spark forwarding documentation

This correctly records that the model-specific Lite override was removed, but docs-site/src/content/docs/reference/architecture.md:160-167 and its translated counterparts still tell users that Spark requests and aliases force the Lite header from the body shape. After this change, a user diagnosing a manually supplied legacy Spark request will be instructed to expect behavior the adapter no longer performs. Update or remove that section in the English architecture page and synchronized locales.

AGENTS.md reference: AGENTS.md:L380-L381

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant