From 8864e42dce4b69f5a3a7d6dddb9cab6cbf75bd34 Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Sat, 24 Oct 2026 11:24:05 +0200 Subject: [PATCH] Clear plugin settings when a plugin id is re-registered (#1159) Fixes #1116 Co-authored-by: Claude Haiku 5.5 --- crates/engine/src/plugins.rs | 1 + crates/engine/src/plugins_tests.rs | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/crates/engine/src/plugins.rs b/crates/engine/src/plugins.rs index 0159a924..18fd64ef 100644 --- a/crates/engine/src/plugins.rs +++ b/crates/engine/src/plugins.rs @@ -393,6 +393,7 @@ pub(crate) fn register(s: &mut Session, entry: InstalledPlugin, wasm: Vec) - match list.iter_mut().find(|x| x.manifest.id == id) { Some(slot) => { *slot = entry; + s.prefs.plugin_settings.remove(&id); true } None => { diff --git a/crates/engine/src/plugins_tests.rs b/crates/engine/src/plugins_tests.rs index 51c997a5..172fd477 100644 --- a/crates/engine/src/plugins_tests.rs +++ b/crates/engine/src/plugins_tests.rs @@ -406,3 +406,13 @@ fn a_full_undo_history_keeps_its_steps_and_tampered_manifests_are_refused() { s.prefs.plugins[0].manifest.main = "../../elsewhere.wasm".into(); assert!(matches!(s.execute("plugin.run", &json!({"id": "org.test.many"})), Err(EngineError::BadParams { .. }))); } + +#[test] +fn reinstalling_under_an_existing_id_drops_the_old_settings() { + let mut s = Session::new(); + let m = manifest("org.test.reuse", "read", &[]); + install(&mut s, m.clone(), &script(&[], OnRefusal::Fail, "")); + s.prefs.plugin_settings.entry("org.test.reuse".into()).or_default().insert("key".into(), json!("v")); + install(&mut s, m, &script(&[], OnRefusal::Fail, "")); + assert!(!s.prefs.plugin_settings.contains_key("org.test.reuse"), "{:?}", s.prefs.plugin_settings); +}