diff --git a/.changeset/remove-task-card-workflow-step-badge.md b/.changeset/remove-task-card-workflow-step-badge.md new file mode 100644 index 0000000000..68d4e5cf29 --- /dev/null +++ b/.changeset/remove-task-card-workflow-step-badge.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": patch +--- + +summary: Remove redundant workflow labels from expanded task-card step lists. +category: fix +dev: Workflow step rows still show names, status dots, and active badges; the aggregate card workflow badge is unchanged. diff --git a/packages/dashboard/app/components/TaskCard.css b/packages/dashboard/app/components/TaskCard.css index 3851af6aef..9d00af6718 100644 --- a/packages/dashboard/app/components/TaskCard.css +++ b/packages/dashboard/app/components/TaskCard.css @@ -1153,30 +1153,6 @@ executing. These map 1:1 to the unified progress status so the dot color encodes text-transform: uppercase; } -.card-step-workflow-badge { - margin-left: auto; - padding: 0 var(--space-xs); - border-radius: var(--radius-pill); - border: 1px solid var(--border); - font-size: 0.5625rem; - color: var(--text-muted); - background: var(--surface); - white-space: nowrap; -} - -.card-step-workflow-badge--pre-merge { - color: var(--in-review); - background: var(--status-in-review-bg); - border-color: color-mix(in srgb, var(--in-review) 35%, var(--border)); -} - -.card-step-workflow-badge--post-merge { - color: var(--done); - background: var(--status-done-bg); - border-color: color-mix(in srgb, var(--done) 35%, var(--border)); -} - - /* Animation for initializing spinner */ @keyframes task-card-initializing-spinner-spin { from { diff --git a/packages/dashboard/app/components/TaskCard.tsx b/packages/dashboard/app/components/TaskCard.tsx index 39a687814b..8e8a27af8a 100644 --- a/packages/dashboard/app/components/TaskCard.tsx +++ b/packages/dashboard/app/components/TaskCard.tsx @@ -2788,6 +2788,9 @@ function TaskCardComponent({ `failed` (blocking gate failure → red/error). `running` shows the in-progress color. No `card-step-dot--workflow-failed` override is needed — the status class carries the distinction directly. + + FNXC:WorkflowSteps 2026-06-30-12:00: + Workflow-sourced rows remain visible through their step names and status dots, but task cards intentionally omit the redundant `workflow` text badge so expanded step lists stay focused on progress. */ return (
@@ -2803,14 +2806,6 @@ function TaskCardComponent({ {t("tasks.active", "active")} )} - {step.source === "workflow" && ( - - {t("tasks.workflow", "workflow")} - - )}
); })} diff --git a/packages/dashboard/app/components/__tests__/TaskCard.test.tsx b/packages/dashboard/app/components/__tests__/TaskCard.test.tsx index 37435e6d28..cb5d9dafdb 100644 --- a/packages/dashboard/app/components/__tests__/TaskCard.test.tsx +++ b/packages/dashboard/app/components/__tests__/TaskCard.test.tsx @@ -2270,7 +2270,8 @@ describe("TaskCard", () => { // FNXC:WorkflowSteps 2026-06-25-00:00 — graph-written results drive the card progress; names come from // result.workflowStepName (with raw-id fallback), and advisory_failure (amber) is visually distinct // from failed (red). No board-level name lookup is involved. - it("renders workflow checks after normal steps with graph-written statuses and phase badges", () => { + // FNXC:WorkflowSteps 2026-06-30-12:00 — expanded task-card rows deliberately omit the redundant workflow text badge; tests preserve mixed implementation/workflow visibility through names, status dots, and the active badge instead. + it("renders workflow checks after normal steps with graph-written statuses and no workflow text badges", () => { const { container } = render( { { name: "Step 0", status: "done" }, { name: "Step 1", status: "failed" as any }, ], - enabledWorkflowSteps: ["WS-001", "WS-002", "WS-003", "WS-004"], + enabledWorkflowSteps: ["WS-001", "WS-002", "WS-003", "WS-004", "WS-005"], workflowStepResults: [ { workflowStepId: "WS-001", @@ -2296,6 +2297,12 @@ describe("TaskCard", () => { workflowStepName: "Code Review Gate", status: "failed", }, + { + workflowStepId: "WS-005", + workflowStepName: "Merge Validation", + status: "pending", + startedAt: "2026-06-25T00:00:00.000Z", + }, ], })} onOpenDetail={noop} @@ -2312,6 +2319,7 @@ describe("TaskCard", () => { "Frontend UX Design", "WS 003", "Code Review Gate", + "Merge Validation", ]); const dots = container.querySelectorAll(".card-step-dot"); @@ -2333,18 +2341,15 @@ describe("TaskCard", () => { expect(dots[5]?.className).toContain("card-step-dot--failed"); expect(dots[5]?.className).not.toContain("card-step-dot--advisory_failure"); + // Started-but-not-finished workflow step → running with the same active badge as implementation steps. + expect(dots[6]?.className).toContain("card-step-dot--running"); + expect(dots[6]?.className).not.toContain("card-step-dot--pending"); + expect(container.querySelector(".card-step-active-badge")?.textContent).toBe("active"); + const workflowBadgeElements = container.querySelectorAll(".card-step-workflow-badge"); - const workflowBadges = Array.from(workflowBadgeElements).map((el) => el.textContent); - expect(workflowBadges).toEqual(["workflow", "workflow", "workflow", "workflow"]); - - expect(workflowBadgeElements[0]?.className).toContain("card-step-workflow-badge--pre-merge"); - expect(workflowBadgeElements[1]?.className).toContain("card-step-workflow-badge--post-merge"); - expect(workflowBadgeElements[2]?.className).toContain("card-step-workflow-badge--pre-merge"); - expect(workflowBadgeElements[3]?.className).toContain("card-step-workflow-badge--pre-merge"); - - workflowBadgeElements.forEach((badge) => { - expect(badge.getAttribute("title")).toBe("Workflow check"); - }); + expect(workflowBadgeElements).toHaveLength(0); + expect(container.querySelector('[title="Workflow check"]')).toBeNull(); + expect(Array.from(container.querySelectorAll(".card-step-item")).some((item) => item.textContent === "workflow")).toBe(false); }); it("renders the running state for a started-but-not-completed workflow step", () => {