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) <noreply@runfusion.ai>
This commit is contained in:
7
.changeset/fn-8480-remove-column-header-descriptions.md
Normal file
7
.changeset/fn-8480-remove-column-header-descriptions.md
Normal file
@@ -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.
|
||||||
@@ -4428,11 +4428,14 @@ export const COLUMN_LABELS: Record<Column, string> = {
|
|||||||
archived: "Archived",
|
archived: "Archived",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const COLUMN_DESCRIPTIONS: Record<Column, string> = {
|
/*
|
||||||
|
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<Record<Column, string>> = {
|
||||||
triage: "Raw ideas — AI will plan these",
|
triage: "Raw ideas — AI will plan these",
|
||||||
todo: "Specified and ready to start",
|
|
||||||
"in-progress": "AI is working on this in a worktree",
|
"in-progress": "AI is working on this in a worktree",
|
||||||
"in-review": "Complete — ready to merge",
|
|
||||||
done: "Merged and closed",
|
done: "Merged and closed",
|
||||||
archived: "Completed and archived",
|
archived: "Completed and archived",
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -835,7 +835,7 @@ function ColumnComponent({ column, tasks, projectId, maxConcurrent, showWorktree
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{!isCollapsed && (workflowMode ? COLUMN_DESCRIPTIONS[column] !== undefined : true) && (
|
{!isCollapsed && COLUMN_DESCRIPTIONS[column] !== undefined && (
|
||||||
<p className="column-desc">{COLUMN_DESCRIPTIONS[column]}</p>
|
<p className="column-desc">{COLUMN_DESCRIPTIONS[column]}</p>
|
||||||
)}
|
)}
|
||||||
{!isCollapsed && inlineFeedback && (
|
{!isCollapsed && inlineFeedback && (
|
||||||
|
|||||||
@@ -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(<Column {...defaultProps} column={column} tasks={[]} />);
|
||||||
|
|
||||||
|
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(<Column {...defaultProps} column={column} tasks={[{ ...makeTask("FN-8480"), column }]} />);
|
||||||
|
|
||||||
|
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(<Column {...defaultProps} tasks={[]} />);
|
||||||
|
|
||||||
|
expect(screen.getByText("Raw ideas — AI will plan these")).toHaveClass("column-desc");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("Column workflow mode (U9)", () => {
|
describe("Column workflow mode (U9)", () => {
|
||||||
it("uses the workflow column display name instead of the legacy label", () => {
|
it("uses the workflow column display name instead of the legacy label", () => {
|
||||||
render(
|
render(
|
||||||
|
|||||||
Reference in New Issue
Block a user