From d925ab69baa77ce952d4fc4f8cbd6a35b0048546 Mon Sep 17 00:00:00 2001 From: Alex Ross <38270282+alexr00@users.noreply.github.com> Date: Mon, 10 Aug 2026 15:42:46 +0200 Subject: [PATCH] CCR feedback from PR view disappearing --- src/test/view/reviewManager.test.ts | 33 +++++++++++++++++++++++++++++ src/view/reviewManager.ts | 5 +++++ 2 files changed, 38 insertions(+) diff --git a/src/test/view/reviewManager.test.ts b/src/test/view/reviewManager.test.ts index 0818a90ffa..f2c017feeb 100644 --- a/src/test/view/reviewManager.test.ts +++ b/src/test/view/reviewManager.test.ts @@ -239,6 +239,39 @@ describe('ReviewManager polling', function () { assert.strictEqual(checkGitHubForPrBranch.called, false); }); + it('keeps an explicit pull request selected when validation overlaps its checkout', async function () { + await repository.createBranch('feature', true, 'head-sha'); + let resolveUpdateRepositories!: (updated: boolean) => void; + sinon.stub(manager, 'updateRepositories').returns(new Promise(resolve => { + resolveUpdateRepositories = resolve; + })); + const localMetadata = sinon.stub(manager, 'getMatchingPullRequestMetadataForBranch'); + const requestedPullRequest = { + number: 7231, + remote: { + owner: 'owner', + repositoryName: 'repo', + }, + } as PullRequestModel; + const internal = reviewManager as unknown as { + _switchedToPullRequest?: PullRequestModel; + _switchedToPullRequestBranch?: string; + validateState(silent: boolean, updateLayout: boolean): Promise; + }; + + const validation = internal.validateState(true, false); + await flushMicrotasks(); + reviewManager.switchingToReviewMode = true; + internal._switchedToPullRequest = requestedPullRequest; + internal._switchedToPullRequestBranch = undefined; + resolveUpdateRepositories(true); + await validation; + + assert.strictEqual(internal._switchedToPullRequest, requestedPullRequest); + assert.strictEqual(internal._switchedToPullRequestBranch, undefined); + assert.strictEqual(localMetadata.called, false); + }); + it('rechecks GitHub when active pull request metadata was not persisted', async function () { await repository.createBranch('feature', true, 'head-sha'); sinon.stub(manager, 'updateRepositories').resolves(true); diff --git a/src/view/reviewManager.ts b/src/view/reviewManager.ts index b1460767b3..396e5d0ba7 100644 --- a/src/view/reviewManager.ts +++ b/src/view/reviewManager.ts @@ -643,6 +643,11 @@ export class ReviewManager extends Disposable { return; } + // An explicit PR checkout is still in progress, so its destination branch is not known yet. + if (this._switchedToPullRequest && !this._switchedToPullRequestBranch && this.switchingToReviewMode) { + this._lastCommitSha = oldLastCommitSha; + return; + } let switchedToPullRequest: PullRequestModel | undefined; if (this._switchedToPullRequest && this._switchedToPullRequestBranch && this._switchedToPullRequestBranch === branch.name) { switchedToPullRequest = this._switchedToPullRequest;