Hmbown/CodeWhale · error · anyhow::Error

Turn {turn_id} is stopping and cannot be steered

Error message

Turn {turn_id} is stopping and cannot be steered

What it means

Steering guard in the steer path: the target turn is in the stopping state (an interrupt was already requested). Additional steering messages to a turn that is winding down would race the shutdown, so the request is rejected — steer an active turn or wait for the stop to complete.

Source

Thrown at crates/tui/src/runtime_threads.rs:6241

        let prompt = req.prompt.trim().to_string();
        if prompt.is_empty() {
            bail!("prompt is required");
        }

        let engine = {
            let mut active = self.active.lock().await;
            let engine = {
                let Some(active_thread) = active.engines.get_mut(thread_id) else {
                    bail!("Thread is not loaded");
                };
                let Some(active_turn) = active_thread.active_turn.as_mut() else {
                    bail!("No active turn on thread {thread_id}");
                };
                if active_turn.turn_id != turn_id {
                    bail!("Turn {turn_id} is not active on thread {thread_id}");
                }
                if active_turn.interrupt_requested {
                    bail!("Turn {turn_id} is stopping and cannot be steered");
                }
                active_thread.engine.clone()
            };
            touch_lru(&mut active.lru, thread_id);
            engine
        };

        let permit = engine
            .reserve_steer()
            .await
            .map_err(|error| anyhow!("Failed to steer turn: {error}"))?;

        let now = Utc::now();
        let item = TurnItemRecord {
            schema_version: CURRENT_RUNTIME_SCHEMA_VERSION,
            id: format!("item_{}", &Uuid::new_v4().to_string()[..8]),
            turn_id: turn_id.to_string(),
            kind: TurnItemKind::UserMessage,

View on GitHub (pinned to 0c42157ee5)

Solutions

  1. Wait for the stop to complete
  2. Then start a new turn with the follow-up prompt
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/tui/src/runtime_threads.rs:6241 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20). Data as JSON: /api/errors/988f6a8b1ce22ce6. Report an issue: GitHub.