UPDATE tasks SET state = CASE WHEN tasks.status != 'active' THEN tasks.status WHEN tasks.discard_state != '' THEN 'discarding' WHEN EXISTS (SELECT 1 FROM inbox_items i WHERE i.task_id = tasks.id AND i.state = 'open') THEN 'asking' WHEN tasks.merging_by != '' OR tasks.finalizing != '' OR tasks.parent_merge_by != '' THEN 'merging' WHEN tasks.merge_queued_by != '' THEN 'merge_held' WHEN tasks.merge_after_review_by != '' THEN 'merge_after_review' ELSE coalesce(( SELECT CASE WHEN s.state != 'idle' THEN s.state WHEN s.subagents > 0 THEN 'running' WHEN EXISTS (SELECT 1 FROM reviews r WHERE r.task_id = tasks.id AND r.state = 'running') THEN 'reviewing' WHEN tasks.review_requests > 0 THEN 'review_pending' WHEN tasks.ready = 'merge' THEN 'ready_to_merge' WHEN tasks.ready = 'discard' THEN 'discard_suggested' ELSE 'idle' END FROM agent_sessions s WHERE s.task_id = tasks.id AND s.role != 'reviewer' AND s.state != 'completed' ORDER BY s.state = 'running' DESC, s.subagents > 0 DESC, s.created_at DESC LIMIT 1 ), 'no_agent') END;