UnnecessaryAbstractClassGuardrail
class UnnecessaryAbstractClassGuardrail(anchor: KClass<*>, packageName: String, allowed: Set<String> = emptySet())
Detekt's UnnecessaryAbstractClass needs type resolution, which the detekt task does not run, so the query modules keep the same rule with this list-style check: an abstract class whose members, declared or inherited, are all concrete should be a concrete class or an object.
assertNone scans the compiled classes of anchor's module under packageName. allowed names the public base classes that stay abstract so that users subclass rather than instantiate them; it can only shrink: a new violation fails, and so does an allowed class that no longer is one.