From add55a02b66bc9b1d0705acad83796a9f0af53df Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Fri, 10 Apr 2026 14:35:12 -0400 Subject: [PATCH 01/15] feat(ui): Add LLM issue detection toggle to performance settings Add an LLM Issue Detection toggle to the detector threshold settings on the project performance page, using the same performance issues endpoint as other detector toggles. Gated behind gen-ai-features. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../projectPerformance/projectPerformance.tsx | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index cf62a2314974db..9695e1ebd0f2b4 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -92,6 +92,7 @@ enum DetectorConfigAdmin { FUNCTION_DURATION_REGRESSION_ENABLED = 'function_duration_regression_detection_enabled', DB_QUERY_INJECTION_ENABLED = 'db_query_injection_detection_enabled', WEB_VITALS_ENABLED = 'web_vitals_detection_enabled', + LLM_ISSUE_DETECTION_ENABLED = 'llm_issue_detection_enabled', } export enum DetectorConfigCustomer { @@ -590,6 +591,25 @@ export function ProjectPerformance() { }, visible: hasWebVitalsSeerSuggestions, }, + [IssueTitle.LLM_DETECTED_EXPERIMENTAL_V2]: { + name: DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED, + type: 'boolean', + label: t('LLM Issue Detection'), + defaultValue: true, + onChange: value => { + setApiQueryData( + queryClient, + getPerformanceIssueSettingsQueryKey(organization.slug, projectSlug), + data => ({ + ...data!, + llm_issue_detection_enabled: value, + }) + ); + }, + visible: + organization.features.includes('gen-ai-features') && + organization.features.includes('issue-llm-detected-experimental-v2-visible'), + }, }; const performanceRegressionAdminFields: Field[] = [ @@ -1022,6 +1042,11 @@ export function ProjectPerformance() { ], initiallyCollapsed: issueType !== IssueType.WEB_VITALS, }, + { + title: IssueTitle.LLM_DETECTED_EXPERIMENTAL_V2, + fields: [], + initiallyCollapsed: issueType !== IssueType.LLM_DETECTED_EXPERIMENTAL_V2, + }, ]; // If the organization can manage detectors, add the admin field to the existing settings From df0eec12b2f4503217f9f2514c5d23c1e8deb403 Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 09:53:28 -0400 Subject: [PATCH 02/15] feat(ui): Add per-type toggles for AI detected issue categories Each AI detected issue category (HTTP, Database, Runtime Performance, Security, Code Health, General) gets its own toggle as a sub-option under the main AI Issue Detection setting. Sub-options are disabled when the parent toggle is off. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../projectPerformance/projectPerformance.tsx | 77 ++++++++++++++++++- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index 9695e1ebd0f2b4..d9c815a82c0677 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -93,6 +93,12 @@ enum DetectorConfigAdmin { DB_QUERY_INJECTION_ENABLED = 'db_query_injection_detection_enabled', WEB_VITALS_ENABLED = 'web_vitals_detection_enabled', LLM_ISSUE_DETECTION_ENABLED = 'llm_issue_detection_enabled', + AI_DETECTED_HTTP_ENABLED = 'ai_detected_http_enabled', + AI_DETECTED_DB_ENABLED = 'ai_detected_db_enabled', + AI_DETECTED_RUNTIME_PERFORMANCE_ENABLED = 'ai_detected_runtime_performance_enabled', + AI_DETECTED_SECURITY_ENABLED = 'ai_detected_security_enabled', + AI_DETECTED_CODE_HEALTH_ENABLED = 'ai_detected_code_health_enabled', + AI_DETECTED_GENERAL_ENABLED = 'ai_detected_general_enabled', } export enum DetectorConfigCustomer { @@ -594,7 +600,7 @@ export function ProjectPerformance() { [IssueTitle.LLM_DETECTED_EXPERIMENTAL_V2]: { name: DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED, type: 'boolean', - label: t('LLM Issue Detection'), + label: t('AI Issue Detection'), defaultValue: true, onChange: value => { setApiQueryData( @@ -1044,7 +1050,74 @@ export function ProjectPerformance() { }, { title: IssueTitle.LLM_DETECTED_EXPERIMENTAL_V2, - fields: [], + fields: [ + { + name: DetectorConfigAdmin.AI_DETECTED_HTTP_ENABLED, + type: 'boolean' as const, + label: t('HTTP Issues'), + defaultValue: true, + disabled: !( + hasAccess && + performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + ), + disabledReason, + }, + { + name: DetectorConfigAdmin.AI_DETECTED_DB_ENABLED, + type: 'boolean' as const, + label: t('Database Issues'), + defaultValue: true, + disabled: !( + hasAccess && + performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + ), + disabledReason, + }, + { + name: DetectorConfigAdmin.AI_DETECTED_RUNTIME_PERFORMANCE_ENABLED, + type: 'boolean' as const, + label: t('Runtime Performance Issues'), + defaultValue: true, + disabled: !( + hasAccess && + performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + ), + disabledReason, + }, + { + name: DetectorConfigAdmin.AI_DETECTED_SECURITY_ENABLED, + type: 'boolean' as const, + label: t('Security Issues'), + defaultValue: true, + disabled: !( + hasAccess && + performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + ), + disabledReason, + }, + { + name: DetectorConfigAdmin.AI_DETECTED_CODE_HEALTH_ENABLED, + type: 'boolean' as const, + label: t('Code Health Issues'), + defaultValue: true, + disabled: !( + hasAccess && + performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + ), + disabledReason, + }, + { + name: DetectorConfigAdmin.AI_DETECTED_GENERAL_ENABLED, + type: 'boolean' as const, + label: t('General Issues'), + defaultValue: true, + disabled: !( + hasAccess && + performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + ), + disabledReason, + }, + ], initiallyCollapsed: issueType !== IssueType.LLM_DETECTED_EXPERIMENTAL_V2, }, ]; From caf564846a0ae9177e080d171f55c9ca4cb8d3e3 Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 12:02:40 -0400 Subject: [PATCH 03/15] ref(ai-issues): Rename llm_issue_detection to ai_issue_detection in frontend Co-Authored-By: Claude Opus 4.6 (1M context) --- .../projectPerformance/projectPerformance.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index d9c815a82c0677..3256d315fef98a 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -92,7 +92,7 @@ enum DetectorConfigAdmin { FUNCTION_DURATION_REGRESSION_ENABLED = 'function_duration_regression_detection_enabled', DB_QUERY_INJECTION_ENABLED = 'db_query_injection_detection_enabled', WEB_VITALS_ENABLED = 'web_vitals_detection_enabled', - LLM_ISSUE_DETECTION_ENABLED = 'llm_issue_detection_enabled', + AI_ISSUE_DETECTION_ENABLED = 'ai_issue_detection_enabled', AI_DETECTED_HTTP_ENABLED = 'ai_detected_http_enabled', AI_DETECTED_DB_ENABLED = 'ai_detected_db_enabled', AI_DETECTED_RUNTIME_PERFORMANCE_ENABLED = 'ai_detected_runtime_performance_enabled', @@ -598,7 +598,7 @@ export function ProjectPerformance() { visible: hasWebVitalsSeerSuggestions, }, [IssueTitle.LLM_DETECTED_EXPERIMENTAL_V2]: { - name: DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED, + name: DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED, type: 'boolean', label: t('AI Issue Detection'), defaultValue: true, @@ -608,7 +608,7 @@ export function ProjectPerformance() { getPerformanceIssueSettingsQueryKey(organization.slug, projectSlug), data => ({ ...data!, - llm_issue_detection_enabled: value, + ai_issue_detection_enabled: value, }) ); }, @@ -1058,7 +1058,7 @@ export function ProjectPerformance() { defaultValue: true, disabled: !( hasAccess && - performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, }, @@ -1069,7 +1069,7 @@ export function ProjectPerformance() { defaultValue: true, disabled: !( hasAccess && - performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, }, @@ -1080,7 +1080,7 @@ export function ProjectPerformance() { defaultValue: true, disabled: !( hasAccess && - performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, }, @@ -1091,7 +1091,7 @@ export function ProjectPerformance() { defaultValue: true, disabled: !( hasAccess && - performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, }, @@ -1102,7 +1102,7 @@ export function ProjectPerformance() { defaultValue: true, disabled: !( hasAccess && - performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, }, @@ -1113,7 +1113,7 @@ export function ProjectPerformance() { defaultValue: true, disabled: !( hasAccess && - performanceIssueSettings[DetectorConfigAdmin.LLM_ISSUE_DETECTION_ENABLED] + performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, }, From 46291d32608b2034b1f13e41b3e4b3098e422160 Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 13:32:53 -0400 Subject: [PATCH 04/15] fix(issue-detection): Use 'AI Issue Detection' label instead of LLM V2 title Replace IssueTitle.LLM_DETECTED_EXPERIMENTAL_V2 references with plain 'AI Issue Detection' string for the settings section title and admin field key. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../views/settings/projectPerformance/projectPerformance.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index 3256d315fef98a..3dd8879af53a06 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -597,7 +597,7 @@ export function ProjectPerformance() { }, visible: hasWebVitalsSeerSuggestions, }, - [IssueTitle.LLM_DETECTED_EXPERIMENTAL_V2]: { + [DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED]: { name: DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED, type: 'boolean', label: t('AI Issue Detection'), @@ -1049,7 +1049,7 @@ export function ProjectPerformance() { initiallyCollapsed: issueType !== IssueType.WEB_VITALS, }, { - title: IssueTitle.LLM_DETECTED_EXPERIMENTAL_V2, + title: t('AI Issue Detection'), fields: [ { name: DetectorConfigAdmin.AI_DETECTED_HTTP_ENABLED, From a4746378d1afafeb4076f0da7ad288710c46e496 Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:22:50 -0400 Subject: [PATCH 05/15] feat(issue-detection): Add help text to AI detection sub-type toggles Each per-category toggle now has a subtitle explaining what it controls (e.g., "Allow HTTP-related issues to be created"). Co-Authored-By: Claude Opus 4.6 (1M context) --- .../settings/projectPerformance/projectPerformance.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index 3dd8879af53a06..88191897763d52 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -1055,6 +1055,7 @@ export function ProjectPerformance() { name: DetectorConfigAdmin.AI_DETECTED_HTTP_ENABLED, type: 'boolean' as const, label: t('HTTP Issues'), + help: t('Allow HTTP-related issues to be created'), defaultValue: true, disabled: !( hasAccess && @@ -1066,6 +1067,7 @@ export function ProjectPerformance() { name: DetectorConfigAdmin.AI_DETECTED_DB_ENABLED, type: 'boolean' as const, label: t('Database Issues'), + help: t('Allow database-related issues to be created'), defaultValue: true, disabled: !( hasAccess && @@ -1077,6 +1079,7 @@ export function ProjectPerformance() { name: DetectorConfigAdmin.AI_DETECTED_RUNTIME_PERFORMANCE_ENABLED, type: 'boolean' as const, label: t('Runtime Performance Issues'), + help: t('Allow runtime performance issues to be created'), defaultValue: true, disabled: !( hasAccess && @@ -1088,6 +1091,7 @@ export function ProjectPerformance() { name: DetectorConfigAdmin.AI_DETECTED_SECURITY_ENABLED, type: 'boolean' as const, label: t('Security Issues'), + help: t('Allow security-related issues to be created'), defaultValue: true, disabled: !( hasAccess && @@ -1099,6 +1103,7 @@ export function ProjectPerformance() { name: DetectorConfigAdmin.AI_DETECTED_CODE_HEALTH_ENABLED, type: 'boolean' as const, label: t('Code Health Issues'), + help: t('Allow code health issues to be created'), defaultValue: true, disabled: !( hasAccess && @@ -1110,6 +1115,7 @@ export function ProjectPerformance() { name: DetectorConfigAdmin.AI_DETECTED_GENERAL_ENABLED, type: 'boolean' as const, label: t('General Issues'), + help: t('Allow general issues to be created'), defaultValue: true, disabled: !( hasAccess && From 719651fbaf28a526e80876647494d4d2df26096e Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:25:57 -0400 Subject: [PATCH 06/15] fix(issue-detection): Fix parent toggle rendering and remove General toggle The admin field map key must match the section title for the parent toggle to render in the section header. Also removed the General Issues toggle since it doesn't need a separate setting. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../projectPerformance/projectPerformance.tsx | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index 88191897763d52..2e24a0e6894fd3 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -597,7 +597,7 @@ export function ProjectPerformance() { }, visible: hasWebVitalsSeerSuggestions, }, - [DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED]: { + ['AI Issue Detection']: { name: DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED, type: 'boolean', label: t('AI Issue Detection'), @@ -1111,18 +1111,6 @@ export function ProjectPerformance() { ), disabledReason, }, - { - name: DetectorConfigAdmin.AI_DETECTED_GENERAL_ENABLED, - type: 'boolean' as const, - label: t('General Issues'), - help: t('Allow general issues to be created'), - defaultValue: true, - disabled: !( - hasAccess && - performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] - ), - disabledReason, - }, ], initiallyCollapsed: issueType !== IssueType.LLM_DETECTED_EXPERIMENTAL_V2, }, From 527d7e318a39f29c180d0cd51465e840efbb9f3d Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:28:05 -0400 Subject: [PATCH 07/15] fix(issue-detection): Fix parent toggle rendering and clean up help text Use plain string for section title to match admin field map key so the parent toggle renders in the section header. Remove hyphens from help text. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../settings/projectPerformance/projectPerformance.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index 2e24a0e6894fd3..88f7d8a6ff12d3 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -1049,13 +1049,13 @@ export function ProjectPerformance() { initiallyCollapsed: issueType !== IssueType.WEB_VITALS, }, { - title: t('AI Issue Detection'), + title: 'AI Issue Detection', fields: [ { name: DetectorConfigAdmin.AI_DETECTED_HTTP_ENABLED, type: 'boolean' as const, label: t('HTTP Issues'), - help: t('Allow HTTP-related issues to be created'), + help: t('Allow HTTP issues to be created'), defaultValue: true, disabled: !( hasAccess && @@ -1067,7 +1067,7 @@ export function ProjectPerformance() { name: DetectorConfigAdmin.AI_DETECTED_DB_ENABLED, type: 'boolean' as const, label: t('Database Issues'), - help: t('Allow database-related issues to be created'), + help: t('Allow database issues to be created'), defaultValue: true, disabled: !( hasAccess && @@ -1091,7 +1091,7 @@ export function ProjectPerformance() { name: DetectorConfigAdmin.AI_DETECTED_SECURITY_ENABLED, type: 'boolean' as const, label: t('Security Issues'), - help: t('Allow security-related issues to be created'), + help: t('Allow security issues to be created'), defaultValue: true, disabled: !( hasAccess && From 5f99a462f5efd630cd297077e53d6c563c083a64 Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:29:23 -0400 Subject: [PATCH 08/15] fix(issue-detection): Add visibility flag to all AI detection fields All fields in the AI Issue Detection section now share the same visibility condition so the entire section is hidden when the feature flags are off. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../projectPerformance/projectPerformance.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index 88f7d8a6ff12d3..c2a02638aa0159 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -200,6 +200,9 @@ export function ProjectPerformance() { }); const hasWebVitalsSeerSuggestions = useHasSeerWebVitalsSuggestions(project); + const hasAIIssueDetection = + organization.features.includes('gen-ai-features') && + organization.features.includes('issue-llm-detected-experimental-v2-visible'); const { data: threshold, @@ -612,9 +615,7 @@ export function ProjectPerformance() { }) ); }, - visible: - organization.features.includes('gen-ai-features') && - organization.features.includes('issue-llm-detected-experimental-v2-visible'), + visible: hasAIIssueDetection, }, }; @@ -1062,6 +1063,7 @@ export function ProjectPerformance() { performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, + visible: hasAIIssueDetection, }, { name: DetectorConfigAdmin.AI_DETECTED_DB_ENABLED, @@ -1074,6 +1076,7 @@ export function ProjectPerformance() { performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, + visible: hasAIIssueDetection, }, { name: DetectorConfigAdmin.AI_DETECTED_RUNTIME_PERFORMANCE_ENABLED, @@ -1086,6 +1089,7 @@ export function ProjectPerformance() { performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, + visible: hasAIIssueDetection, }, { name: DetectorConfigAdmin.AI_DETECTED_SECURITY_ENABLED, @@ -1098,6 +1102,7 @@ export function ProjectPerformance() { performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, + visible: hasAIIssueDetection, }, { name: DetectorConfigAdmin.AI_DETECTED_CODE_HEALTH_ENABLED, @@ -1110,6 +1115,7 @@ export function ProjectPerformance() { performanceIssueSettings[DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED] ), disabledReason, + visible: hasAIIssueDetection, }, ], initiallyCollapsed: issueType !== IssueType.LLM_DETECTED_EXPERIMENTAL_V2, From cfdc491006a91dbe83ca8401eb3e08fbf9628627 Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:38:50 -0400 Subject: [PATCH 09/15] update feature flag --- .../settings/projectPerformance/projectPerformance.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index c2a02638aa0159..ddfe2595570c68 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -200,9 +200,10 @@ export function ProjectPerformance() { }); const hasWebVitalsSeerSuggestions = useHasSeerWebVitalsSuggestions(project); - const hasAIIssueDetection = - organization.features.includes('gen-ai-features') && - organization.features.includes('issue-llm-detected-experimental-v2-visible'); + // const hasAIIssueDetection = + // organization.features.includes('gen-ai-features') && + // organization.features.includes('ai-issue-detection'); + const hasAIIssueDetection = true; const { data: threshold, From 6ad38fc864f8f4ebbbb7fb92d9b75ba86f192356 Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:41:39 -0400 Subject: [PATCH 10/15] fix(issue-detection): Custom help text for AI detection parent toggle Use AI-specific description instead of the generic "detect this type of issue" text. Reorder the spread so field-level help takes precedence over the generic default. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../settings/projectPerformance/projectPerformance.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index ddfe2595570c68..0fc2a5c8bccd73 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -200,10 +200,9 @@ export function ProjectPerformance() { }); const hasWebVitalsSeerSuggestions = useHasSeerWebVitalsSuggestions(project); - // const hasAIIssueDetection = - // organization.features.includes('gen-ai-features') && - // organization.features.includes('ai-issue-detection'); - const hasAIIssueDetection = true; + const hasAIIssueDetection = + organization.features.includes('gen-ai-features') && + organization.features.includes('ai-issue-detection'); const { data: threshold, @@ -605,6 +604,7 @@ export function ProjectPerformance() { name: DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED, type: 'boolean', label: t('AI Issue Detection'), + help: t('Controls whether or not Sentry runs AI issue detection on your traces.'), defaultValue: true, onChange: value => { setApiQueryData( @@ -1133,10 +1133,10 @@ export function ProjectPerformance() { ...fieldGroup, fields: [ { - ...manageField, help: t( 'Controls whether or not Sentry should detect this type of issue.' ), + ...manageField, disabled: !hasAccess, disabledReason: t('You do not have permission to manage detectors.'), }, From 9e980406f8fdf19500af7bd90b2aa6c196abdd7f Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:43:52 -0400 Subject: [PATCH 11/15] fix(issue-detection): Wrap AI Issue Detection title in t() for i18n Use a shared constant for the title so the admin field map key, label, and section title all reference the same translated string. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../settings/projectPerformance/projectPerformance.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index 0fc2a5c8bccd73..00e8437d742273 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -203,6 +203,7 @@ export function ProjectPerformance() { const hasAIIssueDetection = organization.features.includes('gen-ai-features') && organization.features.includes('ai-issue-detection'); + const aiIssueDetectionTitle = t('AI Issue Detection'); const { data: threshold, @@ -600,10 +601,10 @@ export function ProjectPerformance() { }, visible: hasWebVitalsSeerSuggestions, }, - ['AI Issue Detection']: { + [aiIssueDetectionTitle]: { name: DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED, type: 'boolean', - label: t('AI Issue Detection'), + label: aiIssueDetectionTitle, help: t('Controls whether or not Sentry runs AI issue detection on your traces.'), defaultValue: true, onChange: value => { @@ -1051,7 +1052,7 @@ export function ProjectPerformance() { initiallyCollapsed: issueType !== IssueType.WEB_VITALS, }, { - title: 'AI Issue Detection', + title: aiIssueDetectionTitle, fields: [ { name: DetectorConfigAdmin.AI_DETECTED_HTTP_ENABLED, From 2ff25d204961ae15773c9ed94519557524883d60 Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:45:56 -0400 Subject: [PATCH 12/15] ref(issue-detection): Use IssueTitle.AI_DETECTED_GENERAL for section title Match the pattern used by other detection sections instead of a local variable. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../settings/projectPerformance/projectPerformance.tsx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index 00e8437d742273..c01a6507ec25c2 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -203,7 +203,6 @@ export function ProjectPerformance() { const hasAIIssueDetection = organization.features.includes('gen-ai-features') && organization.features.includes('ai-issue-detection'); - const aiIssueDetectionTitle = t('AI Issue Detection'); const { data: threshold, @@ -601,10 +600,10 @@ export function ProjectPerformance() { }, visible: hasWebVitalsSeerSuggestions, }, - [aiIssueDetectionTitle]: { + [IssueTitle.AI_DETECTED_GENERAL]: { name: DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED, type: 'boolean', - label: aiIssueDetectionTitle, + label: IssueTitle.AI_DETECTED_GENERAL, help: t('Controls whether or not Sentry runs AI issue detection on your traces.'), defaultValue: true, onChange: value => { @@ -1052,7 +1051,7 @@ export function ProjectPerformance() { initiallyCollapsed: issueType !== IssueType.WEB_VITALS, }, { - title: aiIssueDetectionTitle, + title: IssueTitle.AI_DETECTED_GENERAL, fields: [ { name: DetectorConfigAdmin.AI_DETECTED_HTTP_ENABLED, From 1a75c5f88a2d3b867306c9026ebc3ca41ec5e3aa Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:47:37 -0400 Subject: [PATCH 13/15] ref(issue-detection): Replace LLM_DETECTED_EXPERIMENTAL_V2 with AI_DETECTED_GENERAL Co-Authored-By: Claude Opus 4.6 (1M context) --- .../views/settings/projectPerformance/projectPerformance.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index c01a6507ec25c2..6e36c85ebc6ae4 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -1119,7 +1119,7 @@ export function ProjectPerformance() { visible: hasAIIssueDetection, }, ], - initiallyCollapsed: issueType !== IssueType.LLM_DETECTED_EXPERIMENTAL_V2, + initiallyCollapsed: issueType !== IssueType.AI_DETECTED_GENERAL, }, ]; From de128b962c36e1013bb16a520a32ac2070d8d8ce Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:50:01 -0400 Subject: [PATCH 14/15] fix(issue-detection): Use 'AI Issue Detection' for parent toggle label Section title stays as IssueTitle.AI_DETECTED_GENERAL ('AI Detected Issue'), parent toggle label is 'AI Issue Detection'. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../settings/projectPerformance/projectPerformance.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index 6e36c85ebc6ae4..dda86753e8b6b7 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -200,10 +200,7 @@ export function ProjectPerformance() { }); const hasWebVitalsSeerSuggestions = useHasSeerWebVitalsSuggestions(project); - const hasAIIssueDetection = - organization.features.includes('gen-ai-features') && - organization.features.includes('ai-issue-detection'); - + const hasAIIssueDetection = true; const { data: threshold, isPending: isPendingThreshold, @@ -603,7 +600,7 @@ export function ProjectPerformance() { [IssueTitle.AI_DETECTED_GENERAL]: { name: DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED, type: 'boolean', - label: IssueTitle.AI_DETECTED_GENERAL, + label: t('AI Issue Detection'), help: t('Controls whether or not Sentry runs AI issue detection on your traces.'), defaultValue: true, onChange: value => { From bea0ec70d7f154f1475cf9b21f8553f3f446df68 Mon Sep 17 00:00:00 2001 From: Richard Roggenkemper Date: Wed, 15 Apr 2026 15:52:14 -0400 Subject: [PATCH 15/15] fix(issue-detection): Change section title to 'AI Detected' Co-Authored-By: Claude Opus 4.6 (1M context) --- .../settings/projectPerformance/projectPerformance.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/static/app/views/settings/projectPerformance/projectPerformance.tsx b/static/app/views/settings/projectPerformance/projectPerformance.tsx index dda86753e8b6b7..6e36c85ebc6ae4 100644 --- a/static/app/views/settings/projectPerformance/projectPerformance.tsx +++ b/static/app/views/settings/projectPerformance/projectPerformance.tsx @@ -200,7 +200,10 @@ export function ProjectPerformance() { }); const hasWebVitalsSeerSuggestions = useHasSeerWebVitalsSuggestions(project); - const hasAIIssueDetection = true; + const hasAIIssueDetection = + organization.features.includes('gen-ai-features') && + organization.features.includes('ai-issue-detection'); + const { data: threshold, isPending: isPendingThreshold, @@ -600,7 +603,7 @@ export function ProjectPerformance() { [IssueTitle.AI_DETECTED_GENERAL]: { name: DetectorConfigAdmin.AI_ISSUE_DETECTION_ENABLED, type: 'boolean', - label: t('AI Issue Detection'), + label: IssueTitle.AI_DETECTED_GENERAL, help: t('Controls whether or not Sentry runs AI issue detection on your traces.'), defaultValue: true, onChange: value => {