diff --git a/services/apps/merge_suggestions_worker/src/memberSimilarityCalculator.ts b/services/apps/merge_suggestions_worker/src/memberSimilarityCalculator.ts index 9efdf84250..d966597f20 100644 --- a/services/apps/merge_suggestions_worker/src/memberSimilarityCalculator.ts +++ b/services/apps/merge_suggestions_worker/src/memberSimilarityCalculator.ts @@ -178,7 +178,18 @@ class MemberSimilarityCalculator { if ( similarMember.keyword_displayName.toLowerCase() === primaryMember.displayName.toLowerCase() ) { - return this.decideMemberSimilarityUsingAdditionalChecks(primaryMember, similarMember) + const dn = primaryMember.displayName.toLowerCase().trim() + if (isOsReservedName(dn)) { + return this.LOW_CONFIDENCE_SCORE + } + // Single-word names (first-name-only, handles) are too ambiguous without a corroborating + // signal. Multi-word names (full names) are treated as high-confidence on their own. + const isFullName = dn.includes(' ') + return this.decideMemberSimilarityUsingAdditionalChecks( + primaryMember, + similarMember, + isFullName ? undefined : this.HIGH_CONFIDENCE_SCORE, + ) } // calculate similarity percentage diff --git a/services/apps/merge_suggestions_worker/src/utils.ts b/services/apps/merge_suggestions_worker/src/utils.ts index 96880f239b..f31ea99d13 100644 --- a/services/apps/merge_suggestions_worker/src/utils.ts +++ b/services/apps/merge_suggestions_worker/src/utils.ts @@ -52,7 +52,16 @@ export function stripProtocol(value: string) { // Generic git user.name placeholders and OS account names that are never a real human // identity — shared across unrelated machines and meaningless as a merge signal. -const OS_RESERVED_NAMES = new Set(['unknown', 'root', 'ubuntu', 'admin', 'user', 'guest']) +const OS_RESERVED_NAMES = new Set([ + 'unknown', + 'root', + 'ubuntu', + 'admin', + 'user', + 'guest', + '[[unknown]] [not provided]', + 'deleted user', +]) export function isOsReservedName(name: string): boolean { return OS_RESERVED_NAMES.has(name.trim().toLowerCase())