convertEachOrSkipToSet
inline fun <S : Any, T : Any> Iterable<S?>.convertEachOrSkipToSet(path: String, from: String, to: String, convert: (S) -> T?): Set<T>
Set<T> default: always skip (null-in-place is degenerate in a set) — null element → skip + report; broken element → skip + MappingDegradation.DroppedBrokenElement with the TYPED cause; post-conversion convergence (distinct sources → same target) → MappingDegradation.ConvergedDuplicateElement at the LATER element's path. Survivors keep insertion order (LinkedHashSet). Only Exceptions are absorbed: CancellationException and Errors always propagate.