TUI resize-reflow truncates a single long user message in the main chat view

Open 💬 0 comments Opened Aug 24, 2026 by suisbuds

What version of Codex CLI is running?

0.149.1

What subscription do you have?

Pro

Which model were you using?

gpt-5.6-sol

What platform is your computer?

Darwin 24.6.0 arm64; macOS 15.7.7

What terminal emulator and version are you using (if applicable)?

iTerm2 3.6.11; no tmux, screen, or zellij; terminal size 80x24

Codex doctor report

{
  "schemaVersion": 1,
  "overallStatus": "fail (unrelated HTTP reachability timeout; WebSocket handshake succeeds)",
  "codexVersion": "0.149.1",
  "installation": "Homebrew, current version is latest",
  "configLoad": "ok",
  "relevantFeatures": ["terminal_resize_reflow"],
  "threadStateParity": "ok",
  "terminal": {
    "name": "iTerm2",
    "version": "3.6.11",
    "size": "80x24",
    "multiplexer": "none"
  },
  "platform": "macOS 15.7.7, arm64"
}

What issue are you seeing?

Summary

In a long Codex CLI session, a single long multi-line user message is split/truncated in the main TUI chat view. The complete message is only visible after pressing Ctrl+T to open the full transcript.

This is a display/materialization issue rather than session data loss:

  • The user message is stored completely in the session JSONL.
  • Ctrl+T (the open_transcript action) displays the complete message.
  • The main chat view displays only part of the same message.
  • The problem persists with both tui.alternate_screen = "never" and tui.raw_output_mode = true.
  • It is not caused by automatic context compaction.

The installed binary contains the relevant TUI component path tui/src/app/resize_reflow.rs and the text Earlier messages are available ... to view the full transcript, so this appears related to resize-reflow paginated history/materialization.

Impact

The main transcript can visually change or omit part of a user prompt. This makes it difficult to verify what was submitted and can look like prompt/session corruption even though the stored transcript remains intact.

Workaround

Press Ctrl+T and inspect the full transcript pager.

What steps can reproduce the bug?

  1. Run Codex CLI 0.149.1 in iTerm2 3.6.11 on macOS, without tmux/zellij.
  2. Use the following TUI configuration:
[features]
terminal_resize_reflow = true

[tui]
alternate_screen = "never"
raw_output_mode = true
  1. Start or resume a sufficiently long session.
  2. Submit one long multi-line user message, for example a numbered list containing several detailed questions.
  3. Inspect that message in the main TUI chat view.
  4. Press Ctrl+T to open the full transcript.

Observed:

  • The main chat view shows only part of the single user message or splits it at the history materialization boundary.
  • Ctrl+T shows the full message.
  • The persisted session JSONL contains the full original message.

The issue reproduced after disabling alternate-screen mode, so iTerm scrollback capacity is not the cause.

What is the expected behavior?

A single user message should be rendered completely in the main chat view.

If the main TUI intentionally limits materialized history for resize performance, it should not silently split a single message. It should either:

  • keep the complete message as one atomic transcript entry, or
  • show an explicit collapsed placeholder with an expand/open-transcript action.

The main view and Ctrl+T transcript should not appear to disagree about the content of the submitted prompt.

Additional information

Additional diagnostics

  • Codex CLI: 0.149.1
  • Install method: Homebrew
  • Platform: Darwin 24.6.0, arm64; macOS 15.7.7
  • Terminal: iTerm2 3.6.11, 80x24
  • Multiplexer: none
  • Model: gpt-5.6-sol
  • Auth: ChatGPT
  • Subscription: Pro
  • codex doctor --json: configuration, installation, thread-state parity, and WebSocket checks pass. The overall doctor status is only failed because one HTTP provider reachability check timed out; the active WebSocket handshake succeeds.
  • alternate_screen = "never" fixes normal terminal scrollback isolation but does not fix this single-message truncation.
  • raw_output_mode = true also does not fix it.
  • No thread ID, session transcript, local paths, or credentials are included in this public report.

View original on GitHub ↗