{"record":{"id":"89c73aed8b1ded35","repo":"zed-industries/zed","slug":"autoupdate-failed-rollback-successful","errorCode":null,"errorMessage":"Autoupdate failed, rollback successful","messagePattern":"Autoupdate failed, rollback successful","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/auto_update_helper/src/updater.rs","lineNumber":426,"sourceCode":"    if last_successful_job\n        .map(|job| job != JOBS.len() - 1)\n        .unwrap_or(true)\n    {\n        let Some(last_successful_job) = last_successful_job else {\n            anyhow::bail!(\"Autoupdate failed, nothing to rollback\");\n        };\n\n        for job in (0..=last_successful_job).rev() {\n            let job = &JOBS[job];\n            if let Err(e) = (job.rollback)(app_dir) {\n                anyhow::bail!(\n                    \"Job rollback failed, the app might be left in an inconsistent state: ({:?})\",\n                    e\n                );\n            }\n        }\n\n        anyhow::bail!(\"Autoupdate failed, rollback successful\");\n    }\n\n    if launch {\n        #[allow(clippy::disallowed_methods, reason = \"doesn't run in the main binary\")]\n        let _ = std::process::Command::new(app_dir.join(\"Zed.exe\")).spawn();\n    }\n    log::info!(\"Update completed successfully\");\n    Ok(())\n}\n\n#[cfg(test)]\nmod test {\n    use super::perform_update;\n\n    #[test]\n    fn test_perform_update() {\n        let app_dir = tempfile::tempdir().unwrap();\n        let app_dir = app_dir.path();","sourceCodeStart":408,"sourceCodeEnd":444,"githubUrl":"https://github.com/zed-industries/zed/blob/bc538def4545534201bbfcac4e95ac34ea6501b6/crates/auto_update_helper/src/updater.rs#L408-L444","documentation":"A job failed after at least one earlier job succeeded, and the reverse rollback of all completed jobs succeeded. The previous version should be fully restored; this bail reports the failed update with a clean prior state.","triggerScenarios":"Any mid-sequence job failure (locked file, permission, or timeout after 2s of retries) followed by successful rollback of jobs 0..=last_successful_job.","commonSituations":"Transient copy failures mid-sequence - a process re-acquiring locks, brief permission issues, antivirus scanning - after earlier jobs already applied.","solutions":["Restart Zed (it is running the rolled-back old version) and retry the update.","Close other Zed/remote-server processes and pause antivirus scanning before retrying.","If it recurs, capture the helper log and report; a manual zed.dev install also works."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"on this message, restart the app on the rolled-back version and retry the update later; no repair is needed since rollback succeeded.","preventionTips":["Close processes that lock app files before updating","Retry updates after a clean restart rather than immediately"],"tags":["windows","auto-update","rollback"],"backgroundTag":null,"analyzedSha":"bc538def4545534201bbfcac4e95ac34ea6501b6","analyzedAt":"2026-08-16T07:30:46.435Z","schemaVersion":2},"datasetVersion":"2026-08-16T08:17:34.114Z"}