diff --git a/apps/staged/src/lib/features/branches/BranchCardPrButton.svelte b/apps/staged/src/lib/features/branches/BranchCardPrButton.svelte index 7cf4c0a0a..4a1972b90 100644 --- a/apps/staged/src/lib/features/branches/BranchCardPrButton.svelte +++ b/apps/staged/src/lib/features/branches/BranchCardPrButton.svelte @@ -82,6 +82,7 @@ // PR status polling state let prStatusPollTimer: ReturnType | null = null; let prStatusRefreshing = $state(false); + let lastImmediateRefreshPrNumber = $state(null); // PR status fields (local state, updated via events) let prStatusState = $state(null); @@ -281,6 +282,26 @@ }; }); + // Kick off an immediate refresh whenever this branch gains a PR number. + // This covers branches hydrated after mount, such as project/repo creation from an existing PR. + $effect(() => { + const prNumber = branch.prNumber; + + if (!prNumber) { + lastImmediateRefreshPrNumber = null; + return; + } + + if (!isWindowFocused || prStatusRefreshing || lastImmediateRefreshPrNumber === prNumber) { + return; + } + + lastImmediateRefreshPrNumber = prNumber; + commands + .refreshPrStatus(branch.id) + .catch((e) => console.error('Failed to fetch initial PR status:', e)); + }); + onMount(() => { window.addEventListener('keydown', handleOptionDown); window.addEventListener('keyup', handleOptionUp); @@ -298,12 +319,6 @@ }; window.addEventListener('focus', handleFocus); window.addEventListener('blur', handleBlur); - - if (branch.prNumber) { - commands - .refreshPrStatus(branch.id) - .catch((e) => console.error('Failed to fetch initial PR status:', e)); - } }); onDestroy(() => { diff --git a/apps/staged/src/lib/listeners/sessionStatusListener.ts b/apps/staged/src/lib/listeners/sessionStatusListener.ts index 2c0a7cb50..9a13c0f8d 100644 --- a/apps/staged/src/lib/listeners/sessionStatusListener.ts +++ b/apps/staged/src/lib/listeners/sessionStatusListener.ts @@ -111,7 +111,15 @@ async function handlePrCompletion(sessionId: string, branchId: string, status: s try { await commands.updateBranchPr(branchId, prNumber); } catch (storageError) { - console.error('Failed to persist PR number to storage:', storageError); + console.error('Failed to persist PR state after creation:', storageError); + prStateStore.setPrError(branchId, 'Failed to save PR details after creation.'); + return; + } + + try { + await commands.refreshPrStatus(branchId); + } catch (refreshError) { + console.error('Failed to refresh PR state after creation:', refreshError); } } prStateStore.setPrCreated(branchId, foundUrl);