diff --git a/scripts/dispatch-issue-triage.ts b/scripts/dispatch-issue-triage.ts index caeb1de1134..6e992ca1f3e 100644 --- a/scripts/dispatch-issue-triage.ts +++ b/scripts/dispatch-issue-triage.ts @@ -1,7 +1,7 @@ #!/usr/bin/env bun import { FLAG_LABEL, githubApi, listAll, type Comment, type GitHubApi } from "./auto-close-duplicates"; -import { CLEAR_LABEL, readConfig, type FlagConfig as DispatchConfig } from "./flag-duplicate-issue"; +import { CLEAR_LABEL, readConfig, WORKFLOW_LOGIN, type FlagConfig as DispatchConfig } from "./flag-duplicate-issue"; import { labelName } from "./issue-labels"; declare const process: { readonly env: Readonly> }; @@ -31,7 +31,6 @@ export type DispatchVerdict = export const BUG_LABEL = labelName("kind", "bug"); export const RUNNING_LABEL = labelName("repro", "running"); export const DISPATCH_MARKER = ""; -export const DISPATCH_AUTHOR = "github-actions[bot]"; export const DISPATCH_COMMENT = [ DISPATCH_MARKER, "Devin is going to try to reproduce this. A PR or a Linear ticket follows if it does. Add repro:skip to opt out", @@ -71,7 +70,7 @@ export function dispatchTarget( if (blocking.length > 0) { return skip(`carries ${blocking.join(", ")}`); } - if (comments.some((comment) => comment.user.login === DISPATCH_AUTHOR && comment.body.includes(DISPATCH_MARKER))) { + if (comments.some((comment) => comment.user.login === WORKFLOW_LOGIN && comment.body.includes(DISPATCH_MARKER))) { return skip("was already dispatched once"); } const pulls = openPullsReferencing(timeline); diff --git a/scripts/flag-duplicate-issue.test.ts b/scripts/flag-duplicate-issue.test.ts index ec646d8f8f5..434355da29d 100644 --- a/scripts/flag-duplicate-issue.test.ts +++ b/scripts/flag-duplicate-issue.test.ts @@ -204,6 +204,18 @@ describe("flagIssue", () => { expect(rerun.writes).toEqual([]); }); + test("a notice marker pasted by a commenter is not a notice", async () => { + const pasted: Comment = { + id: 2, + body: " looks like #10 to me", + created_at: "2026-09-10T00:00:00Z", + user: { type: "User", login: "someone" }, + }; + const { api, writes } = fakeApi(undefined, [pasted]); + expect((await flagIssue(api, config, verdict({ duplicate_of: null }))).kind).toBe("clear"); + expect(writes).toEqual([`POST /repos/BerriAI/litellm/issues/35/labels {"labels":["${CLEAR_LABEL}"]}`]); + }); + test("a failed comment leaves no marker, so the rerun finishes the job", async () => { const commentsPath = "/repos/BerriAI/litellm/issues/35/comments"; const first = fakeApi(undefined, [], [commentsPath]); diff --git a/scripts/flag-duplicate-issue.ts b/scripts/flag-duplicate-issue.ts index f43ac24e57d..08856b87fa9 100644 --- a/scripts/flag-duplicate-issue.ts +++ b/scripts/flag-duplicate-issue.ts @@ -41,6 +41,7 @@ export type FlagVerdict = export const MIN_CONFIDENCE = 0.95; export const NOTICE_MARKER_PREFIX = "