Interrupted resume can render internal rollout_summary/raw_memory JSON as assistant output

Resolved 💬 3 comments Opened May 1, 2026 by mgwals Closed May 27, 2026

What version of Codex CLI is running?

codex-cli 0.128.0

What subscription do you have?

Plus account.

Which model were you using?

gpt-5.5

What platform is your computer?

Linux ARM64, Ubuntu.

What terminal emulator and version are you using?

VS Code Remote SSH integrated terminal.

What issue are you seeing?

After an interrupted turn and resume, Codex persisted/rendered an internal memory JSON payload as the assistant's visible answer.

Sanitized event sequence from the session JSONL:

  1. 2026-05-01T22:09:13.652Z task_started
  2. user asked for a formatting change
  3. assistant began responding
  4. 2026-05-01T22:09:31.296Z turn_aborted
  5. 2026-05-01T22:09:38.527Z new task_started
  6. user asked Codex to continue
  7. 2026-05-01T22:10:23.126Z event_msg.type=agent_message
  8. same timestamp: persisted response_item.type=message, role=assistant, phase=final_answer, length about 28k chars, starting with a serialized JSON object:
{"rollout_summary":"[redacted internal memory payload] ...

The raw text was a serialized JSON object containing memory/stage output fields such as rollout_summary, rather than a normal assistant answer.

Around the same time, codex-tui.log recorded repeated messages of:

codex_core::util: OutputTextDelta without active item

I am not attaching raw session or log files because they contain user/session content, but the sequence above is from a sanitized local capture.

Why this seems distinct from plain stream disconnects

The corrupted-resume sequence produced a persisted assistant ResponseItem::Message with phase=final_answer. So the observable failure appears to be more than a transient display/drop issue: session state accepted an internal memory JSON payload as assistant-visible final output.

Related issues I found

  • #15720 covers OutputTextDelta without active item / dropped TUI responses.
  • #5778 covers conversation corruption after repeated interruptions.
  • #19745 covers missing lifecycle diagnostics for partial/closed streams.

I did not find an existing issue for the exact symptom "after interrupted resume, internal memory rollout_summary / raw_memory JSON is rendered as assistant output".

Expected behavior

After an interrupted turn and resume, Codex should either continue normally or fail the turn cleanly. Internal memory/stage outputs should not be persisted or rendered as the assistant's visible final answer, and orphan stream deltas should not corrupt the next turn.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗