diff --git a/packages/dashboard/app/components/TaskCard.tsx b/packages/dashboard/app/components/TaskCard.tsx index cc5be94070..8fe5930af8 100644 --- a/packages/dashboard/app/components/TaskCard.tsx +++ b/packages/dashboard/app/components/TaskCard.tsx @@ -2714,18 +2714,28 @@ function TaskCardComponent({ The retired in-review Move dropdown offered Done (no merge) and Triage in addition to the shared menu model's Todo/In Progress defaults. Fold those targets into this TaskCard-only menu so card consolidation retains every move capability without changing ListView or TaskDetail menus. */ /* - FNXC:WorkflowResolvedColumns 2026-07-31-01:20 (fleet phase — A LIVE STALE-TARGET BUG, flagged not fixed): - These are move TARGETS, not a column guard, and one of them is `triage` — the column #2515/U11 - DELETED when it merged intake and hold into a single `todo` lane. On a post-U11 board this pushes a - "Move to triage" entry for a column that no longer exists; `taskActionColumnLabel("triage")` then - labels a target the board cannot show. + FNXC:WorkflowResolvedColumns 2026-07-31-02:10 (CORRECTION of the note this replaced): + The previous version of this comment claimed `triage` was a column U11/#2515 had DELETED, making + this a live stale-target bug. THAT WAS WRONG, and it shipped. `triage` is a real, present column: - Not fixed here for two reasons: deciding what this affordance should offer instead (nothing? the - merged planning lane?) is a product call about a TaskCard-only menu, and removing a visible menu - entry is exactly the UI-affordance change AGENTS requires a Surface Enumeration for — the - workflow-row chevron took three tasks (FN-6115 -> FN-6118 -> FN-6123) for skipping it. Recorded - with the cause rather than silently converted to a role, which would have hidden the staleness by - making the dead target resolve to a live column. + builtin-coding-workflow-ir.ts:49 { id: "triage", name: "Planning", traits: [{ trait: "intake" }] } + + `triage` (intake) and `todo` (hold) are still SEPARATE columns on the default board, and `triage` + also exists in builtin-pr and builtin-lead-generation. I was carrying a merged-planning-column + shape from other work in this program and asserted it against the tree without checking the IR. + The move target is valid; there is no stale-target bug here. + + WHAT IS ACTUALLY TRUE OF THIS SITE, and why it stays a literal. `column` below is the loop variable + over this function's OWN hardcoded `["done", "triage"]` array. The comparison asks "which entry of + my own list am I on" in order to pick a label — not "what role does this card's column play". + Resolving a trait for a string this code just wrote itself would be meaningless. + + The ARRAY is the part worth revisiting, because it names move targets by id rather than by role, + so a workflow that renames those lanes gets targets it cannot show. That is a behaviour question + about which targets a review card should offer — and removing or changing a visible menu entry is + the UI-affordance change AGENTS requires a Surface Enumeration for (the workflow-row chevron took + FN-6115 -> FN-6118 -> FN-6123 for skipping it). Out of scope for a vocabulary conversion, but a + real question, unlike the one the old comment invented. */ if (isReviewColumn) { for (const column of ["done", "triage"] as const) {