fix(FN-WF): render the review-lane progress breakdown on task cards

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.
This commit is contained in:
Fusion Agent
2026-08-25 10:45:13 +00:00
parent f22ebca62a
commit 0c2f204acc
3 changed files with 30 additions and 4 deletions

View File

@@ -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.

View File

@@ -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:

View File

@@ -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();
});