mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
fix(orchestrator): dispatch pending tasks to claimed_by when assigned_to was cleared
A stale-claim reap can leave a task pending with assigned_to nulled but claimed_by still set. _resolve_dev_owner_uuid only fell back to claimed_by for claimed/blocked, so for pending it saw no owner and the dispatcher never respawned anyone — the task went dormant. Fall back to claimed_by for pending too, so the orchestrator still knows who to call after a half-reap.
This commit is contained in:
@@ -5226,11 +5226,17 @@ Never `commit`, never write code, never run `git`. PMs coordinate.
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _resolve_dev_owner_uuid(task: dict[str, Any]) -> str | None:
|
def _resolve_dev_owner_uuid(task: dict[str, Any]) -> str | None:
|
||||||
"""Pick the right owner UUID for dev dispatch based on status."""
|
"""Pick the right owner UUID for dev dispatch based on status.
|
||||||
|
|
||||||
|
Always falls back to ``claimed_by`` when ``assigned_to`` is missing, so
|
||||||
|
a task left half-reaped (assigned_to nulled but still claimed) still
|
||||||
|
dispatches to its rightful owner instead of going dormant — the
|
||||||
|
orchestrator knows who to call even when one ownership field was cleared.
|
||||||
|
"""
|
||||||
status = task.get("status")
|
status = task.get("status")
|
||||||
if status in ("claimed", "blocked"):
|
if status in ("claimed", "blocked"):
|
||||||
return task.get("claimed_by") or task.get("assigned_to")
|
return task.get("claimed_by") or task.get("assigned_to")
|
||||||
return task.get("assigned_to")
|
return task.get("assigned_to") or task.get("claimed_by")
|
||||||
|
|
||||||
async def _respawn_dev_if_inactive(
|
async def _respawn_dev_if_inactive(
|
||||||
self, task: dict[str, Any], agent_slug: str
|
self, task: dict[str, Any], agent_slug: str
|
||||||
|
|||||||
Reference in New Issue
Block a user