From 0c2f204acca2d16d9b67f145128c7e4fbdbf1626 Mon Sep 17 00:00:00 2001 From: Fusion Agent Date: Tue, 25 Aug 2026 10:45:13 +0000 Subject: [PATCH] fix(FN-WF): render the review-lane progress breakdown on task cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TaskCard already switched to the FULL pipeline once a card reached its review lane — and then suppressed the rendering of what it had just computed, because `showProgressSection` still required `task.status === "executing" || isWipColumn`. The operator saw nothing for the stage those gates were promoted into. FN-7676 hid the breakdown in Planning because enumerated implementation steps are a premature planning artifact there. That reasoning does not extend to in-review, where builtin:coding-ideas-v2 runs Verification, Documentation & Delivery and Code Review as real, advancing work. The previous commit fixed ListView on the same reasoning and I assumed TaskCard was already correct because its scope switch flipped. It flipped and the render gate dropped it one line later. Both the scope switch and the render gate now resolve the lane through `isReviewColumnRole`, by trait rather than the hardcoded `in-review` id, so a renamed board behaves the same. Two TaskCard tests asserted the old absence and are updated to the new truth: the running-gate badge remains a distinct additive affordance and is not replaced by the bar, while the expandable step list still stays collapsed until opened. Dashboard 661 tests, test:gate and verify:fast green. --- .changeset/task-card-review-lane-progress.md | 7 +++++++ packages/dashboard/app/components/TaskCard.tsx | 17 ++++++++++++++--- .../app/components/__tests__/TaskCard.test.tsx | 10 +++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 .changeset/task-card-review-lane-progress.md diff --git a/.changeset/task-card-review-lane-progress.md b/.changeset/task-card-review-lane-progress.md new file mode 100644 index 0000000000..f634b303ad --- /dev/null +++ b/.changeset/task-card-review-lane-progress.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": patch +--- + +summary: Task cards now show Verification, Documentation & Delivery and Code Review progress in review. +category: fix +dev: `TaskCard` resolved the full pipeline once a card reached its review lane but `showProgressSection` still gated rendering on `task.status === "executing" || isWipColumn`, so the breakdown it had just computed was suppressed. FN-7676 hid it in Planning because enumerated steps are a premature planning artifact there; that reasoning does not extend to in-review, where a review-column workflow runs those gates as real advancing work. Both the scope switch and the render gate now resolve the lane via `isReviewColumnRole` instead of the hardcoded `in-review` id. diff --git a/packages/dashboard/app/components/TaskCard.tsx b/packages/dashboard/app/components/TaskCard.tsx index 035fafa8c4..4850511260 100644 --- a/packages/dashboard/app/components/TaskCard.tsx +++ b/packages/dashboard/app/components/TaskCard.tsx @@ -1740,8 +1740,8 @@ function TaskCardComponent({ In-progress card progress is WIP implementation only. Plan Review (Todo) and Code Review / other review-lane gates must not appear as checklist rows or inflate completed/total while the card is in In progress; badges still use full progress helpers (isPlanReviewRunning / running step labels). */ const unifiedProgress = useMemo( - () => getUnifiedTaskProgress(task, { scope: task.column === "in-review" ? "full" : "implementation" }), - [task.column, task.steps, task.enabledWorkflowSteps, task.workflowStepResults], + () => getUnifiedTaskProgress(task, { scope: isReviewColumn ? "full" : "implementation" }), + [isReviewColumn, task.column, task.steps, task.enabledWorkflowSteps, task.workflowStepResults], ); /* FNXC:TaskCardProgress 2026-06-29-02:26: @@ -1755,8 +1755,19 @@ function TaskCardComponent({ FNXC:TaskCardWorkflowProgress 2026-07-08-hh:mm: FN-7676 — cards in the Planning/`triage` column must not surface the steps breakdown (progress bar, active badge, step-count toggle, expandable list); enumerated implementation steps are premature planning artifacts, not execution progress. The affordance now appears only after the task leaves Planning (`in-progress` / `executing`), matching `ListView.shouldShowTaskProgress`. FN-7831 adds a separate header "Reviewing" badge for a running Plan Review, but the progress breakdown itself remains hidden in Planning. */ + /* + FNXC:TaskCardWorkflowProgress 2026-08-25-01:10: + The review lane shows its breakdown too. FN-7676 hid it in Planning because enumerated steps are a + premature planning artifact there — that reasoning does not extend to in-review, where a + review-column workflow such as builtin:coding-ideas-v2 runs Verification, Documentation & Delivery + and Code Review as real, advancing work. The card already resolves the FULL pipeline once it + reaches that lane; this gate then suppressed the rendering of what it had just computed, so the + operator saw nothing for the stage those gates were promoted into. Resolved by TRAIT, not by the + hardcoded `in-review` id, so a renamed board behaves the same. + */ const showProgressSection = - unifiedProgress.total > 0 && (task.status === "executing" || isWipColumn); + unifiedProgress.total > 0 + && (task.status === "executing" || isWipColumn || isReviewColumn); /* FNXC:BoardPerformance 2026-07-26-09:46: diff --git a/packages/dashboard/app/components/__tests__/TaskCard.test.tsx b/packages/dashboard/app/components/__tests__/TaskCard.test.tsx index 53da6f1557..1a51ceec5f 100644 --- a/packages/dashboard/app/components/__tests__/TaskCard.test.tsx +++ b/packages/dashboard/app/components/__tests__/TaskCard.test.tsx @@ -2789,7 +2789,15 @@ describe("TaskCard", () => { const badge = container.querySelector(`[data-testid="${testId}"]`); expect(badge).toHaveTextContent(label); expect(badge?.className).toContain("pulsing"); - expect(container.querySelector(".card-progress")).toBeNull(); + /* + FNXC:TaskCardWorkflowProgress 2026-08-25-01:10: + The review lane now RENDERS its breakdown: a review-column workflow runs Verification, + Documentation & Delivery and Code Review there as real advancing work, and suppressing the + section left the operator with no signal for that stage. The running-gate badge remains a + distinct, additive affordance — it is not replaced by the bar. + */ + expect(container.querySelector(".card-progress")).not.toBeNull(); + // The expandable step list stays collapsed until the operator opens it. expect(container.querySelector(".card-steps-list")).toBeNull(); });