From bd31ba8e4ff8bfc059c953dbe4cb2c8beca1c760 Mon Sep 17 00:00:00 2001 From: Felipe Coury Date: Sat, 11 Apr 2026 14:13:31 -0300 Subject: [PATCH] fix(tui): ignore stale github pr lookup state Leave the current GitHub PR pending flag untouched when an async lookup result arrives for an old cwd. This prevents late stale events from allowing duplicate lookups for the active status surface cwd. --- codex-rs/tui/src/chatwidget.rs | 1 - .../tui/src/chatwidget/tests/status_and_layout.rs | 11 +++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/codex-rs/tui/src/chatwidget.rs b/codex-rs/tui/src/chatwidget.rs index 40963c37ad..96cc354323 100644 --- a/codex-rs/tui/src/chatwidget.rs +++ b/codex-rs/tui/src/chatwidget.rs @@ -1935,7 +1935,6 @@ impl ChatWidget { pull_request: Option, ) { if self.status_line_github_pr_cwd.as_ref() != Some(&cwd) { - self.status_line_github_pr_pending = false; return; } self.status_line_github_pr = pull_request; diff --git a/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs b/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs index d9c001178d..3ef267917f 100644 --- a/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs +++ b/codex-rs/tui/src/chatwidget/tests/status_and_layout.rs @@ -948,6 +948,17 @@ async fn github_pr_state_resets_when_no_surface_uses_it() { assert!(!chat.status_line_github_pr_lookup_complete); } +#[tokio::test] +async fn stale_github_pr_update_preserves_current_pending_lookup() { + let (mut chat, _rx, _op_rx) = make_chatwidget_manual(/*model_override*/ None).await; + chat.status_line_github_pr_cwd = Some(PathBuf::from("/repo/current")); + chat.status_line_github_pr_pending = true; + + chat.set_status_line_github_pr(PathBuf::from("/repo/old"), None); + + assert!(chat.status_line_github_pr_pending); +} + #[tokio::test] async fn status_line_branch_refreshes_after_turn_complete() { let (mut chat, _rx, _op_rx) = make_chatwidget_manual(/*model_override*/ None).await;