{"record":{"id":"1c574179ca1a8153","repo":"zed-industries/zed","slug":"extension-no-longer-installed","errorCode":null,"errorMessage":"extension no longer installed","messagePattern":"extension no longer installed","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/extension_host/src/extension_host.rs","lineNumber":1792,"sourceCode":"            .metadata(&extension_dir)\n            .await?\n            .with_context(|| format!(\"missing extension directory {extension_dir:?}\"))?\n            .is_symlink;\n\n        let language_dir = extension_dir.join(\"languages\");\n        if let Ok(mut language_paths) = fs.read_dir(&language_dir).await {\n            while let Some(language_path) = language_paths.next().await {\n                let language_path = language_path\n                    .with_context(|| format!(\"reading entries in language dir {language_dir:?}\"))?;\n                let Ok(relative_path) = language_path.strip_prefix(&extension_dir) else {\n                    continue;\n                };\n                let Ok(Some(fs_metadata)) = fs.metadata(&language_path).await else {\n                    continue;\n                };\n                if !fs_metadata.is_dir {\n                    continue;\n                }\n                let config = {\n                    let fs = fs.clone();\n                    let language_config_path = language_path.join(LanguageConfig::FILE_NAME);\n                    async move {\n                        let config = fs.load(&language_config_path).await.with_context(|| {\n                            format!(\"loading language config from {language_config_path:?}\")\n                        })?;\n                        LanguageConfig::from_toml(&config).map_err(anyhow::Error::from)\n                    }\n                };\n                let query_files = async {\n                    Ok(discover_query_files(fs.clone(), &language_path)\n                        .await\n                        .log_err())\n                };\n                let (config, query_files) = futures::try_join!(config, query_files)?;\n\n                let relative_path = relative_path.to_rel_path_buf()?;","sourceCodeStart":1774,"sourceCodeEnd":1810,"githubUrl":"https://github.com/zed-industries/zed/blob/9d272b036335401f339d024ea94968fd51016c40/crates/extension_host/src/extension_host.rs#L1774-L1810","documentation":"prepare_remote_extension was asked to prepare an extension whose id is no longer in the extension index — the extension was uninstalled (or its files removed) between the request being queued and the preparation task running. This sentinel guard prevents operating on a vanished extension's directory.","triggerScenarios":"Thrown at crates/extension_host/src/extension_host.rs:1792 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Treat as benign cancellation: skip the remote preparation and clean up any partial tmp_dir state","Reinstall the extension and retry if it was unintentionally removed","Guard callers against stale queued requests after uninstall events"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9d272b036335401f339d024ea94968fd51016c40","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}