From 482f6a20d9f894538f20a85b51fae9a5cbb983d8 Mon Sep 17 00:00:00 2001 From: Dennis Kasper Date: Sun, 7 Jun 2026 15:42:30 +0200 Subject: [PATCH] fix(vcs): prefer fresh refs over cached on branch-list reload When the ref list reloads with `preserveLoadedRefs`, the merge applied the previously-cached refs last, so they overwrote the fresh server entries for overlapping branch names. A stale `current: true` (the branch checked out before an external switch) then survived, leaving two refs both badged "current" in the picker. Pass the fresh refs last so server truth wins while still retaining previously paginated entries. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/client-runtime/src/vcsRefState.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/client-runtime/src/vcsRefState.ts b/packages/client-runtime/src/vcsRefState.ts index e414a5f3de5..aa1297a5b3c 100644 --- a/packages/client-runtime/src/vcsRefState.ts +++ b/packages/client-runtime/src/vcsRefState.ts @@ -229,7 +229,12 @@ export function createVcsRefManager(config: VcsRefManagerConfig) { : options?.preserveLoadedRefs && current && current.refs.length > result.refs.length ? { ...result, - refs: mergeRefs(result.refs, current.refs), + // Fresh server refs must win over previously-loaded ones for + // overlapping names; otherwise a stale `current: true` (e.g. the + // branch you were on before an external checkout) survives and + // you get two refs both badged "current". `mergeRefs` lets the + // second arg overwrite the first, so pass fresh refs last. + refs: mergeRefs(current.refs, result.refs), nextCursor: current.nextCursor, totalCount: Math.max(result.totalCount, current.totalCount), }