Problem
As Blocking becomes more and more complex (partial blocking by page, namespace, upload, topic(?), etc.) blocks are not as simple as "Is this user blocked?". Likewise, as blocks become more complicated the number of changes to that block will increase, making it more difficult to see the changes between a block and revert those changes. There also is no space to talk about the conflicting changes to a block, or come to a consensus on what the changes should be. Lastly, other than watching the Log, there isn't a way to be notified of changes to a block you are concerned with.
Additionally, making any significant improvements to the data stored with a Block currently requires a schema change.
Solution
To increase administrator productivity and make blocking a collaborative activity, blocking should consist of the same tools that users are familiar with on pages which includes:
- Talk page
- Revisions
- Edit Summaries
- Diffs
- Reverts
- Watchlist
In other words, everything is a wiki page, and Blocks should be too.
Implementation
Create a new content handler for a block that extends the existing json handler. A new Block and Block_talk namespace(s) will be created. When a new block is created on Special:Block that block will be inserted into the ipblocks table and the ID will be used as the title similar to Wikibase: Block:B17. The page will contain all of the public (or permissioned) information about the block, going to "Edit" would load an embed version of Special:Block with the fields filled with the data from the block. All of the non-indexed (queryable) fields from ipblocks will be removed (including the ipblocks_restrictions table). Like Wikibase, the revisions will need to show the field and values that have changed, rather than the changes in the serialized JSON. When saving a block, the summary can be auto-generated (like Wikibase) or the user can optionally provide additional details.
Any overlapping functionality that exists in WIkibase, should be moved into libraries to be used by MediaWiki. Ideally, the Block should be serialized the same way that wikibase serializes entities so that wikis that use wikibase can use existing entity tools (like the Query Service) and APIs with Blocks.