diff --git a/src/renderer/utils/forges/github/graphql/pull.graphql b/src/renderer/utils/forges/github/graphql/pull.graphql index 36e4787f7..a2bd0443e 100644 --- a/src/renderer/utils/forges/github/graphql/pull.graphql +++ b/src/renderer/utils/forges/github/graphql/pull.graphql @@ -61,7 +61,7 @@ fragment PullRequestDetails on PullRequest { } } } - reviews(last: $lastReviews, orderBy: { field: CREATED_AT, direction: ASC }) { + reviews(last: $lastReviews) { totalCount nodes { ...PullRequestReviewFields diff --git a/src/renderer/utils/forges/github/handlers/pullRequest.ts b/src/renderer/utils/forges/github/handlers/pullRequest.ts index 58f43a301..dee5245ea 100644 --- a/src/renderer/utils/forges/github/handlers/pullRequest.ts +++ b/src/renderer/utils/forges/github/handlers/pullRequest.ts @@ -240,7 +240,16 @@ export function getPullRequestReviewers( { reviewer: GitifyPullRequestReviewer; submittedAt?: string | null } >(); - for (const review of reviews) { + // GitHub no longer guarantees the reviews connection is returned in creation + // order, so sort by submission time (oldest first) to make the "newest wins" + // selection below deterministic regardless of the connection ordering. + const sortedReviews = [...reviews].sort((a, b) => { + const at = a.submittedAt ?? ''; + const bt = b.submittedAt ?? ''; + return at < bt ? -1 : at > bt ? 1 : 0; + }); + + for (const review of sortedReviews) { const user = review.author?.login; if (!user) { continue;