As explained in T321683#8347775, MWException no longer serves the original purpose of rendering a skinned and localised error page. The logic that once relied on MWException can now handle all types of exceptions, meaning the original (de facto) reason for using MWException no longer stands true. Over the years, the MWException class has become a general-purpose exception class much like the base Exception class, with the difference that the "MW" prefix leads the developers into thinking that using this class in place of the Exception class is absolutely fine. Another consequence of the class being general-purpose is that it's sometimes unclear whether the exception should be treated as checked or unchecked, i.e., whether it should be caught. Most places treat it as unchecked, like a RuntimeException. However, there's code out there where the exception is treated as checked, which is very unsafe: anything catching MWException incurs in the risk of catching completely unrelated exceptions that aren't even meant to be caught. All in all, the only purpose of MWException nowadays is to confuse developers by offering a middle ground between checked and unchecked exceptions. For these reasons, as decided in T321683 and documented in the coding conventions, the exception has been deprecated and shall be removed.
ASchulz and OLivneh have been doing some helpful work refactoring most references to MWException as plain old Exceptions. Please document what this is about and lay out some suggestions for how to write new exception throwing and handling code going forward.