diff --git a/codex-rs/tui/src/app/event_dispatch.rs b/codex-rs/tui/src/app/event_dispatch.rs index 2e2b910a4a..b30db31905 100644 --- a/codex-rs/tui/src/app/event_dispatch.rs +++ b/codex-rs/tui/src/app/event_dispatch.rs @@ -2525,8 +2525,10 @@ impl App { } Err(err) => { tracing::error!(error = %err, "failed to persist service tier selection"); + let error = format_config_error(&err); self.chat_widget.add_error_message(format!( - "Failed to save default service tier: {err}" + "Failed to save default service tier: {error}\n\ + You can continue this task. To save the default, resolve the error above, then switch to a different tier and back to the desired tier." )); } } diff --git a/codex-rs/tui/src/app/tests/model_defaults_tests.rs b/codex-rs/tui/src/app/tests/model_defaults_tests.rs index 882196edeb..12a0785507 100644 --- a/codex-rs/tui/src/app/tests/model_defaults_tests.rs +++ b/codex-rs/tui/src/app/tests/model_defaults_tests.rs @@ -164,9 +164,18 @@ async fn model_default_saves_report_server_outcomes_and_target_server_profile() ] { Box::pin(app.handle_event(&mut tui, &mut server, event)).await?; } + let mut service_tier_error = None; let messages = std::iter::from_fn(|| events.try_recv().ok()) .filter_map(|event| match event { AppEvent::InsertHistoryCell(cell) => { + if outcome == "rejected" { + let text = lines_to_single_string(&cell.transcript_lines(/*width*/ 200)); + if text.contains("Failed to save default service tier") { + service_tier_error = Some( + text.replace(&profile_path.display().to_string(), ""), + ); + } + } Some(lines_to_single_string(&cell.transcript_lines(/*width*/ 80))) } _ => None, @@ -186,6 +195,10 @@ async fn model_default_saves_report_server_outcomes_and_target_server_profile() } let persisted = std::fs::read_to_string(&profile_path)?; if outcome == "rejected" { + insta::assert_snapshot!( + "service_tier_default_save_error", + service_tier_error.expect("expected a service-tier save error") + ); assert_eq!(persisted, "[broken"); assert!(!messages.contains("Model changed")); assert!(!messages.contains("Service tier set")); diff --git a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__model_defaults__service_tier_default_save_error.snap b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__model_defaults__service_tier_default_save_error.snap new file mode 100644 index 0000000000..4e34b16db3 --- /dev/null +++ b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__model_defaults__service_tier_default_save_error.snap @@ -0,0 +1,6 @@ +--- +source: tui/src/app/tests/model_defaults_tests.rs +expression: "service_tier_error.expect(\"expected a service-tier save error\")" +--- +■ Failed to save default service tier: config/batchWrite failed in TUI: config/batchWrite failed: failed to load configuration: :1:8: unclosed table, expected `]` (code -32603) +You can continue this task. To save the default, resolve the error above, then switch to a different tier and back to the desired tier.