In core there are two skins SkinApi and SkinFallback.
ContentTranslation uses an internal skin which is only used on Special:ContentTranslation
wgSkipSkins can be used to hide skins in preferences, but is meant to be used for phasing out deployed skins, not for this purpose.
Eextensions themselves cannot disable them without modifying globals so it means ContentTranslation by default shows a skin it shouldn't.
Vector currently uses 2 skins under the same key. We would like to split those into 2 skins as in T291098. To support our QA process we would like to make the 2 new skins selectable but not present them to users.
**What should have happened instead?**:
It's proposed that a skin when registered in the SkinFactory can mark itself as internal. This will generalize the existing code.
**Software version (if not a Wikimedia wiki), browser information, screenshots, other information, etc**: