Remove retired model entries while preserving migration prompts (#44250)

## Why

Saved model selections can outlive their bundled catalog entries and still need migration guidance.

## What changed

- Remove `gpt-5.2` and `gpt-5.4-mini` from the bundled model catalog.
- Preserve migration from saved `gpt-5.4-mini` selections to `gpt-5.6-luna` when the old model is absent, while respecting catalog-provided migration metadata.
- Update tests and snapshots to use current models or explicit test fixtures, and remove the obsolete prompt fixture.

## Testing

Extend migration tests to cover catalog metadata precedence, saved selections, replacement model and reasoning-effort persistence, acknowledged prompts, and missing or hidden migration targets.

GitOrigin-RevId: 82beea504cc4a15699677c28a61ec0939af3069c
This commit is contained in:
rhan-oai authored and copyberry committed 2026-09-09 17:56:33 +00:00
1 parent 6eecd04fc1
commit eb7bd64ef9
58 files changed
+670 -1192

No files matched your search

+12 -12
View File
@@ -2309,7 +2309,7 @@ async fn includes_default_reasoning_effort_in_request_when_defined_by_model_info
sse(vec![ev_response_created("resp1"), ev_completed("resp1")]),
)
.await;
let TestCodex { codex, .. } = test_codex().with_model("gpt-5.4").build(&server).await?;
let TestCodex { codex, .. } = test_codex().with_model("gpt-5.5").build(&server).await?;
codex
.start_or_steer_turn(TurnInputRequest::user_input(vec![UserInput::Text {
@@ -2463,12 +2463,12 @@ async fn model_without_summary_parameter_support_omits_configured_summary() -> a
let model = model_catalog
.models
.iter_mut()
.find(|model| model.slug == "gpt-5.4")
.expect("gpt-5.4 exists in bundled models.json");
.find(|model| model.slug == "gpt-5.5")
.expect("gpt-5.5 exists in bundled models.json");
model.supports_reasoning_summary_parameter = false;
let TestCodex { codex, .. } = test_codex()
.with_model("gpt-5.4")
.with_model("gpt-5.5")
.with_config(move |config| {
config.model_catalog = Some(model_catalog);
config.model_reasoning_effort = Some(ReasoningEffort::High);
@@ -2597,8 +2597,8 @@ async fn user_turn_explicit_reasoning_summary_overrides_model_catalog_default()
let model = model_catalog
.models
.iter_mut()
.find(|model| model.slug == "gpt-5.4")
.expect("gpt-5.4 exists in bundled models.json");
.find(|model| model.slug == "gpt-5.5")
.expect("gpt-5.5 exists in bundled models.json");
model.default_reasoning_summary = ReasoningSummary::Detailed;
let TestCodex {
@@ -2607,7 +2607,7 @@ async fn user_turn_explicit_reasoning_summary_overrides_model_catalog_default()
session_configured,
..
} = test_codex()
.with_model("gpt-5.4")
.with_model("gpt-5.5")
.with_config(move |config| {
config.model_catalog = Some(model_catalog);
})
@@ -2710,12 +2710,12 @@ async fn reasoning_summary_none_overrides_model_catalog_default() -> anyhow::Res
let model = model_catalog
.models
.iter_mut()
.find(|model| model.slug == "gpt-5.4")
.expect("gpt-5.4 exists in bundled models.json");
.find(|model| model.slug == "gpt-5.5")
.expect("gpt-5.5 exists in bundled models.json");
model.default_reasoning_summary = ReasoningSummary::Detailed;
let TestCodex { codex, .. } = test_codex()
.with_model("gpt-5.4")
.with_model("gpt-5.5")
.with_config(move |config| {
config.model_reasoning_summary = Some(ReasoningSummary::None);
config.model_catalog = Some(model_catalog);
@@ -2754,7 +2754,7 @@ async fn includes_default_verbosity_in_request() -> anyhow::Result<()> {
sse(vec![ev_response_created("resp1"), ev_completed("resp1")]),
)
.await;
let TestCodex { codex, .. } = test_codex().with_model("gpt-5.4").build(&server).await?;
let TestCodex { codex, .. } = test_codex().with_model("gpt-5.5").build(&server).await?;
codex
.start_or_steer_turn(TurnInputRequest::user_input(vec![UserInput::Text {
@@ -2832,7 +2832,7 @@ async fn configured_verbosity_is_sent() -> anyhow::Result<()> {
)
.await;
let TestCodex { codex, .. } = test_codex()
.with_model("gpt-5.4")
.with_model("gpt-5.5")
.with_config(|config| {
config.model_verbosity = Some(Verbosity::High);
})