From 8875cdc09af00a677aab0f845d2a66905ab290f8 Mon Sep 17 00:00:00 2001 From: Felipe Coury Date: Fri, 1 May 2026 17:37:48 -0300 Subject: [PATCH] codex: address PR review feedback (#20252) --- codex-rs/tui/src/app/resize_reflow.rs | 8 +++++-- codex-rs/tui/src/app/tests.rs | 34 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/codex-rs/tui/src/app/resize_reflow.rs b/codex-rs/tui/src/app/resize_reflow.rs index 3095c2e850..66247dee07 100644 --- a/codex-rs/tui/src/app/resize_reflow.rs +++ b/codex-rs/tui/src/app/resize_reflow.rs @@ -527,7 +527,8 @@ impl App { let is_first_line = first_agent_cell.is_first_line(); let mut latest_source = None; - for cell in &self.transcript_cells[start..end] { + let mut latest_source_offset = None; + for (offset, cell) in self.transcript_cells[start..end].iter().enumerate() { let agent_cell = cell .as_any() .downcast_ref::()?; @@ -537,10 +538,13 @@ impl App { cwd: cwd.to_path_buf(), is_first_line, }); + latest_source_offset = Some(offset); } } - latest_source + (latest_source_offset == Some(end - start - 1)) + .then_some(latest_source) + .flatten() } /// Return whether current transcript state should be treated as stream-time resize state. diff --git a/codex-rs/tui/src/app/tests.rs b/codex-rs/tui/src/app/tests.rs index 32ee169b22..5419beb2b1 100644 --- a/codex-rs/tui/src/app/tests.rs +++ b/codex-rs/tui/src/app/tests.rs @@ -4203,6 +4203,40 @@ async fn table_resize_lifecycle_stream_reflow_uses_markdown_source_not_transient ); } +#[tokio::test] +async fn table_resize_lifecycle_stream_reflow_ignores_stale_markdown_source() { + let (mut app, _rx, _op_rx) = make_test_app_with_channels().await; + enable_terminal_resize_reflow(&mut app); + app.config.terminal_resize_reflow.max_rows = TerminalResizeReflowMaxRows::Disabled; + let cwd = std::env::temp_dir(); + + app.transcript_cells + .push(Arc::new(AgentMessageCell::new_with_markdown_source( + vec![Line::from("│ Area │ Result │")], + /*is_first_line*/ true, + markdown_table_source().to_string(), + cwd.as_path(), + )) as Arc); + app.transcript_cells.push(Arc::new(AgentMessageCell::new( + vec![Line::from("newer emitted stream row")], + /*is_first_line*/ false, + )) as Arc); + + let reflowed = app.render_transcript_lines_for_reflow(/*width*/ 44); + let lines = reflowed + .lines + .iter() + .map(rendered_line_text) + .collect::>(); + + assert!( + lines + .iter() + .any(|line| line.contains("newer emitted stream row")), + "resize reflow must not replace newer emitted stream cells with an older source snapshot: {lines:?}", + ); +} + #[tokio::test] async fn initial_replay_buffer_keeps_recent_rows_when_row_cap_present() { let (mut app, _rx, _op_rx) = make_test_app_with_channels().await;