structural Metamodel Differ
The shipped differ, registered under its concrete type so it resolves as both a MetamodelDiffer (two declarations compared) and a DeclaredObservedDiffer (a declaration compared against a live graph).
It backs off as soon as the application supplies either one. That looks strict for a host that supplied only a MetamodelDiffer, since the declaration-against-graph question is then unanswered by any bean — but driftCheckRunner fills that role with its own StructuralMetamodelDiffer and both differs are honoured. Registering this bean anyway would put two MetamodelDiffer candidates on the context, and the consumer's bean would lose to an ambiguity nobody asked for.