The spec says:
Each child <class> element must specify the name of an alternative bean class. If there is no class with the specified name, or if the class with the specified name is not an alternative bean class, the container automatically detects the problem and treats it as a deployment problem.
Since that "alternative" attribute of a bean can be altered by a portable extension in the ProcessBeanAttributes phase, the specification should instead require for each class listed in the <class> element, each bean that defines the class as its bean class is an alternative.
If Y has a name and X declares a name explicitly, using @Named, the container automatically detects the problem and treats
it as a definition error.
The specification should abstract from @Named, since the ProcessBeanAttributes enables an extension to set a bean name without using @Named
Likely, there are other similar issues.