From 4d1d601f8fbf935b84c6303a2e40484781355951 Mon Sep 17 00:00:00 2001 From: Tony Xiao Date: Wed, 24 Jun 2026 13:36:27 -0400 Subject: [PATCH 1/2] feat(autofix): Add route analytics params for Seer setup state Track whether users need org-level SCM setup, project-level repo linking, or Seer quota on the issue details page. These params feed into the issue details route analytics event. The org/project setup params emit undefined while the onboarding check query is still loading to avoid false positives. The quota param is negated from hasAutofixQuota so true means the user needs quota. Co-Authored-By: Claude Opus 4 --- .../issueDetails/sidebar/autofixSection.tsx | 21 ++++++++++++------- .../ai/aiConfigureSeerQuotaSidebar.tsx | 5 +++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/static/app/views/issueDetails/sidebar/autofixSection.tsx b/static/app/views/issueDetails/sidebar/autofixSection.tsx index 10107dfd13680a..d09921266afdb7 100644 --- a/static/app/views/issueDetails/sidebar/autofixSection.tsx +++ b/static/app/views/issueDetails/sidebar/autofixSection.tsx @@ -170,6 +170,19 @@ export function AutofixContent({aiConfig, group, project}: AutofixContentProps) useLLMContext(autofixContextData); + const needOrgSetup = + // scm integration doesn't exist + !setupCheck?.hasSupportedScmIntegration; + + const needProjSetup = + // scm integration not linked to project + !aiConfig.seerReposLinked; + + useRouteAnalyticsParams({ + seerNeedOrgSetup: isPending ? undefined : needOrgSetup, + seerNeedProjSetup: isPending ? undefined : needProjSetup, + }); + if ( // waiting on the onboarding checks to load isPending || @@ -183,14 +196,6 @@ export function AutofixContent({aiConfig, group, project}: AutofixContentProps) return ; } - const needOrgSetup = - // scm integration doesn't exist - !setupCheck?.hasSupportedScmIntegration; - - const needProjSetup = - // scm integration not linked to project - !aiConfig.seerReposLinked; - // non seat based seer plans are allowed to run autofix without the SCM integration if (organization.features.includes('seat-based-seer-enabled')) { if (needOrgSetup || needProjSetup) { diff --git a/static/gsApp/components/ai/aiConfigureSeerQuotaSidebar.tsx b/static/gsApp/components/ai/aiConfigureSeerQuotaSidebar.tsx index 668dc71685140b..53a87015c04eaf 100644 --- a/static/gsApp/components/ai/aiConfigureSeerQuotaSidebar.tsx +++ b/static/gsApp/components/ai/aiConfigureSeerQuotaSidebar.tsx @@ -6,6 +6,7 @@ import {Tooltip} from '@sentry/scraps/tooltip'; import {Placeholder} from 'sentry/components/placeholder'; import {IconOpen} from 'sentry/icons/iconOpen'; import {t} from 'sentry/locale'; +import {useRouteAnalyticsParams} from 'sentry/utils/routeAnalytics/useRouteAnalyticsParams'; import {useOrganization} from 'sentry/utils/useOrganization'; import {AutofixContent} from 'sentry/views/issueDetails/sidebar/autofixSection'; import type {AutofixContentProps} from 'sentry/views/issueDetails/sidebar/autofixSectionTypes'; @@ -21,6 +22,10 @@ export function AiConfigureSeerQuotaSidebar({ const organization = useOrganization(); const subscription = useSubscription(); + useRouteAnalyticsParams({ + seerNeedQuota: !aiConfig.hasAutofixQuota, + }); + if (aiConfig.isAutofixSetupLoading) { return ; } From 8a6fc6beec3bb6fc22eaa7e127e8aa3e29e2a876 Mon Sep 17 00:00:00 2001 From: Tony Xiao Date: Wed, 24 Jun 2026 13:58:46 -0400 Subject: [PATCH 2/2] fix pr comments --- static/app/views/issueDetails/sidebar/autofixSection.tsx | 3 ++- static/gsApp/components/ai/aiConfigureSeerQuotaSidebar.tsx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/static/app/views/issueDetails/sidebar/autofixSection.tsx b/static/app/views/issueDetails/sidebar/autofixSection.tsx index d09921266afdb7..a761ea0bfbea06 100644 --- a/static/app/views/issueDetails/sidebar/autofixSection.tsx +++ b/static/app/views/issueDetails/sidebar/autofixSection.tsx @@ -180,7 +180,8 @@ export function AutofixContent({aiConfig, group, project}: AutofixContentProps) useRouteAnalyticsParams({ seerNeedOrgSetup: isPending ? undefined : needOrgSetup, - seerNeedProjSetup: isPending ? undefined : needProjSetup, + seerNeedProjSetup: + isPending || aiConfig.isAutofixSetupLoading ? undefined : needProjSetup, }); if ( diff --git a/static/gsApp/components/ai/aiConfigureSeerQuotaSidebar.tsx b/static/gsApp/components/ai/aiConfigureSeerQuotaSidebar.tsx index 53a87015c04eaf..6b11e8bd4ffba9 100644 --- a/static/gsApp/components/ai/aiConfigureSeerQuotaSidebar.tsx +++ b/static/gsApp/components/ai/aiConfigureSeerQuotaSidebar.tsx @@ -23,7 +23,7 @@ export function AiConfigureSeerQuotaSidebar({ const subscription = useSubscription(); useRouteAnalyticsParams({ - seerNeedQuota: !aiConfig.hasAutofixQuota, + seerNeedQuota: aiConfig.isAutofixSetupLoading ? undefined : !aiConfig.hasAutofixQuota, }); if (aiConfig.isAutofixSetupLoading) {