Bug: Review turns lack TurnStarted event, inconsistent with other task types

Resolved 💬 2 comments Opened Apr 20, 2026 by hobostay Closed Apr 20, 2026

Description

In codex-rs/core/src/session/review.rs lines 152-154, there is a known inconsistency:

// TODO(ccunningham): Review turns currently rely on `spawn_task` for TurnComplete but do not
// emit a parent TurnStarted. Consider giving review a full parent turn lifecycle
// (TurnStarted + TurnComplete) for consistency with other standalone tasks.
sess.spawn_task(tc.clone(), input, ReviewTask::new()).await;

Review turns emit TurnComplete but not TurnStarted, making them inconsistent with all other task types. This means:

  1. Clients/UIs that track turn state via TurnStarted + TurnComplete pairs will have mismatched state for review turns.
  2. Event consumers expecting a TurnStarted before TurnComplete will see an orphaned TurnComplete event.
  3. This could cause issues in the TUI or any external client listening to the event stream.

Suggested fix

Emit TurnStarted before spawn_task for review turns, matching the lifecycle of other task types.

Environment

  • File: codex-rs/core/src/session/review.rs, lines 145-164

View original on GitHub ↗

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