As [[ https://www.mediawiki.org/wiki/Help:Blocking_users | 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.
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
- Edit Summaries
In other words, [[ https://www.mediawiki.org/wiki/Everything_is_a_wiki_page | everything is a wiki page ]], and Blocks should be too.
Create a new [[ https://www.mediawiki.org/wiki/Content_handlers | 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 [[ http://wikiba.se/ | 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 [[ https://en.wikipedia.org/wiki/JSON | 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 [[ https://query.wikidata.org/ | Query Service ]]) and APIs with Blocks.