From 605c90e26d13af4d72e238f391e9cdfd5f7e480b Mon Sep 17 00:00:00 2001 From: PJ Date: Sat, 6 Jun 2026 10:09:28 +0530 Subject: [PATCH] fix(sidecar): map non-Exception throwables to INTERNAL status The vendored iOS client throws failures that do not extend Exception; runRpc missed them, killing the RPC as a channel-level Unknown the runner cannot classify. Catch Throwable instead. --- .../src/main/kotlin/dev/sanderling/sidecar/DriverService.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverService.kt b/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverService.kt index 5009d99..c5c81eb 100644 --- a/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverService.kt +++ b/sidecar/src/main/kotlin/dev/sanderling/sidecar/DriverService.kt @@ -195,7 +195,11 @@ class DriverService( // a dropped-mid-action connection) keeps it, so the runner can // tell transient failures from fatal ones. observer.onError(cause) - } catch (cause: Exception) { + } catch (cause: Throwable) { + // Throwable, not Exception: the vendored iOS client throws + // failures that do not extend Exception, and an uncaught one + // kills the RPC as a channel-level Unknown instead of a status + // the runner can classify. observer.onError(io.grpc.Status.INTERNAL.withDescription(cause.toString()) .withCause(cause).asRuntimeException()) }