Ah, I hadn't spotted the check in `loadClass` for `Entity.class.isAssignableFrom(optionalSupertype)`. So Enricher/Policy won't go through that code.

It's the first time I've dug into the catalog code in a while - so the extra behaviour for entities is that we also match on `CatalogItem.getJavaType` (i.e. in catalog.xml, if someone says `<template type="...`), and load that type via `CatalogItemDo.loadJavaClass`. So that type *must* correspond to a class that would also be resolved by `mgmt.getCatalog().getRootClassLoader().loadClass(typeName)`.

Therefore the only difference is that for entities it's using a cache of loaded classes in the catalog (versus the cache that the ClassLoader keeps itself). Is that right?