diff --git a/.changeset/needs-replan-queued-tooltip.md b/.changeset/needs-replan-queued-tooltip.md new file mode 100644 index 0000000000..ffcf9906b3 --- /dev/null +++ b/.changeset/needs-replan-queued-tooltip.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": patch +--- + +summary: An idle Revising card now explains it is waiting for a planning slot. +category: fix +dev: needs-replan is a durable waiting state, not a live session; the TaskCard status badge gains a tooltip when no agent is active, mirroring QUEUED TO PLAN's disambiguation. Label copy (FN-8493 "Revising") unchanged. diff --git a/packages/dashboard/app/components/TaskCard.tsx b/packages/dashboard/app/components/TaskCard.tsx index 94d6a7180e..381d4bc993 100644 --- a/packages/dashboard/app/components/TaskCard.tsx +++ b/packages/dashboard/app/components/TaskCard.tsx @@ -3548,7 +3548,22 @@ function TaskCardComponent({ "tasks.awaitingApprovalTitle", "This plan needs your approval before implementation can start.", ) - : undefined + /* + FNXC:TaskStatusBadge 2026-07-31-23:20: + `needs-replan` is a durable WAITING state (the graph's replan signal), not a live + session — the actual revise run surfaces as "planning" once triage re-admits it. + Operators read "Revising" as activity and counted it against the concurrency + panel ("five planning badges, four running agents"); mirror QUEUED TO PLAN's + disambiguation as a tooltip so the label (FN-8493 copy) stays untouched while an + idle Revising card explains itself. Gated on !isAgentActive so a genuinely + running revise cycle keeps no misleading "waiting" text. + */ + : task.status === "needs-replan" && !isAgentActive + ? t( + "tasks.needsReplanQueuedTitle", + "Waiting to revise the plan — the revision starts when a planning slot frees up.", + ) + : undefined } aria-label={isTransientPlannerActive ? t("tasks.statusPlanning", "Planning") : undefined} data-testid={isAwaitingApproval ? `card-awaiting-approval-${task.id}` : undefined}