From 2e836c5cf610e673aa8103d7fd13d91e7db15826 Mon Sep 17 00:00:00 2001 From: Jory Irving Date: Sat, 26 Sep 2026 14:42:59 -0600 Subject: [PATCH] feat(mcp): pass an optional generation through mark_pr_fix --- src/lib/mc-client.test.ts | 12 ++++++++++++ src/lib/mc-client.ts | 1 + src/mcp/server.ts | 7 +++++++ 3 files changed, 20 insertions(+) diff --git a/src/lib/mc-client.test.ts b/src/lib/mc-client.test.ts index 10703056..ae3d820f 100644 --- a/src/lib/mc-client.test.ts +++ b/src/lib/mc-client.test.ts @@ -853,6 +853,18 @@ describe("queue, issues, pr-fix, groomer clients", () => { expect(url).toContain("include_blocked=true"); }); + it("markPrFix forwards the settled generation", async () => { + const { markPrFix } = await import("./mc-client"); + const fetchMock = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce(jsonResponse({ status: "BLOCKED" })); + await markPrFix({ repo: "org/repo", pr: 7, status: "blocked", generation: 3 }); + expect(fetchMock).toHaveBeenCalledWith( + expect.stringContaining("/api/pr-fix-queue/mark"), + expect.objectContaining({ + body: JSON.stringify({ repo: "org/repo", pr: 7, status: "blocked", generation: 3 }), + }), + ); + }); + it("markPrFix POSTs the mark body", async () => { const { markPrFix } = await import("./mc-client"); const fetchMock = vi.spyOn(globalThis, "fetch").mockResolvedValueOnce(jsonResponse({ status: "FIXED" })); diff --git a/src/lib/mc-client.ts b/src/lib/mc-client.ts index 2018a64b..54b9673e 100644 --- a/src/lib/mc-client.ts +++ b/src/lib/mc-client.ts @@ -305,6 +305,7 @@ export async function markPrFix(input: { pr: number; status: string; note?: string; + generation?: number; }): Promise { return mcJson("/api/pr-fix-queue/mark", { method: "POST", diff --git a/src/mcp/server.ts b/src/mcp/server.ts index 37e83f9a..ef0d7f9e 100644 --- a/src/mcp/server.ts +++ b/src/mcp/server.ts @@ -181,6 +181,7 @@ export async function markPrFixHandler(args: ExtraArgs): Promise { pr: args.pr as number, status: args.status as string, note: args.note as string | undefined, + generation: args.generation as number | undefined, }), ); } @@ -376,6 +377,12 @@ export function createServer(): McpServerType { pr: z.number().int().positive().describe("Pull request number"), status: z.string().describe("Outcome: fixed, blocked, stale, or ignored"), note: z.string().optional().describe("Optional note explaining the outcome"), + generation: z + .number() + .int() + .positive() + .optional() + .describe("Queue item generation being settled; agent marks are rejected without it once attempt-token settlement ships (#1074)"), }, }, markPrFixHandler,