diff --git a/src/browser/components/pr-review.tsx b/src/browser/components/pr-review.tsx index ab6be31..1a73e48 100644 --- a/src/browser/components/pr-review.tsx +++ b/src/browser/components/pr-review.tsx @@ -763,12 +763,16 @@ function VersionBar() { const reviews = usePRReviewSelector((s) => s.reviews); const currentUser = usePRReviewSelector((s) => s.currentUser); - // Lazy-load version data on first mount (deferred from loadPRData) + // Lazy-load version data when commits are available (deferred from loadPRData). + // Deferring avoids a race: loadPRData populates commits asynchronously, and + // loadVersionData needs actual commits to group into versions. Without this + // guard, the mount-time effect fires before loadPRData finishes, leaving + // commits empty and the last commit's version never created. useEffect(() => { - if (!versionDataLoaded) { + if (!versionDataLoaded && commits.length > 0) { store.loadVersionData(); } - }, [versionDataLoaded, store]); + }, [versionDataLoaded, store, commits]); // Map of SHA → whether it's a merge commit (for showing correct icon in dropdowns) const isMergeCommit = useMemo(() => { diff --git a/src/browser/contexts/pr-review/index.tsx b/src/browser/contexts/pr-review/index.tsx index 0b7f274..fc3be74 100644 --- a/src/browser/contexts/pr-review/index.tsx +++ b/src/browser/contexts/pr-review/index.tsx @@ -3506,13 +3506,17 @@ export class PRReviewStore { * the version/commit selector is first opened. */ loadVersionData = async (): Promise => { if (this.state.versionDataLoaded) return; - const { owner, repo, pr, commits } = this.state; + const { owner, repo, pr } = this.state; try { const pushVersionsData = await this.github .getPushVersions(owner, repo, pr.number) .catch(() => [] as PushVersion[]); + // Read commits from current state — loadPRData may have populated them + // while we waited for push versions (race on initial mount). + const commits = this.state.commits; + // Merge force-push versions with commit-grouped versions const commitVersions = groupCommitsIntoVersions(commits, 2); const seenShas = new Set(pushVersionsData.map((v) => v.sha));