From f95a0ab0f5ec872b8a507cfa9cc356e1d5f1c292 Mon Sep 17 00:00:00 2001 From: scotttong Date: Wed, 5 Aug 2026 02:07:54 -0700 Subject: [PATCH] fix(ui): show plan diagnostics in planning mode --- ui/src/components/issue-properties/IssueProperties.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ui/src/components/issue-properties/IssueProperties.tsx b/ui/src/components/issue-properties/IssueProperties.tsx index bc170f6d7db..f02e08ee1e4 100644 --- a/ui/src/components/issue-properties/IssueProperties.tsx +++ b/ui/src/components/issue-properties/IssueProperties.tsx @@ -185,8 +185,9 @@ export function IssueProperties({ } setPaneHeaderSlot(document.getElementById(PROPERTIES_PANE_HEADER_SLOT_ID)); }, [taskChatRedesignEnabled, inline]); - // Plan/Artifacts only earn a tab when they have content; with neither, the - // header bar shows a plain "Properties" title instead of a one-tab strip. + // Plan earns a tab as soon as an issue is in planning mode, even before the + // plan document arrives. This keeps an expected plan surface visible and + // lets its diagnostic empty state explain what is missing. // Same query keys as the tab bodies, so these share their cached fetches. const { data: paneTabPlanDocument } = useIssuePlanDocument( taskChatRedesignEnabled ? issue.id : null, @@ -201,7 +202,10 @@ export function IssueProperties({ queryFn: () => issuesApi.listAttachments(issue.id), enabled: taskChatRedesignEnabled, }); - const hasPlanTab = Boolean(paneTabPlanDocument) || (paneTabAcceptedPlans?.length ?? 0) > 0; + const hasPlanTab = + Boolean(paneTabPlanDocument) + || (paneTabAcceptedPlans?.length ?? 0) > 0 + || issue.workMode === "planning"; const hasArtifactsTab = (paneTabAttachments?.length ?? 0) > 0; const [paneTab, setPaneTab] = useState("properties"); const [assigneeOpen, setAssigneeOpen] = useState(false);