From 8b6e4cb03a184ff461fba53b9949a88281c5674f Mon Sep 17 00:00:00 2001 From: can1357 Date: Wed, 8 Jul 2026 14:44:52 +0200 Subject: [PATCH] fix(coding-agent): validate live github ref completions --- .../test/modes/github-ref-autocomplete.test.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/coding-agent/test/modes/github-ref-autocomplete.test.ts b/packages/coding-agent/test/modes/github-ref-autocomplete.test.ts index ba77380fa..0cd330b42 100644 --- a/packages/coding-agent/test/modes/github-ref-autocomplete.test.ts +++ b/packages/coding-agent/test/modes/github-ref-autocomplete.test.ts @@ -132,6 +132,21 @@ describe("github-ref autocomplete — provider integration", () => { expect(result.lines).toEqual(["review pr://3164 "]); }); + it("revalidates stale prefixes against the live cursor token before applying", async () => { + const provider = makeProvider(); + const staleSuggestions = await provider.getSuggestions(["review #316"], 0, 11); + expect(staleSuggestions).not.toBeNull(); + const stalePr = staleSuggestions!.items[0]!; + + const updatedNumber = provider.applyCompletion(["review #3164"], 0, 12, stalePr, staleSuggestions!.prefix); + expect(updatedNumber.lines).toEqual(["review pr://3164 "]); + expect(updatedNumber.cursorCol).toBe("review pr://3164 ".length); + + const embeddedHash = provider.applyCompletion(["owner/repo#3164"], 0, 15, stalePr, staleSuggestions!.prefix); + expect(embeddedHash.lines).toEqual(["owner/repo#3164"]); + expect(embeddedHash.cursorCol).toBe(15); + }); + it("does not offer candidates for embedded hashes (falls through to other providers)", async () => { const provider = makeProvider(); const isRef = (value: string) => value.startsWith("pr://") || value.startsWith("issue://");