From df84a877f2b77c67c88dde3b4885e8ff409d672d Mon Sep 17 00:00:00 2001 From: Lukas May Date: Thu, 5 Mar 2026 21:58:02 +0100 Subject: [PATCH] fix: Prioritize polled preview status over mutation pending state The startPreview mutation blocks server-side through the entire Docker build + health check + seed cycle. isPending was checked first, so even after polling detected containers running, the UI stayed on "Building..." until the full mutation resolved. Now polled status (running/failed) takes priority, falling back to isPending only when no status exists. --- .../web/src/components/review/InitiativeReview.tsx | 14 ++++++-------- apps/web/src/components/review/ReviewTab.tsx | 14 ++++++-------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/apps/web/src/components/review/InitiativeReview.tsx b/apps/web/src/components/review/InitiativeReview.tsx index 50b4750..2b7709c 100644 --- a/apps/web/src/components/review/InitiativeReview.tsx +++ b/apps/web/src/components/review/InitiativeReview.tsx @@ -129,15 +129,13 @@ export function InitiativeReview({ initiativeId, onCompleted }: InitiativeReview const previewState = firstProjectId && sourceBranch ? { - status: startPreview.isPending - ? ("building" as const) - : preview?.status === "running" - ? ("running" as const) - : preview?.status === "building" + status: preview?.status === "running" + ? ("running" as const) + : preview?.status === "failed" + ? ("failed" as const) + : (startPreview.isPending || preview?.status === "building") ? ("building" as const) - : preview?.status === "failed" - ? ("failed" as const) - : ("idle" as const), + : ("idle" as const), url: preview?.url ?? undefined, onStart: () => startPreview.mutate({ diff --git a/apps/web/src/components/review/ReviewTab.tsx b/apps/web/src/components/review/ReviewTab.tsx index 7d05afa..2b8b660 100644 --- a/apps/web/src/components/review/ReviewTab.tsx +++ b/apps/web/src/components/review/ReviewTab.tsx @@ -116,15 +116,13 @@ export function ReviewTab({ initiativeId }: ReviewTabProps) { const previewState = firstProjectId && sourceBranch ? { - status: startPreview.isPending - ? ("building" as const) - : preview?.status === "running" - ? ("running" as const) - : preview?.status === "building" + status: preview?.status === "running" + ? ("running" as const) + : preview?.status === "failed" + ? ("failed" as const) + : (startPreview.isPending || preview?.status === "building") ? ("building" as const) - : preview?.status === "failed" - ? ("failed" as const) - : ("idle" as const), + : ("idle" as const), url: preview?.url ?? undefined, onStart: () => startPreview.mutate({