diff --git a/src/inngest/functions/process-pr-event.test.ts b/src/inngest/functions/process-pr-event.test.ts index e5ca9654..1a80c8d7 100644 --- a/src/inngest/functions/process-pr-event.test.ts +++ b/src/inngest/functions/process-pr-event.test.ts @@ -10,16 +10,16 @@ describe('extractIssueNumbers', () => { expect(extractIssueNumbers('fixes #45 and resolves #67')).toEqual([45, 67]); }); - it('finds bare "#7" references', () => { - expect(extractIssueNumbers('related to #7')).toEqual([7]); + it('ignores bare "#7" references', () => { + expect(extractIssueNumbers('related to #7')).toEqual([]); }); it('dedupes repeated numbers', () => { - expect(extractIssueNumbers('#5 #5 closes #5')).toEqual([5]); + expect(extractIssueNumbers('closes #5 fixes #5')).toEqual([5]); }); it('ignores non-issue # like #foo', () => { - expect(extractIssueNumbers('section #foo and #1')).toEqual([1]); + expect(extractIssueNumbers('section #foo and #1')).toEqual([]); }); it('returns empty on null/empty', () => { diff --git a/src/inngest/functions/process-pr-event.ts b/src/inngest/functions/process-pr-event.ts index e62a6256..7c73a543 100644 --- a/src/inngest/functions/process-pr-event.ts +++ b/src/inngest/functions/process-pr-event.ts @@ -49,13 +49,13 @@ type PrPayload = { }; }; -const ISSUE_REF = /(?:close[sd]?|fixe[sd]?|resolve[sd]?)\s+#(\d+)|#(\d+)/gi; +const ISSUE_REF = /(?:close[sd]?|fixe[sd]?|resolve[sd]?)\s+#(\d+)/gi; export function extractIssueNumbers(text: string | null | undefined): number[] { if (!text) return []; const found = new Set(); for (const m of text.matchAll(ISSUE_REF)) { - const n = parseInt(m[1] ?? m[2] ?? '', 10); + const n = parseInt(m[1] ?? '', 10); if (Number.isFinite(n)) found.add(n); } return [...found]; @@ -170,12 +170,11 @@ async function linkPrToClaim( .is('linked_pr_url', null); for (const claim of claims ?? []) { - const issuesField = claim['issues'] as unknown as { - repo_full_name: string; - github_issue_number: number; - }; - const issue = issuesField; - if (!issue) continue; + const raw = (claim as unknown as { issues: unknown }).issues; + const issue = Array.isArray(raw) + ? (raw[0] as { repo_full_name?: string; github_issue_number?: number } | undefined) + : (raw as { repo_full_name?: string; github_issue_number?: number } | undefined); + if (!issue?.repo_full_name || typeof issue.github_issue_number !== 'number') continue; if (issue.repo_full_name === repo && issueRefs.includes(issue.github_issue_number)) { await sb.from('recommendations').update({ linked_pr_url: prUrl }).eq('id', claim.id); return { linked: true, recId: claim.id };