Maybe call this `GenerationCache` like you've been calling its subclasses