where('status', Status::Waiting) ->where('next_action_at', '<=', now()) ->where(fn ($query) => $query ->where('is_manual', true) ->orWhereHas('automation', fn ($inner) => $inner->where('status', AutomationStatus::Active))) ->chunkById(50, function ($runs) use ($advance) { foreach ($runs as $run) { $claimed = AutomationRun::query() ->whereKey($run->id) ->where('status', Status::Waiting) ->update([ 'status' => Status::Running, 'next_action_at' => null, ]); if ($claimed === 0) { continue; } $run->refresh(); $advance($run, $run->current_node_id); } }); return self::SUCCESS; } }