Files
fusion/packages/dashboard/app/utils/taskStatusBadgeLabel.ts
gsxdsm 69bd64d950 FN-8475: show planning status badges in Todo
Restore truthful planning status badges for Coding Ideas tasks across Todo views.

- Replace column-based planning badge suppression with real-status detection
- Render planning badges in board cards and desktop/mobile list rows
- Add regression coverage and a patch changeset

Files changed:
 .changeset/fn-8475-planning-status-badge.md        |  7 ++++
 packages/dashboard/app/components/ListView.tsx     | 11 +++---
 packages/dashboard/app/components/TaskCard.tsx     |  7 ++--
 .../app/components/__tests__/ListView.test.tsx     | 40 ++++++++++++++--------
 .../app/components/__tests__/TaskCard.test.tsx     | 10 +++---
 .../utils/__tests__/taskStatusBadgeLabel.test.ts   | 33 +++++++++---------
 .../dashboard/app/utils/taskStatusBadgeLabel.ts    | 16 ++++-----
 7 files changed, 70 insertions(+), 54 deletions(-)

Fusion-Task-Id: FN-8475

Fusion-Task-Lineage: 98bff84e-bee7-4e3c-b7b2-e0a24709576b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-22 00:15:54 -07:00

55 lines
2.5 KiB
TypeScript

/*
FNXC:MergeQueue 2026-07-15-10:45:
AI merge sets task.status to reviewing/landing for most of the live merge window. Board/list badges must never show those raw engine strings; map the full active-merge pipeline to operator-facing Merging… (and Merging fixes… for merging-fix).
*/
import type { TFunction } from "i18next";
import { isActiveMergeStatus } from "../../../core/src/active-merge-status";
/*
FNXC:TaskStatusBadge 2026-08-19-00:00:
FN-8475 restores truthful status visibility: Coding (Ideas) deliberately plans in Todo,
so a real non-queued task status must not be hidden based only on its board column.
Queued remains an intake-only presentation exclusion at TaskCard and ListView call sites.
*/
export function hasTaskStatusBadge(status: string | null | undefined): boolean {
return typeof status === "string" && status.trim().length > 0;
}
export function getTaskStatusBadgeLabel(
status: string | null | undefined,
t: TFunction<"app">,
/*
FNXC:TaskStatusBadge 2026-07-19-02:55 (U12 / R2 / R11):
Workflow-step state wins over the raw status vocabulary. A card whose Plan Review is running
reads "Plan Review" — the step's own IR-declared name — instead of the engine token "planning"
or "needs-replan". Pass `getRunningWorkflowStepLabel(task)` here; omit it and the legacy status
mapping below is unchanged, so every existing caller keeps its behavior.
*/
workflowStepLabel?: string,
): string {
/*
FNXC:TaskStatusBadge 2026-07-19-09:40:
Every active-merge status ("merging", "merging-pr", "merging-fix", "reviewing", "landing") must
win over a still-running workflow-step label (a pre-merge step's startedAt-without-completedAt
state can survive into the merge pipeline). Checking the status before the workflow-step override
enforces this for every caller (TaskCard, ListView grouped rows, ListView table rows) instead of
relying on per-call-site pre-checks. "merging-fix" keeps its distinct "Merging fixes…" label.
*/
if (isActiveMergeStatus(status)) {
return status === "merging-fix"
? t("tasks.statusMergingFix", "Merging fixes…")
: t("tasks.statusMerging", "Merging…");
}
if (workflowStepLabel) return workflowStepLabel;
if (!status) return "";
/*
FNXC:TaskStatusBadge 2026-07-28-00:00:
FN-8195 requires the raw engine status "needs-replan" to appear as "Replan" on board cards
and list rows. Keep the task.status token unchanged and map centrally so both consumers agree.
*/
if (status === "needs-replan") {
return t("tasks.statusReplan", "Replan");
}
return status;
}