Domain services: logic that belongs to no single thing
Put genuine cross-aggregate domain decisions in a domain service.
Most domain logic belongs to an aggregate — it’s a decision about that workspace, made from that workspace’s own state. But occasionally a rule genuinely belongs to no single aggregate.
Say an email may belong to only one workspace across the whole organisation. No single Workspace can enforce that, because no single workspace can see the others.
That rule lives in a domain service: real domain logic that operates across aggregates, usually leaning on a port to gather what it needs.