From d6de84b4c74883b63de7014e2d48f7763ad70f22 Mon Sep 17 00:00:00 2001 From: Marco Allegretti Date: Wed, 11 Mar 2026 11:19:09 +0100 Subject: [PATCH] fix(appd): broadcast AppState::Stopped on READY timeout runtime.rs: the READY-timeout early-return path now broadcasts AppState::Stopped before returning so WebSocket clients see the session disappear when a module fails to signal readiness within 30s. --- crates/weft-appd/src/runtime.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/crates/weft-appd/src/runtime.rs b/crates/weft-appd/src/runtime.rs index eecae5e..0d5a526 100644 --- a/crates/weft-appd/src/runtime.rs +++ b/crates/weft-appd/src/runtime.rs @@ -55,10 +55,12 @@ pub(crate) async fn supervise( Err(_elapsed) => { tracing::warn!(session_id, %app_id, "READY timeout after 30s; killing process"); let _ = child.kill().await; - registry - .lock() - .await - .set_state(session_id, AppStateKind::Stopped); + let mut reg = registry.lock().await; + reg.set_state(session_id, AppStateKind::Stopped); + let _ = reg.broadcast().send(Response::AppState { + session_id, + state: AppStateKind::Stopped, + }); return Ok(()); } }