Source
Post-merge audit of #2704 (tsk-taqcij). #2704 is already merged to dev.
Finding (verbatim from audit)
Severity: Medium. Surface: drag-and-drop UX in lanes view.
Reproduction: Switch board to lanes view, drag any non-quarantined task card over a
quarantined cell, drop. BoardLane calls
onDropTask={(id, status, laneKey) => dispatchDnd(id, status, laneKey)} unconditionally
(desktop/src/apps/ProjectsApp/board/ProjectBoard.tsx:251). dispatchDnd has a guard
if (columnStatus == "quarantined") return; at line 119 that returns without calling
dndAction, without setAnnouncement, and without window.alert. The card snaps back to its
original position with zero user-visible feedback.
Code path:
BoardLane onDropTask -> dispatchDnd(taskId, "quarantined", laneKey)
-> line 119: if (columnStatus === "quarantined") return; <- silent exit
In kanban view the column passes onDropTask={s === "quarantined" ? undefined : ...}
(desktop/src/apps/ProjectsApp/board/ProjectBoard.tsx:226), so the browser never fires the
drop event for that column. In lanes view there is no equivalent guard -- BoardLane always
passes the handler. The guard at line 119 is therefore reachable in lanes view and produces a
silent no-op.
Fix direction
Replace the bare return in dispatchDnd with a user-visible alert (or surface it via the board
announcement system). Alternatively, prevent BoardLane from passing onDropTask for quarantined
cells (matching the kanban behaviour).
Source
Post-merge audit of #2704 (tsk-taqcij). #2704 is already merged to dev.
Finding (verbatim from audit)
Severity: Medium. Surface: drag-and-drop UX in lanes view.
Reproduction: Switch board to lanes view, drag any non-quarantined task card over a
quarantined cell, drop. BoardLane calls
onDropTask={(id, status, laneKey) => dispatchDnd(id, status, laneKey)} unconditionally
(desktop/src/apps/ProjectsApp/board/ProjectBoard.tsx:251). dispatchDnd has a guard
if (columnStatus == "quarantined") return; at line 119 that returns without calling
dndAction, without setAnnouncement, and without window.alert. The card snaps back to its
original position with zero user-visible feedback.
Code path:
BoardLane onDropTask -> dispatchDnd(taskId, "quarantined", laneKey)
-> line 119: if (columnStatus === "quarantined") return; <- silent exit
In kanban view the column passes onDropTask={s === "quarantined" ? undefined : ...}
(desktop/src/apps/ProjectsApp/board/ProjectBoard.tsx:226), so the browser never fires the
drop event for that column. In lanes view there is no equivalent guard -- BoardLane always
passes the handler. The guard at line 119 is therefore reachable in lanes view and produces a
silent no-op.
Fix direction
Replace the bare return in dispatchDnd with a user-visible alert (or surface it via the board
announcement system). Alternatively, prevent BoardLane from passing onDropTask for quarantined
cells (matching the kanban behaviour).