diff --git a/ui/src/game/CommsHub.svelte b/ui/src/game/CommsHub.svelte index 0cac7fe..b2f311f 100644 --- a/ui/src/game/CommsHub.svelte +++ b/ui/src/game/CommsHub.svelte @@ -21,8 +21,11 @@ // Seeded once from the entry route's tab, then owned locally. The effect keeps the tab valid: // an AI game has only the Dictionary; a finished non-AI game has only Chat (a stale Dictionary // deep-link falls back to Chat). + // An honest-AI game has only the Dictionary, so start there regardless of the entry route — this + // keeps ChatScreen (which fetches chat over the network) from mounting even for a beat, which would + // otherwise raise an error toast in offline mode. // svelte-ignore state_referenced_locally - let tab = $state(initialTab); + let tab = $state(vsAi ? 'dictionary' : initialTab); $effect(() => { if (vsAi) tab = 'dictionary'; else if (tab === 'dictionary' && !active) tab = 'chat';