From c88c94857517b85cb4f5ce24d72def3e39004c11 Mon Sep 17 00:00:00 2001 From: Marco Allegretti Date: Wed, 11 Mar 2026 12:53:07 +0100 Subject: [PATCH] fix(appd): exclude Stopped sessions from running_sessions; add regression test running_sessions() was returning all sessions regardless of state. Stopped sessions would reappear in the taskbar on reconnect since QUERY_RUNNING is sent on every WebSocket open. The filter now matches the UI expectation: only Starting and Running sessions are returned. --- crates/weft-appd/src/main.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/crates/weft-appd/src/main.rs b/crates/weft-appd/src/main.rs index 11fb168..c9e54ec 100644 --- a/crates/weft-appd/src/main.rs +++ b/crates/weft-appd/src/main.rs @@ -66,6 +66,7 @@ impl SessionRegistry { fn running_sessions(&self) -> Vec { self.sessions .iter() + .filter(|(_, e)| !matches!(e.state, AppStateKind::Stopped)) .map(|(&session_id, e)| SessionInfo { session_id, app_id: e.app_id.clone(), @@ -462,6 +463,17 @@ mod tests { assert!(matches!(resp, Response::Error { .. })); } + #[tokio::test] + async fn running_sessions_excludes_stopped() { + let reg = make_registry(); + let session_id = reg.lock().await.launch("com.test.app"); + reg.lock() + .await + .set_state(session_id, AppStateKind::Stopped); + let sessions = reg.lock().await.running_sessions(); + assert!(sessions.is_empty()); + } + #[tokio::test] async fn dispatch_query_running_lists_active_sessions() { let reg = make_registry();