Unlike detectCompatibilityIssues, this is never a heuristic warning: an
author explicitly declared these contracts mutually exclusive, so any
violation is always a hard error, regardless of onIncompatibility. See
ADR 0009 for why this doesn't follow 0005's warn-by-default policy.
Inactive contracts are ignored entirely here (filtered internally, not by
the caller) so this stays correct even when called directly via the
/build export -- an inactive contract can share a group with an active
one with no conflict, since it was never wired into anything.
Detects two active contracts declaring the same
exclusiveGroup-- e.g. two interchangeable database backends both left enabled at once.