From e9723a3ab33bcc332a2c6c92f617edc47de59ced Mon Sep 17 00:00:00 2001 From: Justin Bisignano Date: Fri, 1 May 2026 17:21:53 -0600 Subject: [PATCH] fix: make trigger_phrase match case-insensitive GitHub @-mention autocomplete inserts @Claude (capitalized) when users pick the bot from the dropdown, but the trigger regex had no 'i' flag, so the action would log 'No trigger was met for @claude' and exit. The workflow's outer 'if: contains(...)' gate is case-insensitive, so the job runs and looks like it silently ignored the user. The regex was case-sensitive since the initial commit with no test asserting either behavior; the existing tests focus on word-boundary precision (email@claude.com etc.), not case. --- src/github/validation/trigger.ts | 4 ++++ test/trigger-validation.test.ts | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/github/validation/trigger.ts b/src/github/validation/trigger.ts index 74b385d8d..01724e0f0 100644 --- a/src/github/validation/trigger.ts +++ b/src/github/validation/trigger.ts @@ -51,6 +51,7 @@ export function checkContainsTrigger(context: ParsedGitHubContext): boolean { // Check for exact match with word boundaries or punctuation const regex = new RegExp( `(^|\\s)${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`, + "i", ); // Check in body @@ -77,6 +78,7 @@ export function checkContainsTrigger(context: ParsedGitHubContext): boolean { // Check for exact match with word boundaries or punctuation const regex = new RegExp( `(^|\\s)${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`, + "i", ); // Check in body @@ -105,6 +107,7 @@ export function checkContainsTrigger(context: ParsedGitHubContext): boolean { // Check for exact match with word boundaries or punctuation const regex = new RegExp( `(^|\\s)${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`, + "i", ); if (regex.test(reviewBody)) { console.log( @@ -125,6 +128,7 @@ export function checkContainsTrigger(context: ParsedGitHubContext): boolean { // Check for exact match with word boundaries or punctuation const regex = new RegExp( `(^|\\s)${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`, + "i", ); if (regex.test(commentBody)) { console.log(`Comment contains exact trigger phrase '${triggerPhrase}'`); diff --git a/test/trigger-validation.test.ts b/test/trigger-validation.test.ts index f235928b8..275164327 100644 --- a/test/trigger-validation.test.ts +++ b/test/trigger-validation.test.ts @@ -186,6 +186,8 @@ describe("checkContainsTrigger", () => { { issueBody: "@claude: here's the issue", expected: true }, { issueBody: "@claude; and another thing", expected: true }, { issueBody: "Hey @claude, can you help?", expected: true }, + { issueBody: "@Claude can you help?", expected: true }, + { issueBody: "@CLAUDE fix this", expected: true }, { issueBody: "claudette contains claude", expected: false }, { issueBody: "email@claude.com", expected: false }, ];