TODO: Medium-prio: * (testsuite) Provide ~100% automated test coverage of all functionality. * (feature) Show "you have N pending edits" link to non-automoderated users ("shopping cart" style), so that they would know to which pages to return to continue editing. Low-prio: * (feature) Special page to list users blocked via "Mark as spammer". * (feature) modaction=promote for quickly assigning "automoderated" flag. * (documentation) Ensure that testsuite and hooks have Doxygen-style comments. Testsuite is documented quite well, but those are non-Doxygen comments. The list in README.testsuite is outdated and inconvenient to maintain. * (interface) Improve $wgModerationUseAjax - actions like Approve via Ajax (without leaving Special:Moderation). Partially implemented, but need feedback from users on UX (is it convenient to use or not?) * (testsuite) Selenium testsuite: investigate test flakiness of notify.js (in IE11, notification sometimes doesn't disappear after the click) * (feature) Support gzip compression and external storage of mod_text. Since MediaWiki 1.31, this can be easily done using BlobStore class. * (feature) Backup previous text when a pending change is modified. This would prevent situation when a user has accidentally deleted important text in his own pending change, and the old text wasn't recoverable. It would also make [action=editchange] safe from moderator's errors, and would allow to log what exactly did the moderator change. Note: this backup must be in a separate SQL table. Not having "edit history" in moderation table simplifies everything. * (feature) Support MCR (multi-content revisions) - editing of non-main slots. Note: this is easier to implement after MW 1.31 becomes deprecated, because 1.31 didn't support MCR. Background-prio (may not be needed): * (meta) Display notification "Please run update.php" on Special:Moderation if some new feature (that requires DB update) is disabled because it wasn't done. * (feature) Add "rejected edits" link for moderators in ContributionsToolLinks hook. It's not a simple UI change, because "moderation" SQL table currently doesn't have an index for selecting edits by author. * (feature) Should ApproveHook update timestamps of upload/move logs? * (UX) Improve handling of null edits. (having to reject them manually doesn't feel right) Unit tests: * Use mocks to decouple unit tests (under tests/consequence/) to such a degree that generating code coverage with --strict-coverage would be possible. FIXME: * When approving, tags related to moderator (and unrelated to original author) shouldn't be applied (e.g. if moderator clicks Approve in Mobile view, approved edit shouldn't be tagged as "Mobile edit" - unless, of course, the original author also used Mobile view and this tag is in mod_tags). * When modaction=merge results in null edit (because some other user previously modified the target page to have exactly the same text), edit of this other user shouldn't be tagged as [moderation-merged]. * "Move associated talk page" checkbox should work for intercepted page moves. Note: this is easier to implement after MW 1.31 becomes deprecated, allowing MovePageCheckPermissions hook to be replaced with TitleMove.