Skip to content

fix(tui): keep unified exec summary on working line#10962

Open
joshka-oai wants to merge 4 commits intomainfrom
joshka/status-inline-bg-exec-summary
Open

fix(tui): keep unified exec summary on working line#10962
joshka-oai wants to merge 4 commits intomainfrom
joshka/status-inline-bg-exec-summary

Conversation

@joshka-oai
Copy link
Collaborator

@joshka-oai joshka-oai commented Feb 7, 2026

Problem

When unified-exec background sessions appear while the status indicator is visible, the bottom pane can grow by one row to show a dedicated footer line. That row insertion/removal makes the composer jump vertically and produces visible jitter/flicker during streaming turns.

Mental model

The bottom pane should expose one canonical background-exec summary string, but it should surface that string in only one place at a time:

  • if the status indicator row is visible, show the summary inline on that row;
  • if the status indicator row is hidden, show the summary as the standalone unified-exec footer row.

This keeps status information visible while preserving a stable pane height.

Non-goals

This change does not alter unified-exec lifecycle, process tracking, or /ps behavior. It does not redesign status text copy, spinner timing, or interrupt handling semantics.

Tradeoffs

Inlining the summary preserves layout stability and keeps interrupt affordances in a fixed location, but it reduces horizontal space for long status/detail text in narrow terminals. We accept that truncation risk in exchange for removing vertical jitter and keeping the composer anchored.

Architecture

UnifiedExecFooter remains the source of truth for background-process summary copy via summary_text(). BottomPane mirrors that text into StatusIndicatorWidget::update_inline_message() whenever process state changes or a status widget is created. Rendering enforces single-surface output: the standalone footer row is skipped while status is present, and the status row appends the summary after the elapsed/interrupt segment.

Documentation pass

Added non-functional docs/comments that make the new invariant explicit:

  • status row owns inline summary when present;
  • unified-exec footer row renders only when status row is absent;
  • summary ordering keeps elapsed/interrupt affordance in a stable position.

Observability

No new telemetry or logs are introduced. The behavior is traceable through:

  • BottomPane::set_unified_exec_processes() for state updates,
  • BottomPane::sync_status_inline_message() for status-row synchronization,
  • StatusIndicatorWidget::render() for final inline ordering.

Tests

  • Added bottom_pane::tests::unified_exec_summary_does_not_increase_height_when_status_visible to lock the no-height-growth invariant.
  • Updated the unified-exec status restoration snapshot to match inline rendering order.
  • Validated with:
    • just fmt
    • cargo test -p codex-tui --lib

sayan-oai and others added 4 commits February 6, 2026 14:46
use new message phase field emitted by preamble-supported models to determine whether an AgentMessage is mid-turn commentary. if so, restore the status indicator afterwards to indicate the turn has not completed.
Document how AgentMessage phase metadata drives status-indicator
restoration in the TUI so preamble-capable models are easier to review
and debug. Clarify optional phase compatibility behavior in protocol
types and note that legacy event conversion drops phase metadata.

Add a documentation-pass writeup for PR 10947 in docs/.
Keep the bottom pane height stable while background terminal status is
visible. When the status indicator is shown, render the unified-exec
summary inline after the "(Xs • esc to interrupt)" segment and suppress
the dedicated footer row to avoid composer jitter.

Add a regression test that asserts desired height does not grow when
background processes appear, and update the restored-status snapshot.
@joshka-oai joshka-oai force-pushed the joshka/status-inline-bg-exec-summary branch from ac3a2f5 to 73d9692 Compare February 7, 2026 01:36
Base automatically changed from dev/sayan/status-indicator-jitter to main February 7, 2026 02:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants