From 9312f0326997f66468d0548f1eb40907d5f66b7a Mon Sep 17 00:00:00 2001 From: Nico Hinderling Date: Wed, 22 Jul 2026 14:37:25 -0700 Subject: [PATCH 1/2] fix(seer): Show list card actions without waiting on runs fetch List-mode overview cards get their section from the server, so the primary action and live-status overlays need only the autofix state query. Passing the combined enrichmentPending as the row's statePending kept the action as a placeholder until the runs query also settled, so cards sat actionless longer than necessary. Wire the row's statePending to the state query alone, and only gate the action behind both queries in focus mode, where the section is derived from enrichment (which reads run.pullRequests for merged evidence) and must not commit to a section while runs is in flight. Claude-Session: https://claude.ai/code/session_01BmNGhiCGfPpuuc1ZyZnHBZ --- .../app/views/seerWorkflows/overview/sectionIssueCard.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/static/app/views/seerWorkflows/overview/sectionIssueCard.tsx b/static/app/views/seerWorkflows/overview/sectionIssueCard.tsx index 16d8d3b8d568..c4a7b0b289c8 100644 --- a/static/app/views/seerWorkflows/overview/sectionIssueCard.tsx +++ b/static/app/views/seerWorkflows/overview/sectionIssueCard.tsx @@ -26,8 +26,11 @@ function HydratedCard({ // endpoint omits issue.autofix_state, so we reconstruct it from enrichment. sectionKey?: AutofixStateKey; }) { - const {run, state, enrichmentPending} = useIssueAutofixEnrichment(issue.id); - const row = buildOverviewRow(issue, run, state, enrichmentPending, statsPeriod); + const {run, state, statePending, enrichmentPending} = useIssueAutofixEnrichment( + issue.id + ); + const classificationPending = sectionKey ? statePending : enrichmentPending; + const row = buildOverviewRow(issue, run, state, classificationPending, statsPeriod); const resolvedSectionKey = sectionKey ?? deriveSectionKey(run, state); const minHeight = enrichmentPending ? `${view === 'cards' ? CARD_PLACEHOLDER_HEIGHT : TABLE_ROW_PLACEHOLDER_HEIGHT}px` From 8a09d4ab73bb7393e5bc624a1246a0ad9d8421d8 Mon Sep 17 00:00:00 2001 From: Nico Hinderling Date: Wed, 22 Jul 2026 14:37:39 -0700 Subject: [PATCH 2/2] fix(seer): Ignore forced single-project selection in empty state Page filters auto-select the only project for single-project orgs, so those users always have a non-empty selection.projects and were shown "No autofix runs match your filters." on a truly empty page instead of "No completed autofix runs yet." Treat the project selection as an active filter only when the org has more than one project, mirroring the enforceSingleProject forcing rule in pageFilters/actions, so a forced selection no longer reads as a deliberate filter. Claude-Session: https://claude.ai/code/session_01BmNGhiCGfPpuuc1ZyZnHBZ --- static/app/views/seerWorkflows/overview/sectionList.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/static/app/views/seerWorkflows/overview/sectionList.tsx b/static/app/views/seerWorkflows/overview/sectionList.tsx index 7d210ace0224..97b897b8e9bc 100644 --- a/static/app/views/seerWorkflows/overview/sectionList.tsx +++ b/static/app/views/seerWorkflows/overview/sectionList.tsx @@ -11,6 +11,7 @@ import {LoadingIndicator} from 'sentry/components/loadingIndicator'; import {Sticky} from 'sentry/components/sticky'; import {t} from 'sentry/locale'; import {useOrganization} from 'sentry/utils/useOrganization'; +import {useProjects} from 'sentry/utils/useProjects'; import {DEFAULT_STATS_PERIOD} from './periods'; import {SectionIssueCard} from './sectionIssueCard'; @@ -43,6 +44,7 @@ export function SectionList({ view: OverviewView; }) { const organization = useOrganization(); + const {projects: orgProjects} = useProjects(); const {sections, isPending, isError, refetch} = useAutofixSections({ enabled, projects, @@ -54,7 +56,8 @@ export function SectionList({ const allSectionsEmpty = sections.every( section => !section.isPending && !section.isError && section.issues.length === 0 ); - const hasNonDefaultFilters = projects.length > 0 || period !== DEFAULT_STATS_PERIOD; + const hasProjectFilter = projects.length > 0 && orgProjects.length > 1; + const hasNonDefaultFilters = hasProjectFilter || period !== DEFAULT_STATS_PERIOD; if (isError) { return ;