MediaWiki 1.35+'s [[ https://www.mediawiki.org/wiki/Stable_interface_policy#Definition_of_the_stable_interface | Stable Interface Policy ]] is restrictive in what it considers a stable interface and, generally, requires that developers be explicit about what "stable" actually means. The good news is that our codebases are mostly unstable by default. However, being explicit about what is unstable can also help. For example (but not to single anyone out), it would inform conversations like https://gerrit.wikimedia.org/r/c/mediawiki/skins/Vector/+/580591/3/includes/VectorTemplate.php#58
I propose that we:
* Mark all classes as unstable, i.e. `@unstable`
* Mark all classes as `@internal`
[[ https://gerrit.wikimedia.org/r/#/c/mediawiki/skins/Vector/+/583365/5/includes/SkinVector.php | Related detail ]] from @Krinkle:
* `@final` annotation has no standard meaning in our code base. To enforce non-extendability use `final` in the code itself.
* `@unstable` means the class is experimental but planned to become stable. If that's not the case, use `@internal` instead.
1. No classes extend `SkinVector`: https://codesearch.wmflabs.org/search/?q=extends%20SkinVector
# No classes extend `VectorTemplate`: https://codesearch.wmflabs.org/search/?q=extends%20VectorTemplate