{"record":{"id":"726877c4aab8d10a","repo":"openai/codex","slug":"codex-turn-end-for-codex-turn-id-used-thread-ev","errorCode":null,"errorMessage":"codex turn end for {codex_turn_id} used thread {event_thread_id}, but the turn belongs to {}","messagePattern":"codex turn end for (.+?) used thread (.+?), but the turn belongs to (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"codex-rs/rollout-trace/src/reducer/thread.rs","lineNumber":171,"sourceCode":"            },\n        );\n        Ok(())\n    }\n\n    /// Marks a Codex turn terminal and validates any thread id carried by the raw event.\n    pub(super) fn end_codex_turn(\n        &mut self,\n        seq: RawEventSeq,\n        wall_time_unix_ms: i64,\n        thread_id: Option<String>,\n        codex_turn_id: CodexTurnId,\n        status: ExecutionStatus,\n    ) -> Result<()> {\n        if let Some(event_thread_id) = thread_id.as_deref()\n            && let Some(turn) = self.rollout.codex_turns.get(&codex_turn_id)\n            && turn.thread_id != event_thread_id\n        {\n            bail!(\n                \"codex turn end for {codex_turn_id} used thread {event_thread_id}, \\\n                 but the turn belongs to {}\",\n                turn.thread_id\n            );\n        }\n\n        let Some(turn) = self.rollout.codex_turns.get_mut(&codex_turn_id) else {\n            bail!(\"codex turn end referenced unknown turn {codex_turn_id}\");\n        };\n        turn.execution.ended_at_unix_ms = Some(wall_time_unix_ms);\n        turn.execution.ended_seq = Some(seq);\n        turn.execution.status = status.clone();\n        self.terminate_running_code_cells_for_turn_end(\n            seq,\n            wall_time_unix_ms,\n            &codex_turn_id,\n            &status,\n        )?;","sourceCodeStart":153,"sourceCodeEnd":189,"githubUrl":"https://github.com/openai/codex/blob/339751715c64496cb86246bfb3935f40e309dd3d/codex-rs/rollout-trace/src/reducer/thread.rs#L153-L189","documentation":"Error \"codex turn end for {codex_turn_id} used thread {event_thread_id}, but the turn belongs to {}\" thrown in openai/codex.","triggerScenarios":"Thrown at codex-rs/rollout-trace/src/reducer/thread.rs:171 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"339751715c64496cb86246bfb3935f40e309dd3d","analyzedAt":"2026-08-25T05:35:09.876Z","schemaVersion":2},"datasetVersion":"2026-08-25T06:17:31.827Z"}