A generic collection annotation that the analyser could not follow

A template annotation that was correct, and a call site the analyser widened to mixed anyway.

/** @template T of object */
final class Collection { /* ... */ }

// this resolves
$orders->map(fn (Order $o) => $o->total);   // Collection<Money>

// this does not
$class = $this->resolveClass($name);       // string
$items = $this->repository->of($class);    // Collection<mixed>
// the type parameter comes from a runtime string, and
// no annotation can bridge that.

A class name in a variable is where the type system ends, and the honest response is to stop annotating rather than to add a cast that lies. The three places this happens are all a plugin-style registry, and each got a @phpstan-ignore with a sentence explaining that the type genuinely is not knowable.