Symptom

Android app crashed at startup with Exception("Node not found: <installId>") inside AvatarWithSpeechBubble, before the UI ever appeared.

Root cause

AvatarWithSpeechBubble called nodeManager.readNodeState(installId()) directly, which throws if the client node is absent. On Android, Compose can render this composable before ClientNodeManager.init() has finished inserting the client node — the same race does not manifest on desktop because the desktop startup path is faster.

readNodeStateOrNull already existed on ClientNodeManager and returns a null-emitting flow rather than throwing, but the composable was using the throwing variant.

Fix

Prevention