From 518d37f6af49eb8a412fdbb3223f6846e518845f Mon Sep 17 00:00:00 2001 From: Yi Lok Enoch Lam Date: Sun, 10 May 2026 11:14:50 +0200 Subject: [PATCH] feat(kanban): add reclaim_first support to bulk reassign endpoint - Extend BulkTaskBody with reclaim_first: bool = False - In bulk_update, use kanban_db.reassign_task(..., reclaim_first=True) when payload.reclaim_first is set and assignee is present - Falls back to existing assign_task behavior when reclaim_first is false This enables the dashboard to bulk-reassign running tasks by reclaiming their claims first, matching the single-task /tasks/{id}/reassign endpoint behavior. --- plugins/kanban/dashboard/plugin_api.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/plugins/kanban/dashboard/plugin_api.py b/plugins/kanban/dashboard/plugin_api.py index cc737694394..7b0cb1d791a 100644 --- a/plugins/kanban/dashboard/plugin_api.py +++ b/plugins/kanban/dashboard/plugin_api.py @@ -823,6 +823,7 @@ class BulkTaskBody(BaseModel): result: Optional[str] = None summary: Optional[str] = None metadata: Optional[dict] = None + reclaim_first: bool = False @router.post("/tasks/bulk") @@ -877,9 +878,16 @@ def bulk_update(payload: BulkTaskBody, board: Optional[str] = Query(None)): entry.update(ok=False, error=f"transition to {s!r} refused") if payload.assignee is not None: try: - if not kanban_db.assign_task( - conn, tid, payload.assignee or None, - ): + if payload.reclaim_first: + ok = kanban_db.reassign_task( + conn, tid, payload.assignee or None, + reclaim_first=True, + ) + else: + ok = kanban_db.assign_task( + conn, tid, payload.assignee or None, + ) + if not ok: entry.update(ok=False, error="assign refused") except RuntimeError as e: entry.update(ok=False, error=str(e))