fix(kanban): claim-less complete no longer closes a live worker's run
complete_task authorised a terminal transition by task status alone; the `current_run_id = ?` fence only applied when the caller volunteered expected_run_id (derived from HERMES_KANBAN_* env). A human at the CLI, an orchestrator session or any env-less caller therefore marked a `running` card done and _end_run closed the dispatcher worker's run row while that worker kept executing (#111764). Mirror the fence request_review already carries: a `running` task under a live claim needs expected_run_id (worker ownership) or force=True (explicit operator override), otherwise LiveClaimError. `hermes kanban complete --force` and the dashboard's "mark done" (a human action) carry the override; the kanban_complete tool reports a structured refusal. Completing `ready`, `blocked` or `review` cards without a claim is unchanged, so the manual / orchestrator flows PR #73188 pinned keep working. Fixes #111764
This commit is contained in:
@@ -547,9 +547,10 @@ def _drag_to(conn, task_id: str, s: str) -> bool:
|
||||
|
||||
# Status verb dispatch shared by PATCH /tasks/{id} and POST /tasks/bulk: (conn, task_id,
|
||||
# payload) -> ok. ``review`` uses request_review (never a block, so it can't trip unblock-loop
|
||||
# detection) with ``force=True``: a dashboard action is a human override of a live worker claim.
|
||||
# detection) and ``done`` pass ``force=True``: a dashboard action is a human override of a live worker claim.
|
||||
_STATUS_HANDLERS: dict[str, Any] = {
|
||||
"done": lambda conn, tid, p: kanban_db.complete_task(conn, tid, result=p.result, summary=p.summary, metadata=p.metadata),
|
||||
"done": lambda conn, tid, p: kanban_db.complete_task(
|
||||
conn, tid, result=p.result, summary=p.summary, metadata=p.metadata, force=True),
|
||||
"blocked": lambda conn, tid, p: kanban_db.block_task(conn, tid, reason=getattr(p, "block_reason", None)),
|
||||
"scheduled": lambda conn, tid, p: kanban_db.schedule_task(conn, tid, reason=getattr(p, "block_reason", None)),
|
||||
"review": lambda conn, tid, p: kanban_db.request_review(
|
||||
|
||||
Reference in New Issue
Block a user