Outline:
* (~Now) Create `block` and `block_target` tables in beta and production
* (Feb 8-13) Migrate beta to the new schema
* (~Feb 20) Migrate production to the new schema
Detailed checklist:
[x] Apply schema change `maintenance/archives/patch-block_target.sql` to all beta wikis
[x] Apply schema change to all production wikis
[x] QA prepare blocks on beta
[x] Switch `$wgBlockTargetMigrationStage` on beta to `SCHEMA_COMPAT_READ_OLD | SCHEMA_COMPAT_WRITE_BOTH`
[x] QA check block actions are still functional
[x] Run `migrateBlocks.php` on beta
[x] Switch beta to `SCHEMA_COMPAT_READ_NEW | SCHEMA_COMPAT_WRITE_BOTH`
[] Switch beta to `SCHEMA_COMPAT_NEW`
[] QA final check on beta
[x] Deploy WMCS patch to hide private data
[] Switch production to `SCHEMA_COMPAT_READ_OLD | SCHEMA_COMPAT_WRITE_BOTH`
[] Run `migrateBlocks.php` on all production wikis
[] Switch production to `SCHEMA_COMPAT_READ_NEW | SCHEMA_COMPAT_WRITE_BOTH`
[] Deploy WMCS b/c view for ipblocks
[] Switch production to `SCHEMA_COMPAT_NEW`
[] Drop ipblocks tables
Rollback plans:
* It is possible to roll back from `SCHEMA_COMPAT_WRITE_BOTH` mode to `SCHEMA_COMPAT_OLD` mode, whether or not migrateBlocks.php has been run. If this is done, the new tables should be truncated before moving forward again.
* Minor, fully-isolated bugs specific to the `SCHEMA_COMPAT_WRITE_BOTH` mode can be dealt with by completing the migration. We are not going to use this code again.
* Rollback from `SCHEMA_COMPAT_NEW` to `SCHEMA_COMPAT_READ_OLD` can be done at the cost of losing blocks inserted since the `SCHEMA_COMPAT_NEW` mode was entered.