According to Section 12.1,
An archive which contains an extension and no beans.xml file is not a bean archive.
According to Section 11.5,
An extension is a service provider of the service javax.enterprise.inject.spi.Extension declared in META-INF/services
An archive containing a class implementing javax.enterprise.inject.spi.Extension but not declaring this class in META-INF/services does not contain an extension.
So if this archive contains a class with a bean-defining annotation and no beans.xml, then it is a bean archive.
The TCK is missing a test for this scenario (archive with extension class but no service registration), it only has a test for the more obvious case of an archive with extension class and service registration.
If my interpretation is correct, then WildFly 15 has a bug, since it disqualifies any archive containing an Extension class, regardless of the service registration.
It would be helpful for readers looking for the exact definition of extensions to move the sentence quoted above from Section 11.5 to the introductory paragraph of Section 11.