From fccfea8b2ead5aa93f005023581e48b24b6fec2d Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Mon, 9 Mar 2026 04:02:01 +0100 Subject: [PATCH] fix: explore page loses remote instance spaces on reload fetchSpaces() now awaits _autoConnectDone before reading the instance list, preventing a race where it would fetch with an empty/incomplete set of connected instances during page reload. --- packages/web/src/stores/exploreStore.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/web/src/stores/exploreStore.ts b/packages/web/src/stores/exploreStore.ts index 92b8bd45..077b80b0 100644 --- a/packages/web/src/stores/exploreStore.ts +++ b/packages/web/src/stores/exploreStore.ts @@ -50,6 +50,24 @@ export const useExploreStore = create((set, get) => ({ fetchSpaces: async (query?: string) => { set({ isLoading: true, error: null }); + // Wait for autoConnectAll to finish if it hasn't yet. + // This prevents fetching with an incomplete/empty instance list on page reload. + if (!useInstanceStore.getState()._autoConnectDone) { + await new Promise((resolve) => { + const unsub = useInstanceStore.subscribe((state) => { + if (state._autoConnectDone) { + unsub(); + resolve(); + } + }); + // Re-check after subscribing to avoid TOCTOU race + if (useInstanceStore.getState()._autoConnectDone) { + unsub(); + resolve(); + } + }); + } + try { const instances = useInstanceStore.getState().instances; const connectedInstances = instances.filter(i => i.status === 'connected');