From 93b693c6390ca73eb0e035f283566de2060a1592 Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Wed, 22 Jul 2026 00:37:15 -0700 Subject: [PATCH] FN-8480: remove redundant board header descriptions Remove redundant readiness descriptions from Todo and In Review board headers. - Make column descriptions optional and omit Todo/In Review entries - Render description markup only when a description is present - Cover empty and populated header states and add a patch changeset Files changed: .../fn-8480-remove-column-header-descriptions.md | 7 +++++ packages/core/src/types.ts | 9 ++++-- packages/dashboard/app/components/Column.tsx | 2 +- .../app/components/__tests__/Column.test.tsx | 35 ++++++++++++++++++++++ 4 files changed, 49 insertions(+), 4 deletions(-) Fusion-Task-Id: FN-8480 Fusion-Task-Lineage: e14bcf8c-1a44-4de3-9cfe-833bf8bb697e Co-authored-by: Fusion (runfusion.ai) --- ...-8480-remove-column-header-descriptions.md | 7 ++++ packages/core/src/types.ts | 9 +++-- packages/dashboard/app/components/Column.tsx | 2 +- .../app/components/__tests__/Column.test.tsx | 35 +++++++++++++++++++ 4 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 .changeset/fn-8480-remove-column-header-descriptions.md diff --git a/.changeset/fn-8480-remove-column-header-descriptions.md b/.changeset/fn-8480-remove-column-header-descriptions.md new file mode 100644 index 0000000000..24cba46c68 --- /dev/null +++ b/.changeset/fn-8480-remove-column-header-descriptions.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": patch +--- + +summary: Remove redundant readiness descriptions from Todo and In Review board headers. +category: fix +dev: Todo and In Review omit legacy COLUMN_DESCRIPTIONS entries so no empty description shell renders. diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 04930b4ffd..66e68f7610 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -4428,11 +4428,14 @@ export const COLUMN_LABELS: Record = { archived: "Archived", }; -export const COLUMN_DESCRIPTIONS: Record = { +/* +FNXC:BoardColumnDescriptions 2026-07-21-00:00: +Todo and In Review must not carry redundant status prose in board headers. +Their omitted entries intentionally suppress the description element. +*/ +export const COLUMN_DESCRIPTIONS: Partial> = { triage: "Raw ideas — AI will plan these", - todo: "Specified and ready to start", "in-progress": "AI is working on this in a worktree", - "in-review": "Complete — ready to merge", done: "Merged and closed", archived: "Completed and archived", }; diff --git a/packages/dashboard/app/components/Column.tsx b/packages/dashboard/app/components/Column.tsx index ef438b17ae..93bf334486 100644 --- a/packages/dashboard/app/components/Column.tsx +++ b/packages/dashboard/app/components/Column.tsx @@ -835,7 +835,7 @@ function ColumnComponent({ column, tasks, projectId, maxConcurrent, showWorktree )} - {!isCollapsed && (workflowMode ? COLUMN_DESCRIPTIONS[column] !== undefined : true) && ( + {!isCollapsed && COLUMN_DESCRIPTIONS[column] !== undefined && (

{COLUMN_DESCRIPTIONS[column]}

)} {!isCollapsed && inlineFeedback && ( diff --git a/packages/dashboard/app/components/__tests__/Column.test.tsx b/packages/dashboard/app/components/__tests__/Column.test.tsx index 3035ef8c52..a91d719cbc 100644 --- a/packages/dashboard/app/components/__tests__/Column.test.tsx +++ b/packages/dashboard/app/components/__tests__/Column.test.tsx @@ -214,6 +214,41 @@ describe("Column Coding (Ideas) header indicator", () => { }); }); +/* +FNXC:BoardColumnDescriptions 2026-07-21-00:00: +Todo and In Review omit redundant readiness prose, and the shared Column renderer +must leave no empty description shell across desktop/mobile and task-data states. +*/ +describe("Column legacy descriptions", () => { + it.each([ + ["Todo", "todo" as ColumnType, "Specified and ready to start"], + ["In Review", "in-review" as ColumnType, "Complete — ready to merge"], + ])("omits the description shell for an empty %s column", (label, column, removedDescription) => { + render(); + + expect(screen.getByRole("heading", { name: label, level: 2 })).toBeInTheDocument(); + expect(screen.queryByText(removedDescription)).not.toBeInTheDocument(); + expect(document.querySelector(".column-desc")).toBeNull(); + }); + + it.each([ + ["Todo", "todo" as ColumnType, "Specified and ready to start"], + ["In Review", "in-review" as ColumnType, "Complete — ready to merge"], + ])("omits the description shell for a populated %s column", (label, column, removedDescription) => { + render(); + + expect(screen.getByRole("heading", { name: label, level: 2 })).toBeInTheDocument(); + expect(screen.queryByText(removedDescription)).not.toBeInTheDocument(); + expect(document.querySelector(".column-desc")).toBeNull(); + }); + + it("retains the description for Planning", () => { + render(); + + expect(screen.getByText("Raw ideas — AI will plan these")).toHaveClass("column-desc"); + }); +}); + describe("Column workflow mode (U9)", () => { it("uses the workflow column display name instead of the legacy label", () => { render(