diff --git a/crates/xy-supervisor/src/supervisor.rs b/crates/xy-supervisor/src/supervisor.rs index 8c343e7..42edcf9 100644 --- a/crates/xy-supervisor/src/supervisor.rs +++ b/crates/xy-supervisor/src/supervisor.rs @@ -34,6 +34,7 @@ pub enum SupervisorCmd { pub enum StartAck { Started, AlreadyRunning, + SpawnFailed(String), } #[derive(Debug, PartialEq, Eq)] @@ -141,7 +142,7 @@ impl SupervisorTask { Err(err) => { warn!(name = %self.cfg.name, error = %err, "spawn failed"); self.set_state(ServerState::Failed); - let _ = ack.send(StartAck::Started); + let _ = ack.send(StartAck::SpawnFailed(err.to_string())); } } } diff --git a/crates/xy/src/daemon/handlers.rs b/crates/xy/src/daemon/handlers.rs index c5b5938..d331308 100644 --- a/crates/xy/src/daemon/handlers.rs +++ b/crates/xy/src/daemon/handlers.rs @@ -247,6 +247,13 @@ async fn dispatch_lifecycle( match rx.await { Ok(StartAck::Started) => started.push(name), Ok(StartAck::AlreadyRunning) => already.push(name), + Ok(StartAck::SpawnFailed(msg)) => { + return err_response( + id, + RpcErrorCode::SpawnFailed.as_i32(), + format!("failed to start `{name}`: {msg}"), + ); + } Err(_) => { return err_response( id,