{"record":{"id":"ec37092ed260f715","repo":"openai/codex","slug":"rollout-migration-state-has-incomplete-last-checke","errorCode":null,"errorMessage":"rollout migration state has incomplete last checked thread","messagePattern":"rollout migration state has incomplete last checked thread","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"codex-rs/state/src/model/rollout_migration_state.rs","lineNumber":38,"sourceCode":"\n/// Persisted progress for one rollout migration.\n#[derive(Debug, Clone, PartialEq, Eq)]\npub struct RolloutMigrationState {\n    pub last_checked_thread: Option<RolloutMigrationCursor>,\n}\n\nimpl RolloutMigrationState {\n    pub(crate) fn try_from_row(row: &SqliteRow) -> Result<Self> {\n        let thread_created_at = row.try_get(\"last_checked_thread_created_at\")?;\n        let thread_id = row.try_get(\"last_checked_thread_id\")?;\n        let last_checked_thread = match (thread_created_at, thread_id) {\n            (Some(thread_created_at), Some(thread_id)) => Some(RolloutMigrationCursor {\n                thread_created_at,\n                thread_id,\n            }),\n            (None, None) => None,\n            _ => {\n                return Err(anyhow::anyhow!(\n                    \"rollout migration state has incomplete last checked thread\"\n                ));\n            }\n        };\n        Ok(Self {\n            last_checked_thread,\n        })\n    }\n}\n\n/// An unchanged rollout that one migration can safely skip.\n#[derive(Debug, Clone, PartialEq, Eq)]\npub struct RolloutMigrationSkippedRollout {\n    pub rollout_path: String,\n    pub rollout_size_bytes: i64,\n    pub rollout_modified_at_ns: i64,\n    pub skip_reason: String,\n}","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/openai/codex/blob/339751715c64496cb86246bfb3935f40e309dd3d/codex-rs/state/src/model/rollout_migration_state.rs#L20-L56","documentation":"Error \"rollout migration state has incomplete last checked thread\" thrown in openai/codex.","triggerScenarios":"Thrown at codex-rs/state/src/model/rollout_migration_state.rs:38 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"}