fix(catalog): stop offering Codex-retired models on the OAuth path - #450
Open
lucifer78907 wants to merge 1 commit into
Open
fix(catalog): stop offering Codex-retired models on the OAuth path#450lucifer78907 wants to merge 1 commit into
lucifer78907 wants to merge 1 commit into
Conversation
gpt-5.4 and gpt-5.4-mini retired from Codex ChatGPT sign-in on 2026-08-31
(gpt-5.6-terra and gpt-5.6-luna are the documented replacements), and nano
tiers ship API-only and were never served there. Both the CLI wizard and
forge-ui still offered them for browser-based OAuth login, so an agent
scaffolded that way failed on its first call. OpenAI states the API and
API-key Codex are unaffected, so these remain selectable with a key.
Four problems, not one:
- provider_step.go declared openAIOAuthModels and openAIAPIKeyModels but
built both from the same unfiltered openAIModelOptions(), so the split
existed in name only.
- catalog.Model had no way to express it: {Label, ModelID} left nowhere to
record "API-key only", so the wizard could not have filtered even if it
tried.
- forge-ui duplicated the whole OpenAI model list instead of reading the
catalog — exactly the drift the catalog package doc says it exists to
prevent. The two had already diverged: forge-ui carried the 5.6 family,
the catalog did not.
- gpt-5.4 was hardcoded as the default in four independent places: the
catalog, forge-ui, init.go's template data, and runtime/config.go's
defaultModelForProvider — the last meaning any agent whose forge.yaml
omits a model was *running* on a retired model.
Changes:
- catalog.Model gains APIKeyOnly, plus Provider.OAuthModels() /
APIKeyModels() accessors.
- OpenAI entry gains gpt-6-astra and the gpt-5.6 family (sol/terra/luna);
gpt-5.4, gpt-5-mini, gpt-5-nano and gpt-4.1 are marked APIKeyOnly.
DefaultModel and the stale "GPT 5.4, GPT 5 Mini, GPT 5 Nano" description
both updated.
- provider_step.go filters per auth method via the new accessors.
- forge-ui projects the OpenAI entry from the catalog rather than
duplicating it, so the two cannot drift again.
- runtime/config.go and init.go default to gpt-5.6-terra; init.go now reads
catalog.DefaultModel instead of keeping its own switch.
Pro-only gpt-5.3-codex-spark and previous-generation gpt-5.5 are Codex
OAuth models but deliberately not offered: codex-spark fails for non-Pro
accounts and gpt-5.5 is on a retirement path. gpt-6-astra is included
despite a staged rollout, but is not the default.
Tests: TestOpenAIOAuthModelsExcludeRetired asserts no known-retired id
appears in OAuthModels() and that DefaultModel is itself OAuth-reachable,
so the wizard can never hand an OAuth user a default that fails.
TestDefaultModelForProvider and TestBuildTemplateData_DefaultModels updated
for the new default.
Note: the runtime default change means existing agents whose forge.yaml
omits a model move from gpt-5.4 to gpt-5.6-terra on next run.
Refs https://learn.chatgpt.com/docs/models
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Type of Change
Description
Selecting
gpt-5.4after signing in with ChatGPT produced an agent thatfailed on its first call.
gpt-5.4andgpt-5.4-miniretired from CodexChatGPT sign-in on 2026-08-31 (
gpt-5.6-terraandgpt-5.6-lunaare thedocumented replacements), and nano tiers ship API-only and were never served
there. Both the CLI wizard and forge-ui still offered all of them for
browser-based OAuth login.
OpenAI states the API and API-key Codex are unaffected by those retirements,
so the retired models stay selectable with an API key — removing them
outright would break working setups.
Summary
provider_step.godeclaredopenAIOAuthModelsandopenAIAPIKeyModelsbut built both from the sameunfiltered
openAIModelOptions(). Two names, one list; the intent wasthere, the filtering never was.
catalog.Modelwas{Label, ModelID}, leaving nowhere to record "API-key only", so thewizard could not have filtered even if it tried.
the catalog — precisely the drift the catalog package doc says it exists
to prevent. They had already diverged: forge-ui carried the 5.6 family,
the catalog didn't.
gpt-5.4was hardcoded as the default in four independent places —the catalog, forge-ui,
init.go's template data, andruntime/config.go'sdefaultModelForProvider. That last one means anyagent whose
forge.yamlomits a model was running on a retired model.gpt-6-astrawere missing from the catalogentirely.
Changes
forge-core/catalog/catalog.goModel.APIKeyOnly, plusProvider.OAuthModels()/APIKeyModels()forge-core/catalog/providers.gogpt-6-astra+gpt-5.6-{sol,terra,luna}; markedgpt-5.4,gpt-5-mini,gpt-5-nano,gpt-4.1asAPIKeyOnly;DefaultModel→gpt-5.6-terra; fixed the stale descriptionforge-cli/internal/tui/steps/provider_step.goforge-ui/handlers_create.goforge-core/runtime/config.gogpt-5.6-terraforge-cli/cmd/init.gocatalog.DefaultModelinstead of keeping its own switchDeliberate exclusions. Pro-only
gpt-5.3-codex-sparkandprevious-generation
gpt-5.5are Codex OAuth models but are not offered:codex-spark fails for non-Pro accounts, and gpt-5.5 is on a retirement path.
gpt-6-astrais offered despite a staged rollout, but is not thedefault.
Behaviour change worth flagging: existing agents whose
forge.yamlomits a model move from
gpt-5.4togpt-5.6-terraon next run. Correctfor OAuth users; a real change for API-key users, who could still use
gpt-5.4.Open question for reviewers:
gpt-5-miniandgpt-5-nanodon't matchOpenAI's naming (the real ids appear to be
gpt-5.4-mini/gpt-5.4-nano), so they may be broken on the API-key path too. I leftthe id strings untouched and only moved them to API-key-only rather than
guess — worth a second opinion.
General Checklist
go test ./...)gofmt -w)golangci-lint run)go vetreports no issuesNotes on the unchecked boxes:
gofmt -wdeliberately not run — the working copy is CRLF, so itwould rewrite every file in the module and bury the change. The diff was
verified to contain no line-ending churn. Please confirm in CI.
golangci-lintnot installed locally, so it hasn't been run.forge-core/catalog,forge-core/runtimeand
TestBuildTemplateData_DefaultModelsall pass. Theseforge-cli/cmdand
forge-ui/uiconfigfailures are pre-existing and environmental (Unixpermission bits, executable bits, credential lookup) — confirmed by
stashing the changes and re-running on a clean tree:
TestResolveTryProvider_Ollama,TestResolveTryProvider_NoCredsNonInteractive,TestQuickstartPreset_ScaffoldsValidConfig,TestImportSkillFolder_FullFolder,TestSetEnvFileValue_*.Tests added
TestOpenAIOAuthModelsExcludeRetired— asserts no known-retired idappears in
OAuthModels(), and thatDefaultModelis itselfOAuth-reachable, so the wizard can never hand an OAuth user a default that
fails.
TestDefaultModelForProviderandTestBuildTemplateData_DefaultModelsupdated for the new default.
Not addressed
anthropic,geminiandollamamodel lists are still hardcoded inforge-ui — the catalog holds no
Modelsfor them. Same drift risk, left fora follow-up.
Related Issues
Reference: Codex models ·
Using Codex with your ChatGPT plan