The HTMLForm constructor accepts a $messagePrefix parameter, which is used to set a prefix for legend messages. This goes explicitly against the "no dynamic messages" guideline (1, 2), by actually encouraging use of dynamic message keys. Additionally, FormSpecialPage uses the special page's name as default message prefix (overridable with getMessagePrefix()). This might work for core, but not for extensions, where all messages are generally prefixed with the extension's name, which is also generally not part of the special page's name.
On top of that, the $messagePrefix parameter is documented as follows:
A prefix to go in front of default messages
This is not true: as I wrote above, the prefix is only used in legends. This is potentially surprising and not well documented. It's mostly only mentioned in the doc comment of setMessagePrefix which reads:
@todo Currently only used for the "<fieldset>" legend on forms with multiple sections; should be used elsewhere?
Therefore I propose that the $messagePrefix thing be removed entirely, and that message keys are specified in full like we do elsewhere. Related methods like FormSpecialPage::getMessagePrefix would also be removed.