effectiveRequires property
The roles the module requires, including those its kind implies, the role of its variants, and those the roles it provides require.
It goes one level deep: the roles a required role requires in turn are the pipeline's concern, not the module's, so the module gets no access to them.
Implementation
Set<Role> get effectiveRequires => {
...requires,
...kind.impliedRequires,
if (variants != null) variants!.role,
for (final role in provides) ...role.requires,
}..removeAll(provides);