{"record":{"id":"971e7631d1e87c1a","repo":"Hmbown/CodeWhale","slug":"plugin-name-is-not-installed-at","errorCode":null,"errorMessage":"plugin '{name}' is not installed at {}","messagePattern":"plugin '(.+?)' is not installed at (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/plugins/install/mod.rs","lineNumber":450,"sourceCode":"        None,\n    )?;\n    match outcome {\n        PluginInstallOutcome::Installed(installed) => Ok(PluginUpdateResult::Updated(installed)),\n        PluginInstallOutcome::NeedsApproval(host) => Ok(PluginUpdateResult::NeedsApproval(host)),\n        PluginInstallOutcome::NetworkDenied(host) => Ok(PluginUpdateResult::NetworkDenied(host)),\n    }\n}\n\n/// Remove a plugin installed via `/plugin install`.\n///\n/// Refuses to touch any directory that doesn't carry the `.installed-from`\n/// marker — that's our cue that it's hand-placed and not ours to delete.\n/// Callers must require the bundle to be disabled first (the mutation\n/// controller does) and prune the registry state entry afterwards.\npub fn uninstall(name: &str, user_plugins_dir: &Path) -> Result<()> {\n    let target = plugin_target_path(name, user_plugins_dir)?;\n    if !target.exists() {\n        bail!(\"plugin '{name}' is not installed at {}\", target.display());\n    }\n    ensure_target_within_plugins_dir(&target, user_plugins_dir)?;\n    if !target.join(INSTALLED_FROM_MARKER).exists() {\n        return Err(PluginInstallError::NotInstalledHere(name.to_string()).into());\n    }\n    fs::remove_dir_all(&target)\n        .with_context(|| format!(\"failed to remove {}\", target.display()))?;\n    Ok(())\n}\n","sourceCodeStart":432,"sourceCodeEnd":460,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/tui/src/plugins/install/mod.rs#L432-L460","documentation":"uninstall looked for the plugin's target directory and it does not exist under the user plugins dir (path echoed). The operation aborts before touching anything, consistent with uninstall's fail-closed rule of only ever removing marked, present directories.","triggerScenarios":"Thrown at crates/tui/src/plugins/install/mod.rs:450 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the plugin name for typos","List installed plugins to see the exact name","Or nothing is needed if it is already gone"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"0c42157ee52f9d55af2b506d71b46249910f77d3","analyzedAt":"2026-08-20T21:50:45.477Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}