From e8eb4ca0bdf44cad1cc1dcf17d7d36d3ad0dd732 Mon Sep 17 00:00:00 2001 From: Henry Park Date: Thu, 26 Feb 2026 19:54:01 -0800 Subject: [PATCH] fix: prevent duplicate WASM channel activation on startup (#390) Register boot-loaded WASM channel names with the extension manager via set_active_channels() before set_channel_runtime() so the dedup guard in activate_wasm_channel() is armed before the activation path becomes available. This fixes 409 Conflict errors from the Telegram API caused by two concurrent getUpdates polling loops. Also fix pre-existing clippy warning in signal.rs test. Co-authored-by: Claude Opus 4.6 (1M context) --- src/channels/signal.rs | 2 +- src/main.rs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/channels/signal.rs b/src/channels/signal.rs index 85b7535f..c578ff9a 100644 --- a/src/channels/signal.rs +++ b/src/channels/signal.rs @@ -2742,7 +2742,7 @@ mod tests { let ctx = ch.conversation_context(&metadata); assert_eq!(ctx.get("sender"), Some(&"+1234567890".to_string())); assert_eq!(ctx.get("sender_uuid"), Some(&"uuid-123".to_string())); - assert!(ctx.get("group").is_none()); + assert!(!ctx.contains_key("group")); } #[test] diff --git a/src/main.rs b/src/main.rs index 85ba6724..802db8d7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -602,6 +602,7 @@ async fn main() -> anyhow::Result<()> { if let Some(ref ext_mgr) = components.extension_manager && let Some((rt, ps, router)) = wasm_channel_runtime_state.take() { + ext_mgr.set_active_channels(loaded_wasm_channel_names).await; ext_mgr .set_channel_runtime( Arc::clone(&channels),