I typically try to step away from the code and look at the things that exist, where they belong, who owns them, who uses them, etc. Once you figure those out, it becomes easier to model the domain and write code. And then, you can justify a “not perfectly pure” with the actual constraints and rules that exist in the domain.
I tend to think that my aggregates should have only command and eventSource handlers keeping it as pure as possible and delegating to an ApplicationService or DomainService the charge of prepare all information needed to exec the business rules as well the invariants
If “as pure as possible” is the goal, then you are probably right. If the goal is to guard the domain boundaries and invariants, then Aggregates are meant to do exactly that. But if their behavior depends on something that “prepares all information needed to exec,” they no longer guard anything. They can only conform to whatever is presented to them by those other services.
For example, in your case, there is the question of who is “in charge” of those policies? You propose giving full power to whoever executes a command to define (and possibly abuse) policies freely. Therefore IMHO, they are no longer policies (something that imposes rules and guards invariants) but rather command execution parameters. That may be just fine, and you may have just discovered that you’ve used the wrong term.
Or those may indeed refer to strict rules that someone else controls, and thus the command sender must not or should not be able to bend them freely for its own needs. In such a case, it’s the Aggregate that should be responsible for reliably obtaining the relevant policy, checking if the given command conforms to it, and react accordingly. While modeling the “reliably obtaining” part, you would ask yourself if any other Aggregate makes use of those policies? If not, then it’s probably best to keep them within the Aggregate. Otherwise, it’s probably better to put them into a domain service.
As with all discussions about architecture and design, there is no one right way for all. I just present a line of thinking that I hope will help you make up your own mind for the particular use case.