From 7e4e892fce82a1aa940f2290bdf024eab6f1616b Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Fri, 31 Jul 2026 20:33:34 -0700 Subject: [PATCH] =?UTF-8?q?fix(dashboard):=20one=20queued=20badge=20family?= =?UTF-8?q?=20=E2=80=94=20map=20raw=20'queued',=20fold=20queued-to-plan=20?= =?UTF-8?q?into=20the=20status=20badge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- .changeset/one-queued-badge-family.md | 7 ++++ .../dashboard/app/components/TaskCard.tsx | 33 ++++++++++--------- .../app/utils/taskStatusBadgeLabel.ts | 8 +++++ 3 files changed, 32 insertions(+), 16 deletions(-) create mode 100644 .changeset/one-queued-badge-family.md diff --git a/.changeset/one-queued-badge-family.md b/.changeset/one-queued-badge-family.md new file mode 100644 index 0000000000..4e7eff5578 --- /dev/null +++ b/.changeset/one-queued-badge-family.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": patch +--- + +summary: One queued badge family — scheduler-queued cards read "Queued", and Queued to plan is the same badge as Planning. +category: fix +dev: Raw status "queued" no longer renders the lowercase engine token; the standalone queued-to-plan pill is removed and folds into the main status badge span (same classes/tooltip, testid preserved), so a card can never show two queued labels. diff --git a/packages/dashboard/app/components/TaskCard.tsx b/packages/dashboard/app/components/TaskCard.tsx index d328110ae3..4cfccd58de 100644 --- a/packages/dashboard/app/components/TaskCard.tsx +++ b/packages/dashboard/app/components/TaskCard.tsx @@ -3392,7 +3392,15 @@ function TaskCardComponent({ ? t("tasks.needsInput", "Needs input") : isTransientPlannerActive ? t("tasks.statusPlanning", "Planning") - : getTaskStatusLabel(visualStatus ?? "", t, showOptionalGateBadge ? undefined : getRunningWorkflowStepLabel(task), { idle: !isAgentActive, overlapBlockedBy: task.overlapBlockedBy ?? null }); + /* + FNXC:TaskStatusBadge 2026-08-01-03:20 (operator: ONE queued badge family, no dupes): + Queued-to-plan renders through THIS badge now — same span, same family as Planning — + instead of the standalone `queued-to-plan` pill it used to be (removed below). One card, + one badge; the muted modifier class and testid survive on this span. + */ + : showQueuedToPlanBadge + ? t("tasks.queuedToPlan", "Queued to plan") + : getTaskStatusLabel(visualStatus ?? "", t, showOptionalGateBadge ? undefined : getRunningWorkflowStepLabel(task), { idle: !isAgentActive, overlapBlockedBy: task.overlapBlockedBy ?? null }); const hasCardMetaBadges = showPriorityBadge || task.executionMode === "fast" // FNXC:PlannerOversight 2026-07-04-00:00: the oversight badge is opt-in @@ -3536,9 +3544,9 @@ function TaskCardComponent({ : pausedByAgent ? t("tasks.pausedByAgent", "paused by agent") : t("tasks.paused", "paused")} )} - {showStatusBadge && ( + {(showStatusBadge || showQueuedToPlanBadge) && ( {statusBadgeLabel} @@ -3624,18 +3637,6 @@ function TaskCardComponent({ find. Names the surviving dimension only. Worktrees can also be the binding gate, but only when the operator has worktree limiting on, so it is not stated unconditionally here. */} - {showQueuedToPlanBadge && ( - - {t("tasks.queuedToPlan", "Queued to plan")} - - )} {hasInReviewStall && stallCopy && (