Page MenuHomePhabricator

Security review for WikibaseSchema
Closed, ResolvedPublic

Description

Project Information

Description of the tool/project

Wikidata's editors need more tools to find issues in their data. One way to help them is by allowing them to check the existing data against a Schema that defines how the data should look like. With this extension we want to make it possible to edit and maintain these Schemas on Wikidata. We are using an existing WC3 standard for these Schemas called ShEx that is already used by the community.
This slidedeck explains what we are trying to do.

Description of how the tool will be used at WMF

It will be installed on Wikidata, also on the test and beta equivalents.

Dependencies

Composer dependencies
"require":

		"diff/diff": "^2.3 || ^3.2"

"require-dev":

		"jakub-onderka/php-parallel-lint": "1.0.0",
		"wikibase/wikibase-codesniffer": "^0.5.1",
		"jakub-onderka/php-console-highlighter": "0.3.2",
		"mediawiki/minus-x": "0.3.1"

Node dependencies ( currently none for production )
"devDependencies":

		"eslint-config-wikimedia": "0.9.0",
		"grunt": "1.0.3",
		"grunt-banana-checker": "0.6.0",
		"grunt-eslint": "21.0.0",
		"grunt-jsonlint": "1.1.0",
		"grunt-stylelint": "0.10.1",
		"husky": "^1.3.1",
		"lint-staged": "^8.1.0",
		"stylelint-config-wikimedia": "0.5.0"

Has this project been reviewed before?

Team-internal code reviews have been done as part of the development. Diff is used by Wikibase and therefore presumably was previously reviewed.

Working test environment

On https://wikidata-shex.wmflabs.org/wiki/Schema:O2 you can see a working real-world example.

Post-deployment

The Wikidata team will be responsible for the tool after deployment.

Event Timeline

Lydia_Pintscher changed the task status from Open to Stalled.Feb 21 2019, 10:08 AM

Marking as stalled until we have all info together.

noarave updated the task description. (Show Details)
Michael updated the task description. (Show Details)
Tarrow updated the task description. (Show Details)
Lydia_Pintscher changed the task status from Stalled to Open.Feb 25 2019, 1:10 PM

Ok from our side this is ready for security review. Please let us know if you have any questions.

Ok from our side this is ready for security review. Please let us know if you have any questions.

Unrelated to the actual security review... But in the selenium stuff.. There's a mix of ES6 and non ES6 lambdas

For one thing, it's not consistent... Secondly, do we allow this ES6 type JS? PhpStorm doesn't like it much, but that's mostly irrelevant

I've also created https://github.com/wikimedia/mediawiki-extensions-WikibaseSchema so it will be replicated there on the next event

Unrelated to the actual security review... But in the selenium stuff.. There's a mix of ES6 and non ES6 lambdas

For one thing, it's not consistent... Secondly, do we allow this ES6 type JS? PhpStorm doesn't like it much, but that's mostly irrelevant

I think we allow it. For example it's used by the selenium tests in core in the mwbot code. In this case the tests run in quibble which has node v6.11.0. However we should probably aim to be a little more consistent if possible. :)

I've also created https://github.com/wikimedia/mediawiki-extensions-WikibaseSchema so it will be replicated there on the next event

Awesome! Thanks!

I'm actually a little confused/concerned here...

How can an extension with 50+ merged commits in the last week be ready for security review? Never mind targeting for deployment in less than 3 weeks...

https://gerrit.wikimedia.org/r/#/projects/mediawiki/extensions/WikibaseSchema,dashboards/default

@Reedy: I understand the concern. The extension is under active development of team of four developers, hence the significant commit count. The major part of the extension's functionality is there, and its general structure is considered set, so (arguably of course) ,the extension is ready for the security readiness review.

The point about the deployment date is valid as well, we're aware of the delay. Our priority is to properly finish the development work, and go carefully through all stages of deployment, even if is clearly will be on the cost of postponing the deployment date to production site. We sadly didn't anticipate the delay when this request was open. Apologies for that.

Hi, given it is more than 30 days since this task was put to Security-Team-Review-Active board, and also around three weeks since the last comment on the task, the team has been wondering what is the status of the review? Thanks!

Comment incomplete, phab decided to submit it

@Reedy I couldn't help reading some parts of your unfinished comment as Phabricator sent me email. I've found the link to the ongoing discussion on SOP mw.org page pretty important, thanks for a hint.

I also do understand, and can absolutely relate to the fact that chasing the moving target is, among other adjectives that could be used, not optimal.
This particular review clearly was requested too early, apologies for that. What I can assure at this point, understanding it does not change the past issues, that the extension code is now in the ready state, and there are only finishing touches being done to it this week.
I will update this ticket next week with the new desired deployment date, after checking this with the Product Management, as the development took longer than planned, and the original date has not been met.

Haha, yeah. I'm not surprised :). I wanted to try and put a bit more stats/evidence into it before posting (rather than "you made a lot of commits"!). Still not sure exactly why phab decided to submit it when I didn't ask for it


Ok...

You're obviously aware of the incidents recently that have been taking up quite a lot of the security team (and others) time.

Add into that, me having to take time off sick (more than I wanted post surgery), and still not being back to full capacity. My time has been limited. While the first one is more apparent, the second I do admit hasn't been communicated to yourselves.

We then have this (the day before I had to take some of the sick days)

I'm actually a little confused/concerned here...

How can an extension with 50+ merged commits in the last week be ready for security review? Never mind targeting for deployment in less than 3 weeks...

https://gerrit.wikimedia.org/r/#/projects/mediawiki/extensions/WikibaseSchema,dashboards/default

So the last commit on the day before this task was filed was https://github.com/wikimedia/mediawiki-extensions-WikibaseSchema/commit/e7d932c361b896f4a39f3ece1d247dae08a2f8df

http://github.com/wikimedia/mediawiki-extensions-WikibaseSchema/compare/e7d932c361b896f4a39f3ece1d247dae08a2f8df...master 259 commits as of writing this comment

From https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseSchema
   20880b8..987bd25  master     -> origin/master
Updating e7d932c..987bd25
Fast-forward
 .eslintrc.json                                                                              |   3 +-
 .phan/config.php                                                                            |   5 +
 WikibaseSchema.i18n.alias.php                                                               |   2 +
 composer.json                                                                               |   8 +-
 extension.json                                                                              |  76 +++++++-
 i18n/ar.json                                                                                |  71 +++++++-
 i18n/bg.json                                                                                |  38 +++-
 i18n/bn.json                                                                                |  11 +-
 i18n/ca.json                                                                                |  10 +-
 i18n/cjy-hans.json                                                                          |   9 +
 i18n/cs.json                                                                                |  12 ++
 i18n/da.json                                                                                |  15 +-
 i18n/de.json                                                                                |  68 +++++++-
 i18n/diq.json                                                                               |  23 ++-
 i18n/en.json                                                                                |  71 +++++++-
 i18n/es.json                                                                                |  28 ++-
 i18n/fa.json                                                                                |   9 +
 i18n/fr.json                                                                                |  71 +++++++-
 i18n/he.json                                                                                |   6 +-
 i18n/ia.json                                                                                |  16 ++
 i18n/id.json                                                                                |   8 +
 i18n/it.json                                                                                |  32 +++-
 i18n/ja.json                                                                                |  20 +++
 i18n/ko.json                                                                                |  38 +++-
 i18n/ku-latn.json                                                                           |   6 +-
 i18n/kum.json                                                                               |  10 ++
 i18n/lb.json                                                                                |  23 ++-
 i18n/lv.json                                                                                |   5 +-
 i18n/mk.json                                                                                |  68 +++++++-
 i18n/nb.json                                                                                |  23 +++
 i18n/nl.json                                                                                |  20 ++-
 i18n/pl.json                                                                                |   8 +
 i18n/pt-br.json                                                                             |  67 ++++++-
 i18n/pt.json                                                                                |   8 +
 i18n/qqq.json                                                                               |  72 +++++++-
 i18n/roa-tara.json                                                                          |  17 +-
 i18n/ru.json                                                                                |  10 ++
 i18n/sr-ec.json                                                                             |   6 +-
 i18n/sv.json                                                                                |  20 +++
 i18n/ta.json                                                                                |  10 ++
 i18n/tcy.json                                                                               |  13 +-
 i18n/tr.json                                                                                |   9 +-
 i18n/uk.json                                                                                |  44 +++++
 i18n/xmf.json                                                                               |   9 +
 i18n/zh-hans.json                                                                           |  12 +-
 i18n/zh-hant.json                                                                           |  72 +++++++-
 package.json                                                                                |   5 +-
 resources/action.edit.js                                                                    |  13 ++
 resources/action.view.trackclicks.js                                                        |   8 +
 resources/special.newSchema.js                                                              |  27 +++
 resources/special.setSchemaLabelDescriptionAliases.edit.js                                  |  24 +++
 resources/viewSchema.less                                                                   |  61 +++++++
 src/DataAccess/EditConflict.php                                                             |  12 ++
 src/DataAccess/EditConflictDetector.php                                                     |  85 +++++++++
 src/DataAccess/MediaWikiRevisionSchemaInserter.php                                          | 101 +++++++++++
 src/DataAccess/MediaWikiRevisionSchemaUpdater.php                                           | 290 ++++++++++++++++++++++++++++++
 src/DataAccess/MediaWikiRevisionSchemaWriter.php                                            | 178 -------------------
 src/DataAccess/SchemaCleaner.php                                                            |  79 +++++++++
 src/DataAccess/SchemaEncoder.php                                                            | 178 +++++++++++++++++++
 src/DataAccess/SchemaInserter.php                                                           |  29 +++
 src/DataAccess/SchemaUpdater.php                                                            |  73 ++++++++
 src/DataAccess/SchemaWriter.php                                                             |  53 ------
 src/DataAccess/WatchlistUpdater.php                                                         |  47 +++++
 src/MediaWiki/Actions/AbstractRestoreAction.php                                             |  74 ++++++++
 src/MediaWiki/Actions/AbstractUndoAction.php                                                |  91 ++++++++++
 src/MediaWiki/Actions/RestoreSubmitAction.php                                               | 150 ++++++++++++++++
 src/MediaWiki/Actions/RestoreViewAction.php                                                 | 111 ++++++++++++
 src/MediaWiki/Actions/SchemaEditAction.php                                                  | 175 +++++++++++++++++++
 src/MediaWiki/{ => Actions}/SchemaSubmitAction.php                                          |   2 +-
 src/MediaWiki/Actions/UndoSubmitAction.php                                                  | 137 +++++++++++++++
 src/MediaWiki/Actions/UndoViewAction.php                                                    |  93 ++++++++++
 src/MediaWiki/Content/WikibaseSchemaContent.php                                             |  48 +----
 src/MediaWiki/Content/WikibaseSchemaContentHandler.php                                      | 161 ++++++++++++++++-
 src/MediaWiki/Content/WikibaseSchemaSlotDiffRenderer.php                                    |  25 +--
 src/MediaWiki/Content/WikibaseSchemaSlotViewRenderer.php                                    | 300 +++++++++++++++++++++++++++++++
 src/MediaWiki/SchemaEditAction.php                                                          | 129 --------------
 src/MediaWiki/Specials/NewSchema.php                                                        |  87 +++++++--
 src/MediaWiki/Specials/SchemaText.php                                                       |  85 +++++++++
 src/MediaWiki/Specials/SetSchemaLabelDescriptionAliases.php                                 | 422 ++++++++++++++++++++++++++++++++++++++++++++
 src/MediaWiki/SpecificLanguageMessageLocalizer.php                                          |  37 ++++
 src/MediaWiki/UndoHandler.php                                                               |  77 ++++++++
 src/MediaWiki/WikibaseSchemaHooks.php                                                       | 225 ++++++++++++++++++++++++
 src/Presentation/AutocommentFormatter.php                                                   | 107 ++++++++++++
 src/Presentation/ConfirmationFormRenderer.php                                               | 151 ++++++++++++++++
 src/Presentation/DiffRenderer.php                                                           |  29 +++
 src/Presentation/InputValidator.php                                                         | 111 ++++++++++++
 src/Services/Diff/AliasGroupListPatcher.php                                                 |  99 +++++++++++
 src/Services/Diff/SchemaDiffer.php                                                          |  12 +-
 src/Services/Diff/SchemaPatcher.php                                                         | 148 ++++++++++++++++
 src/Services/{SchemaDispatcher => SchemaConverter}/FullArraySchemaData.php                  |   4 +-
 src/Services/{SchemaDispatcher => SchemaConverter}/FullViewSchemaData.php                   |   8 +-
 src/Services/{SchemaDispatcher => SchemaConverter}/NameBadge.php                            |   2 +-
 src/Services/SchemaConverter/PersistenceSchemaData.php                                      |  13 ++
 src/Services/{SchemaDispatcher/SchemaDispatcher.php => SchemaConverter/SchemaConverter.php} | 129 +++++++++++---
 src/Services/SchemaDispatcher/MonolingualSchemaData.php                                     |  21 ---
 src/WikibaseSchemaHooks.php                                                                 |  79 ---------
 tests/phan/stubs/WikibaseSchema.php                                                         |   6 +
 tests/phpunit/API/UndoAPITest.php                                                           | 109 ++++++++++++
 tests/phpunit/DataAccess/EditConflictDetectorTest.php                                       | 174 ++++++++++++++++++
 tests/phpunit/DataAccess/MediaWikiRevisionSchemaInserterTest.php                            | 189 ++++++++++++++++++++
 tests/phpunit/DataAccess/MediaWikiRevisionSchemaUpdaterTest.php                             | 777 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/phpunit/DataAccess/MediaWikiRevisionSchemaWriterTest.php                              | 187 --------------------
 tests/phpunit/DataAccess/SchemaCleanerTest.php                                              |  87 +++++++++
 tests/phpunit/DataAccess/SchemaEncoderTest.php                                              | 332 +++++++++++++++++++++++++++++++++++
 tests/phpunit/DataAccess/WatchListUpdaterTest.php                                           | 131 ++++++++++++++
 tests/phpunit/MediaWiki/Actions/RestoreSubmitActionTest.php                                 | 162 +++++++++++++++++
 tests/phpunit/MediaWiki/Actions/RestoreViewActionTest.php                                   |  87 +++++++++
 tests/phpunit/MediaWiki/{ => Actions}/SchemaEditActionTest.php                              |  11 +-
 tests/phpunit/MediaWiki/Actions/UndoSubmitActionTest.php                                    | 179 +++++++++++++++++++
 tests/phpunit/MediaWiki/Actions/UndoViewActionTest.php                                      |  89 ++++++++++
 tests/phpunit/MediaWiki/Content/WikibaseSchemaContentHandlerTest.php                        |  27 +++
 tests/phpunit/MediaWiki/Content/WikibaseSchemaContentTest.php                               | 109 ++++++------
 tests/phpunit/MediaWiki/Content/WikibaseSchemaSlotDiffRendererTest.php                      |  18 +-
 tests/phpunit/MediaWiki/Content/WikibaseSchemaSlotViewRendererTest.php                      | 180 +++++++++++++++++++
 tests/phpunit/MediaWiki/Specials/SchemaTextTest.php                                         |  95 ++++++++++
 tests/phpunit/MediaWiki/Specials/SetSchemaLabelDescriptionAliasesTest.php                   | 303 ++++++++++++++++++++++++++++++++
 tests/phpunit/MediaWiki/SpecificLanguageMessageLocalizerTest.php                            |  50 ++++++
 tests/phpunit/MediaWiki/UndoHandlerTest.php                                                 | 194 ++++++++++++++++++++
 tests/phpunit/MediaWiki/WikibaseSchemaHooksTest.php                                         |  88 ++++++++++
 tests/phpunit/Mocks/HTMLFormSpy.php                                                         |  23 +++
 tests/phpunit/Presentation/AutocommentFormatterTest.php                                     | 134 ++++++++++++++
 tests/phpunit/Presentation/InputValidatorTest.php                                           | 135 ++++++++++++++
 tests/phpunit/Services/Diff/SchemaDifferTest.php                                            |  22 +--
 tests/phpunit/Services/Diff/SchemaPatcherTest.php                                           | 189 ++++++++++++++++++++
 tests/phpunit/Services/SchemaConverter/SchemaConverterTest.php                              | 591 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/phpunit/Services/SchemaDispatcher/SchemaDispatcherTest.php                            | 388 ----------------------------------------
 tests/selenium/pageobjects/edit.schema.page.js                                              |  22 ++-
 tests/selenium/pageobjects/newschema.page.js                                                |  52 ++++--
 tests/selenium/pageobjects/setlabeldecriptionaliases.schema.page.js                         |  85 +++++++++
 tests/selenium/pageobjects/view.schema.page.js                                              |  50 +++---
 tests/selenium/specs/editSchema.js                                                          |  38 +++-
 tests/selenium/specs/special/new.js                                                         |  59 ++++++-
 tests/selenium/specs/special/setSchemaLabelDescriptionAliases.js                            | 128 ++++++++++++++
 tests/selenium/specs/viewSchema.js                                                          |  17 +-
 134 files changed, 9886 insertions(+), 1418 deletions(-)
 create mode 100644 .phan/config.php
 create mode 100644 i18n/cjy-hans.json
 create mode 100644 i18n/cs.json
 create mode 100644 i18n/fa.json
 create mode 100644 i18n/ia.json
 create mode 100644 i18n/id.json
 create mode 100644 i18n/ja.json
 create mode 100644 i18n/kum.json
 create mode 100644 i18n/nb.json
 create mode 100644 i18n/pl.json
 create mode 100644 i18n/pt.json
 create mode 100644 i18n/ru.json
 create mode 100644 i18n/sv.json
 create mode 100644 i18n/ta.json
 create mode 100644 i18n/uk.json
 create mode 100644 i18n/xmf.json
 create mode 100644 resources/action.edit.js
 create mode 100644 resources/action.view.trackclicks.js
 create mode 100644 resources/special.newSchema.js
 create mode 100644 resources/special.setSchemaLabelDescriptionAliases.edit.js
 create mode 100644 resources/viewSchema.less
 create mode 100644 src/DataAccess/EditConflict.php
 create mode 100644 src/DataAccess/EditConflictDetector.php
 create mode 100644 src/DataAccess/MediaWikiRevisionSchemaInserter.php
 create mode 100644 src/DataAccess/MediaWikiRevisionSchemaUpdater.php
 delete mode 100644 src/DataAccess/MediaWikiRevisionSchemaWriter.php
 create mode 100644 src/DataAccess/SchemaCleaner.php
 create mode 100644 src/DataAccess/SchemaEncoder.php
 create mode 100644 src/DataAccess/SchemaInserter.php
 create mode 100644 src/DataAccess/SchemaUpdater.php
 delete mode 100644 src/DataAccess/SchemaWriter.php
 create mode 100644 src/DataAccess/WatchlistUpdater.php
 create mode 100644 src/MediaWiki/Actions/AbstractRestoreAction.php
 create mode 100644 src/MediaWiki/Actions/AbstractUndoAction.php
 create mode 100644 src/MediaWiki/Actions/RestoreSubmitAction.php
 create mode 100644 src/MediaWiki/Actions/RestoreViewAction.php
 create mode 100644 src/MediaWiki/Actions/SchemaEditAction.php
 rename src/MediaWiki/{ => Actions}/SchemaSubmitAction.php (79%)
 create mode 100644 src/MediaWiki/Actions/UndoSubmitAction.php
 create mode 100644 src/MediaWiki/Actions/UndoViewAction.php
 create mode 100644 src/MediaWiki/Content/WikibaseSchemaSlotViewRenderer.php
 delete mode 100644 src/MediaWiki/SchemaEditAction.php
 create mode 100644 src/MediaWiki/Specials/SchemaText.php
 create mode 100644 src/MediaWiki/Specials/SetSchemaLabelDescriptionAliases.php
 create mode 100644 src/MediaWiki/SpecificLanguageMessageLocalizer.php
 create mode 100644 src/MediaWiki/UndoHandler.php
 create mode 100644 src/MediaWiki/WikibaseSchemaHooks.php
 create mode 100644 src/Presentation/AutocommentFormatter.php
 create mode 100644 src/Presentation/ConfirmationFormRenderer.php
 create mode 100644 src/Presentation/DiffRenderer.php
 create mode 100644 src/Presentation/InputValidator.php
 create mode 100644 src/Services/Diff/AliasGroupListPatcher.php
 create mode 100644 src/Services/Diff/SchemaPatcher.php
 rename src/Services/{SchemaDispatcher => SchemaConverter}/FullArraySchemaData.php (87%)
 rename src/Services/{SchemaDispatcher => SchemaConverter}/FullViewSchemaData.php (51%)
 rename src/Services/{SchemaDispatcher => SchemaConverter}/NameBadge.php (86%)
 create mode 100644 src/Services/SchemaConverter/PersistenceSchemaData.php
 rename src/Services/{SchemaDispatcher/SchemaDispatcher.php => SchemaConverter/SchemaConverter.php} (55%)
 delete mode 100644 src/Services/SchemaDispatcher/MonolingualSchemaData.php
 delete mode 100644 src/WikibaseSchemaHooks.php
 create mode 100644 tests/phan/stubs/WikibaseSchema.php
 create mode 100644 tests/phpunit/API/UndoAPITest.php
 create mode 100644 tests/phpunit/DataAccess/EditConflictDetectorTest.php
 create mode 100644 tests/phpunit/DataAccess/MediaWikiRevisionSchemaInserterTest.php
 create mode 100644 tests/phpunit/DataAccess/MediaWikiRevisionSchemaUpdaterTest.php
 delete mode 100644 tests/phpunit/DataAccess/MediaWikiRevisionSchemaWriterTest.php
 create mode 100644 tests/phpunit/DataAccess/SchemaCleanerTest.php
 create mode 100644 tests/phpunit/DataAccess/SchemaEncoderTest.php
 create mode 100644 tests/phpunit/DataAccess/WatchListUpdaterTest.php
 create mode 100644 tests/phpunit/MediaWiki/Actions/RestoreSubmitActionTest.php
 create mode 100644 tests/phpunit/MediaWiki/Actions/RestoreViewActionTest.php
 rename tests/phpunit/MediaWiki/{ => Actions}/SchemaEditActionTest.php (72%)
 create mode 100644 tests/phpunit/MediaWiki/Actions/UndoSubmitActionTest.php
 create mode 100644 tests/phpunit/MediaWiki/Actions/UndoViewActionTest.php
 create mode 100644 tests/phpunit/MediaWiki/Content/WikibaseSchemaContentHandlerTest.php
 create mode 100644 tests/phpunit/MediaWiki/Content/WikibaseSchemaSlotViewRendererTest.php
 create mode 100644 tests/phpunit/MediaWiki/Specials/SchemaTextTest.php
 create mode 100644 tests/phpunit/MediaWiki/Specials/SetSchemaLabelDescriptionAliasesTest.php
 create mode 100644 tests/phpunit/MediaWiki/SpecificLanguageMessageLocalizerTest.php
 create mode 100644 tests/phpunit/MediaWiki/UndoHandlerTest.php
 create mode 100644 tests/phpunit/MediaWiki/WikibaseSchemaHooksTest.php
 create mode 100644 tests/phpunit/Mocks/HTMLFormSpy.php
 create mode 100644 tests/phpunit/Presentation/AutocommentFormatterTest.php
 create mode 100644 tests/phpunit/Presentation/InputValidatorTest.php
 create mode 100644 tests/phpunit/Services/Diff/SchemaPatcherTest.php
 create mode 100644 tests/phpunit/Services/SchemaConverter/SchemaConverterTest.php
 delete mode 100644 tests/phpunit/Services/SchemaDispatcher/SchemaDispatcherTest.php
 create mode 100644 tests/selenium/pageobjects/setlabeldecriptionaliases.schema.page.js
 create mode 100644 tests/selenium/specs/special/setSchemaLabelDescriptionAliases.js

From Lydia un-stalling it on the 25th (we'll use the twn one that day) - https://github.com/wikimedia/mediawiki-extensions-WikibaseSchema/compare/bf27ac0...master - 250 commits as of writing this comment

Updating bf27ac0..b29c9c5
Fast-forward
 .eslintrc.json                                                                              |   3 +-
 .phan/config.php                                                                            |   5 +
 WikibaseSchema.i18n.alias.php                                                               |   2 +
 composer.json                                                                               |   4 +-
 extension.json                                                                              |  77 +++++++-
 i18n/ar.json                                                                                |  55 +++++-
 i18n/bg.json                                                                                |  25 ++-
 i18n/bn.json                                                                                |  11 +-
 i18n/ca.json                                                                                |  10 +-
 i18n/cjy-hans.json                                                                          |   9 +
 i18n/cs.json                                                                                |  12 ++
 i18n/da.json                                                                                |  14 +-
 i18n/de.json                                                                                |  55 +++++-
 i18n/diq.json                                                                               |  17 +-
 i18n/en.json                                                                                |  63 +++++--
 i18n/es.json                                                                                |  28 ++-
 i18n/fa.json                                                                                |   2 +-
 i18n/fr.json                                                                                |  55 +++++-
 i18n/he.json                                                                                |   6 +-
 i18n/ia.json                                                                                |  16 ++
 i18n/id.json                                                                                |   8 +
 i18n/it.json                                                                                |  27 ++-
 i18n/ja.json                                                                                |  20 +++
 i18n/ko.json                                                                                |  27 ++-
 i18n/ku-latn.json                                                                           |   6 +-
 i18n/kum.json                                                                               |  10 ++
 i18n/lb.json                                                                                |  21 ++-
 i18n/lv.json                                                                                |   5 +-
 i18n/mk.json                                                                                |  55 +++++-
 i18n/nb.json                                                                                |  15 +-
 i18n/nl.json                                                                                |  18 +-
 i18n/pl.json                                                                                |   8 +
 i18n/pt-br.json                                                                             |  54 +++++-
 i18n/pt.json                                                                                |   8 +
 i18n/qqq.json                                                                               |  61 ++++++-
 i18n/roa-tara.json                                                                          |  13 +-
 i18n/ru.json                                                                                |   4 +-
 i18n/sr-ec.json                                                                             |   6 +-
 i18n/sv.json                                                                                |  14 +-
 i18n/ta.json                                                                                |  10 ++
 i18n/tcy.json                                                                               |  13 +-
 i18n/tr.json                                                                                |   9 +-
 i18n/uk.json                                                                                |  39 ++++-
 i18n/xmf.json                                                                               |   9 +
 i18n/zh-hans.json                                                                           |   8 +-
 i18n/zh-hant.json                                                                           |  63 +++++--
 package.json                                                                                |   5 +-
 resources/action.edit.js                                                                    |  13 ++
 resources/action.view.trackclicks.js                                                        |   8 +
 resources/special.newSchema.js                                                              |  27 +++
 resources/special.setSchemaLabelDescriptionAliases.edit.js                                  |  24 +++
 resources/viewSchema.less                                                                   |  61 +++++++
 src/DataAccess/EditConflict.php                                                             |  12 ++
 src/DataAccess/EditConflictDetector.php                                                     |  85 +++++++++
 src/DataAccess/MediaWikiRevisionSchemaInserter.php                                          | 101 +++++++++++
 src/DataAccess/MediaWikiRevisionSchemaUpdater.php                                           | 290 ++++++++++++++++++++++++++++++
 src/DataAccess/MediaWikiRevisionSchemaWriter.php                                            | 185 --------------------
 src/DataAccess/SchemaCleaner.php                                                            |  79 +++++++++
 src/DataAccess/SchemaEncoder.php                                                            | 178 +++++++++++++++++++
 src/DataAccess/SchemaInserter.php                                                           |  29 +++
 src/DataAccess/SchemaUpdater.php                                                            |  73 ++++++++
 src/DataAccess/SchemaWriter.php                                                             |  53 ------
 src/DataAccess/WatchlistUpdater.php                                                         |  47 +++++
 src/MediaWiki/Actions/AbstractRestoreAction.php                                             |  74 ++++++++
 src/MediaWiki/Actions/AbstractUndoAction.php                                                |  54 +++---
 src/MediaWiki/Actions/RestoreSubmitAction.php                                               | 150 ++++++++++++++++
 src/MediaWiki/Actions/RestoreViewAction.php                                                 | 111 ++++++++++++
 src/MediaWiki/Actions/SchemaEditAction.php                                                  | 175 +++++++++++++++++++
 src/MediaWiki/{ => Actions}/SchemaSubmitAction.php                                          |   2 +-
 src/MediaWiki/Actions/UndoSubmitAction.php                                                  |  55 ++++--
 src/MediaWiki/Actions/UndoViewAction.php                                                    | 169 ++----------------
 src/MediaWiki/Content/WikibaseSchemaContent.php                                             |  48 +----
 src/MediaWiki/Content/WikibaseSchemaContentHandler.php                                      | 126 ++++++++++++-
 src/MediaWiki/Content/WikibaseSchemaSlotDiffRenderer.php                                    |  25 +--
 src/MediaWiki/Content/WikibaseSchemaSlotViewRenderer.php                                    | 300 +++++++++++++++++++++++++++++++
 src/MediaWiki/SchemaEditAction.php                                                          | 129 --------------
 src/MediaWiki/Specials/NewSchema.php                                                        |  87 +++++++--
 src/MediaWiki/Specials/SchemaText.php                                                       |  85 +++++++++
 src/MediaWiki/Specials/SetSchemaLabelDescriptionAliases.php                                 | 422 ++++++++++++++++++++++++++++++++++++++++++++
 src/MediaWiki/SpecificLanguageMessageLocalizer.php                                          |  37 ++++
 src/MediaWiki/UndoHandler.php                                                               |  77 ++++++++
 src/MediaWiki/WikibaseSchemaHooks.php                                                       | 243 ++++++++++++++++++++++++++
 src/Presentation/AutocommentFormatter.php                                                   | 107 ++++++++++++
 src/Presentation/ConfirmationFormRenderer.php                                               | 151 ++++++++++++++++
 src/Presentation/DiffRenderer.php                                                           |  29 +++
 src/Presentation/InputValidator.php                                                         | 111 ++++++++++++
 src/Services/Diff/AliasGroupListPatcher.php                                                 |   6 +-
 src/Services/Diff/SchemaDiffer.php                                                          |  12 +-
 src/Services/Diff/SchemaPatcher.php                                                         |  19 +-
 src/Services/{SchemaDispatcher => SchemaConverter}/FullArraySchemaData.php                  |   4 +-
 src/Services/{SchemaDispatcher => SchemaConverter}/FullViewSchemaData.php                   |   8 +-
 src/Services/{SchemaDispatcher => SchemaConverter}/NameBadge.php                            |   2 +-
 src/Services/SchemaConverter/PersistenceSchemaData.php                                      |  13 ++
 src/Services/{SchemaDispatcher/SchemaDispatcher.php => SchemaConverter/SchemaConverter.php} | 129 +++++++++++---
 src/Services/SchemaDispatcher/MonolingualSchemaData.php                                     |  21 ---
 src/WikibaseSchemaHooks.php                                                                 |  79 ---------
 tests/phan/stubs/WikibaseSchema.php                                                         |   6 +
 tests/phpunit/API/UndoAPITest.php                                                           | 109 ++++++++++++
 tests/phpunit/DataAccess/EditConflictDetectorTest.php                                       | 174 ++++++++++++++++++
 tests/phpunit/DataAccess/MediaWikiRevisionSchemaInserterTest.php                            | 189 ++++++++++++++++++++
 tests/phpunit/DataAccess/MediaWikiRevisionSchemaUpdaterTest.php                             | 777 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/phpunit/DataAccess/MediaWikiRevisionSchemaWriterTest.php                              | 208 ----------------------
 tests/phpunit/DataAccess/SchemaCleanerTest.php                                              |  87 +++++++++
 tests/phpunit/DataAccess/SchemaEncoderTest.php                                              | 332 +++++++++++++++++++++++++++++++++++
 tests/phpunit/DataAccess/WatchListUpdaterTest.php                                           | 131 ++++++++++++++
 tests/phpunit/MediaWiki/Actions/RestoreSubmitActionTest.php                                 | 162 +++++++++++++++++
 tests/phpunit/MediaWiki/Actions/RestoreViewActionTest.php                                   |  87 +++++++++
 tests/phpunit/MediaWiki/{ => Actions}/SchemaEditActionTest.php                              |  11 +-
 tests/phpunit/MediaWiki/Actions/UndoSubmitActionTest.php                                    |  38 ++--
 tests/phpunit/MediaWiki/Actions/UndoViewActionTest.php                                      |  22 ++-
 tests/phpunit/MediaWiki/Content/WikibaseSchemaContentHandlerTest.php                        |  27 +++
 tests/phpunit/MediaWiki/Content/WikibaseSchemaContentTest.php                               | 109 ++++++------
 tests/phpunit/MediaWiki/Content/WikibaseSchemaSlotDiffRendererTest.php                      |  18 +-
 tests/phpunit/MediaWiki/Content/WikibaseSchemaSlotViewRendererTest.php                      | 180 +++++++++++++++++++
 tests/phpunit/MediaWiki/Specials/SchemaTextTest.php                                         |  95 ++++++++++
 tests/phpunit/MediaWiki/Specials/SetSchemaLabelDescriptionAliasesTest.php                   | 303 ++++++++++++++++++++++++++++++++
 tests/phpunit/MediaWiki/SpecificLanguageMessageLocalizerTest.php                            |  50 ++++++
 tests/phpunit/MediaWiki/UndoHandlerTest.php                                                 | 194 ++++++++++++++++++++
 tests/phpunit/MediaWiki/WikibaseSchemaHooksTest.php                                         |  88 ++++++++++
 tests/phpunit/Mocks/HTMLFormSpy.php                                                         |  23 +++
 tests/phpunit/Presentation/AutocommentFormatterTest.php                                     | 134 ++++++++++++++
 tests/phpunit/Presentation/InputValidatorTest.php                                           | 135 ++++++++++++++
 tests/phpunit/Services/Diff/SchemaDifferTest.php                                            |  22 +--
 tests/phpunit/Services/Diff/SchemaPatcherTest.php                                           |  39 +++--
 tests/phpunit/Services/SchemaConverter/SchemaConverterTest.php                              | 591 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/phpunit/Services/SchemaDispatcher/SchemaDispatcherTest.php                            | 388 ----------------------------------------
 tests/selenium/pageobjects/edit.schema.page.js                                              |  22 ++-
 tests/selenium/pageobjects/newschema.page.js                                                |  52 ++++--
 tests/selenium/pageobjects/setlabeldecriptionaliases.schema.page.js                         |  85 +++++++++
 tests/selenium/pageobjects/view.schema.page.js                                              |  50 +++---
 tests/selenium/specs/editSchema.js                                                          |  38 +++-
 tests/selenium/specs/special/new.js                                                         |  59 ++++++-
 tests/selenium/specs/special/setSchemaLabelDescriptionAliases.js                            | 128 ++++++++++++++
 tests/selenium/specs/viewSchema.js                                                          |  17 +-
 134 files changed, 8811 insertions(+), 1699 deletions(-)
 create mode 100644 .phan/config.php
 create mode 100644 i18n/cjy-hans.json
 create mode 100644 i18n/cs.json
 create mode 100644 i18n/ia.json
 create mode 100644 i18n/id.json
 create mode 100644 i18n/ja.json
 create mode 100644 i18n/kum.json
 create mode 100644 i18n/pl.json
 create mode 100644 i18n/pt.json
 create mode 100644 i18n/ta.json
 create mode 100644 i18n/xmf.json
 create mode 100644 resources/action.edit.js
 create mode 100644 resources/action.view.trackclicks.js
 create mode 100644 resources/special.newSchema.js
 create mode 100644 resources/special.setSchemaLabelDescriptionAliases.edit.js
 create mode 100644 resources/viewSchema.less
 create mode 100644 src/DataAccess/EditConflict.php
 create mode 100644 src/DataAccess/EditConflictDetector.php
 create mode 100644 src/DataAccess/MediaWikiRevisionSchemaInserter.php
 create mode 100644 src/DataAccess/MediaWikiRevisionSchemaUpdater.php
 delete mode 100644 src/DataAccess/MediaWikiRevisionSchemaWriter.php
 create mode 100644 src/DataAccess/SchemaCleaner.php
 create mode 100644 src/DataAccess/SchemaEncoder.php
 create mode 100644 src/DataAccess/SchemaInserter.php
 create mode 100644 src/DataAccess/SchemaUpdater.php
 delete mode 100644 src/DataAccess/SchemaWriter.php
 create mode 100644 src/DataAccess/WatchlistUpdater.php
 create mode 100644 src/MediaWiki/Actions/AbstractRestoreAction.php
 create mode 100644 src/MediaWiki/Actions/RestoreSubmitAction.php
 create mode 100644 src/MediaWiki/Actions/RestoreViewAction.php
 create mode 100644 src/MediaWiki/Actions/SchemaEditAction.php
 rename src/MediaWiki/{ => Actions}/SchemaSubmitAction.php (79%)
 create mode 100644 src/MediaWiki/Content/WikibaseSchemaSlotViewRenderer.php
 delete mode 100644 src/MediaWiki/SchemaEditAction.php
 create mode 100644 src/MediaWiki/Specials/SchemaText.php
 create mode 100644 src/MediaWiki/Specials/SetSchemaLabelDescriptionAliases.php
 create mode 100644 src/MediaWiki/SpecificLanguageMessageLocalizer.php
 create mode 100644 src/MediaWiki/UndoHandler.php
 create mode 100644 src/MediaWiki/WikibaseSchemaHooks.php
 create mode 100644 src/Presentation/AutocommentFormatter.php
 create mode 100644 src/Presentation/ConfirmationFormRenderer.php
 create mode 100644 src/Presentation/DiffRenderer.php
 create mode 100644 src/Presentation/InputValidator.php
 rename src/Services/{SchemaDispatcher => SchemaConverter}/FullArraySchemaData.php (87%)
 rename src/Services/{SchemaDispatcher => SchemaConverter}/FullViewSchemaData.php (51%)
 rename src/Services/{SchemaDispatcher => SchemaConverter}/NameBadge.php (86%)
 create mode 100644 src/Services/SchemaConverter/PersistenceSchemaData.php
 rename src/Services/{SchemaDispatcher/SchemaDispatcher.php => SchemaConverter/SchemaConverter.php} (55%)
 delete mode 100644 src/Services/SchemaDispatcher/MonolingualSchemaData.php
 delete mode 100644 src/WikibaseSchemaHooks.php
 create mode 100644 tests/phan/stubs/WikibaseSchema.php
 create mode 100644 tests/phpunit/API/UndoAPITest.php
 create mode 100644 tests/phpunit/DataAccess/EditConflictDetectorTest.php
 create mode 100644 tests/phpunit/DataAccess/MediaWikiRevisionSchemaInserterTest.php
 create mode 100644 tests/phpunit/DataAccess/MediaWikiRevisionSchemaUpdaterTest.php
 delete mode 100644 tests/phpunit/DataAccess/MediaWikiRevisionSchemaWriterTest.php
 create mode 100644 tests/phpunit/DataAccess/SchemaCleanerTest.php
 create mode 100644 tests/phpunit/DataAccess/SchemaEncoderTest.php
 create mode 100644 tests/phpunit/DataAccess/WatchListUpdaterTest.php
 create mode 100644 tests/phpunit/MediaWiki/Actions/RestoreSubmitActionTest.php
 create mode 100644 tests/phpunit/MediaWiki/Actions/RestoreViewActionTest.php
 rename tests/phpunit/MediaWiki/{ => Actions}/SchemaEditActionTest.php (72%)
 create mode 100644 tests/phpunit/MediaWiki/Content/WikibaseSchemaContentHandlerTest.php
 create mode 100644 tests/phpunit/MediaWiki/Content/WikibaseSchemaSlotViewRendererTest.php
 create mode 100644 tests/phpunit/MediaWiki/Specials/SchemaTextTest.php
 create mode 100644 tests/phpunit/MediaWiki/Specials/SetSchemaLabelDescriptionAliasesTest.php
 create mode 100644 tests/phpunit/MediaWiki/SpecificLanguageMessageLocalizerTest.php
 create mode 100644 tests/phpunit/MediaWiki/UndoHandlerTest.php
 create mode 100644 tests/phpunit/MediaWiki/WikibaseSchemaHooksTest.php
 create mode 100644 tests/phpunit/Mocks/HTMLFormSpy.php
 create mode 100644 tests/phpunit/Presentation/AutocommentFormatterTest.php
 create mode 100644 tests/phpunit/Presentation/InputValidatorTest.php
 create mode 100644 tests/phpunit/Services/SchemaConverter/SchemaConverterTest.php
 delete mode 100644 tests/phpunit/Services/SchemaDispatcher/SchemaDispatcherTest.php
 create mode 100644 tests/selenium/pageobjects/setlabeldecriptionaliases.schema.page.js
 create mode 100644 tests/selenium/specs/special/setSchemaLabelDescriptionAliases.js

From my comment on the 12th March (suggesting this was a lot of ongoing activity)... We use the commit the day before https://github.com/wikimedia/mediawiki-extensions-WikibaseSchema/compare/ebf90a2...master - 141 commits (Showing 106 changed files with 4,901 additions and 1,411 deletions.).. Granted, some of those are going to be translatewiki l10n updates, but they are less than one a day, so a max 21 or so

Updating ebf90a2..b29c9c5
Fast-forward
 .eslintrc.json                                                                                                |   3 +-
 composer.json                                                                                                 |   1 +
 extension.json                                                                                                |  68 +++++-
 i18n/ar.json                                                                                                  |  31 ++-
 i18n/bg.json                                                                                                  |   5 +-
 i18n/bn.json                                                                                                  |   2 +
 i18n/ca.json                                                                                                  |   5 +
 i18n/cjy-hans.json                                                                                            |   9 +
 i18n/cs.json                                                                                                  |  12 +
 i18n/da.json                                                                                                  |   7 +
 i18n/de.json                                                                                                  |  29 ++-
 i18n/diq.json                                                                                                 |   6 +
 i18n/en.json                                                                                                  |  39 +++-
 i18n/es.json                                                                                                  |  12 +-
 i18n/fr.json                                                                                                  |  31 ++-
 i18n/ia.json                                                                                                  |  16 ++
 i18n/it.json                                                                                                  |  16 +-
 i18n/ja.json                                                                                                  |  14 +-
 i18n/ko.json                                                                                                  |  15 +-
 i18n/kum.json                                                                                                 |  10 +
 i18n/lb.json                                                                                                  |  15 ++
 i18n/mk.json                                                                                                  |  31 ++-
 i18n/nb.json                                                                                                  |   7 +
 i18n/nl.json                                                                                                  |   5 +-
 i18n/pt-br.json                                                                                               |  30 ++-
 i18n/pt.json                                                                                                  |   8 +
 i18n/qqq.json                                                                                                 |  27 ++-
 i18n/roa-tara.json                                                                                            |   5 +-
 i18n/ru.json                                                                                                  |   2 +-
 i18n/sv.json                                                                                                  |  12 +-
 i18n/ta.json                                                                                                  |   4 +-
 i18n/tr.json                                                                                                  |   1 +
 i18n/uk.json                                                                                                  |   5 +-
 i18n/zh-hant.json                                                                                             |  37 ++-
 package.json                                                                                                  |   4 +-
 resources/action.edit.js                                                                                      |  13 ++
 resources/action.view.trackclicks.js                                                                          |   8 +
 resources/special.newSchema.js                                                                                |  27 +++
 resources/special.setSchemaLabelDescriptionAliases.edit.js                                                    |  24 ++
 {src/MediaWiki/Resources => resources}/viewSchema.less                                                        |  51 ++---
 src/DataAccess/EditConflict.php                                                                               |  12 +
 src/DataAccess/EditConflictDetector.php                                                                       |  85 +++++++
 src/DataAccess/MediaWikiRevisionSchemaInserter.php                                                            | 101 +++++++++
 src/DataAccess/MediaWikiRevisionSchemaUpdater.php                                                             | 290 ++++++++++++++++++++++++
 src/DataAccess/MediaWikiRevisionSchemaWriter.php                                                              | 242 --------------------
 src/DataAccess/SchemaCleaner.php                                                                              |  79 +++++++
 src/DataAccess/SchemaEncoder.php                                                                              |  74 +++++-
 src/DataAccess/SchemaInserter.php                                                                             |  29 +++
 src/DataAccess/{SchemaWriter.php => SchemaUpdater.php}                                                        |  38 ++--
 src/MediaWiki/Actions/AbstractRestoreAction.php                                                               |   3 +-
 src/MediaWiki/Actions/AbstractUndoAction.php                                                                  |  17 +-
 src/MediaWiki/Actions/RestoreSubmitAction.php                                                                 |  59 ++---
 src/MediaWiki/Actions/RestoreViewAction.php                                                                   |  18 +-
 src/MediaWiki/{ => Actions}/SchemaEditAction.php                                                              |  87 ++++++-
 src/MediaWiki/{ => Actions}/SchemaSubmitAction.php                                                            |   2 +-
 src/MediaWiki/Actions/UndoSubmitAction.php                                                                    |  40 ++--
 src/MediaWiki/Actions/UndoViewAction.php                                                                      |   9 +-
 src/MediaWiki/Content/WikibaseSchemaContent.php                                                               | 145 +-----------
 src/MediaWiki/Content/WikibaseSchemaContentHandler.php                                                        |  53 ++++-
 src/MediaWiki/Content/WikibaseSchemaSlotDiffRenderer.php                                                      |  12 +-
 src/MediaWiki/Content/WikibaseSchemaSlotViewRenderer.php                                                      | 300 ++++++++++++++++++++++++
 src/MediaWiki/Specials/NewSchema.php                                                                          |  42 +++-
 src/MediaWiki/Specials/SchemaText.php                                                                         |   6 +-
 src/MediaWiki/Specials/SetSchemaLabelDescriptionAliases.php                                                   | 209 +++++++++++------
 src/MediaWiki/SpecificLanguageMessageLocalizer.php                                                            |  37 +++
 src/MediaWiki/UndoHandler.php                                                                                 |  20 +-
 src/MediaWiki/WikibaseSchemaHooks.php                                                                         | 243 ++++++++++++++++++++
 src/Presentation/AutocommentFormatter.php                                                                     | 107 +++++++++
 src/{Services/RenderDiffHelper/RenderDiffHelper.php => Presentation/ConfirmationFormRenderer.php}             |  17 +-
 src/Presentation/DiffRenderer.php                                                                             |  29 +++
 src/Presentation/InputValidator.php                                                                           | 111 +++++++++
 src/Services/Diff/SchemaDiffer.php                                                                            |   2 +-
 src/Services/Diff/SchemaPatcher.php                                                                           |   2 +-
 src/Services/{SchemaDispatcher => SchemaConverter}/FullArraySchemaData.php                                    |   2 +-
 src/Services/{SchemaDispatcher => SchemaConverter}/FullViewSchemaData.php                                     |   2 +-
 src/Services/{SchemaDispatcher => SchemaConverter}/NameBadge.php                                              |   2 +-
 src/Services/{SchemaDispatcher => SchemaConverter}/PersistenceSchemaData.php                                  |   2 +-
 src/Services/{SchemaDispatcher/SchemaDispatcher.php => SchemaConverter/SchemaConverter.php}                   |   4 +-
 src/WikibaseSchemaHooks.php                                                                                   | 119 ----------
 tests/phpunit/DataAccess/EditConflictDetectorTest.php                                                         | 174 ++++++++++++++
 tests/phpunit/DataAccess/MediaWikiRevisionSchemaInserterTest.php                                              | 189 ++++++++++++++++
 tests/phpunit/DataAccess/MediaWikiRevisionSchemaUpdaterTest.php                                               | 777 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/phpunit/DataAccess/MediaWikiRevisionSchemaWriterTest.php                                                | 368 ------------------------------
 tests/phpunit/DataAccess/SchemaCleanerTest.php                                                                |  87 +++++++
 tests/phpunit/DataAccess/SchemaEncoderTest.php                                                                | 231 ++++++++++++++++---
 tests/phpunit/MediaWiki/Actions/RestoreViewActionTest.php                                                     |   3 +-
 tests/phpunit/MediaWiki/{ => Actions}/SchemaEditActionTest.php                                                |  11 +-
 tests/phpunit/MediaWiki/Actions/UndoViewActionTest.php                                                        |   3 +-
 tests/phpunit/MediaWiki/Content/WikibaseSchemaContentHandlerTest.php                                          |  27 +++
 tests/phpunit/MediaWiki/Content/WikibaseSchemaContentTest.php                                                 | 152 +++++--------
 tests/phpunit/MediaWiki/Content/WikibaseSchemaSlotViewRendererTest.php                                        | 180 +++++++++++++++
 tests/phpunit/MediaWiki/Specials/SetSchemaLabelDescriptionAliasesTest.php                                     | 137 +++++------
 tests/phpunit/MediaWiki/SpecificLanguageMessageLocalizerTest.php                                              |  50 ++++
 tests/phpunit/MediaWiki/WikibaseSchemaHooksTest.php                                                           |  88 ++++++++
 tests/phpunit/Presentation/AutocommentFormatterTest.php                                                       | 134 +++++++++++
 tests/phpunit/Presentation/InputValidatorTest.php                                                             | 135 +++++++++++
 tests/phpunit/Services/Diff/SchemaDifferTest.php                                                              |   2 +-
 tests/phpunit/Services/Diff/SchemaPatcherTest.php                                                             |   2 +-
 tests/phpunit/Services/{SchemaDispatcher/SchemaDispatcherTest.php => SchemaConverter/SchemaConverterTest.php} |  34 +--
 tests/selenium/pageobjects/edit.schema.page.js                                                                |  18 ++
 tests/selenium/pageobjects/newschema.page.js                                                                  |  32 +++
 tests/selenium/pageobjects/setlabeldecriptionaliases.schema.page.js                                           |  16 +-
 tests/selenium/pageobjects/view.schema.page.js                                                                |  24 +-
 tests/selenium/specs/editSchema.js                                                                            |  32 +++
 tests/selenium/specs/special/new.js                                                                           |  53 +++++
 tests/selenium/specs/special/setSchemaLabelDescriptionAliases.js                                              |  74 ++++++
 106 files changed, 4920 insertions(+), 1411 deletions(-)
 create mode 100644 i18n/cjy-hans.json
 create mode 100644 i18n/cs.json
 create mode 100644 i18n/ia.json
 create mode 100644 i18n/kum.json
 create mode 100644 i18n/pt.json
 create mode 100644 resources/action.edit.js
 create mode 100644 resources/action.view.trackclicks.js
 create mode 100644 resources/special.newSchema.js
 create mode 100644 resources/special.setSchemaLabelDescriptionAliases.edit.js
 rename {src/MediaWiki/Resources => resources}/viewSchema.less (50%)
 create mode 100644 src/DataAccess/EditConflict.php
 create mode 100644 src/DataAccess/EditConflictDetector.php
 create mode 100644 src/DataAccess/MediaWikiRevisionSchemaInserter.php
 create mode 100644 src/DataAccess/MediaWikiRevisionSchemaUpdater.php
 delete mode 100644 src/DataAccess/MediaWikiRevisionSchemaWriter.php
 create mode 100644 src/DataAccess/SchemaCleaner.php
 create mode 100644 src/DataAccess/SchemaInserter.php
 rename src/DataAccess/{SchemaWriter.php => SchemaUpdater.php} (73%)
 rename src/MediaWiki/{ => Actions}/SchemaEditAction.php (52%)
 rename src/MediaWiki/{ => Actions}/SchemaSubmitAction.php (79%)
 create mode 100644 src/MediaWiki/Content/WikibaseSchemaSlotViewRenderer.php
 create mode 100644 src/MediaWiki/SpecificLanguageMessageLocalizer.php
 create mode 100644 src/MediaWiki/WikibaseSchemaHooks.php
 create mode 100644 src/Presentation/AutocommentFormatter.php
 rename src/{Services/RenderDiffHelper/RenderDiffHelper.php => Presentation/ConfirmationFormRenderer.php} (89%)
 create mode 100644 src/Presentation/DiffRenderer.php
 create mode 100644 src/Presentation/InputValidator.php
 rename src/Services/{SchemaDispatcher => SchemaConverter}/FullArraySchemaData.php (93%)
 rename src/Services/{SchemaDispatcher => SchemaConverter}/FullViewSchemaData.php (85%)
 rename src/Services/{SchemaDispatcher => SchemaConverter}/NameBadge.php (86%)
 rename src/Services/{SchemaDispatcher => SchemaConverter}/PersistenceSchemaData.php (76%)
 rename src/Services/{SchemaDispatcher/SchemaDispatcher.php => SchemaConverter/SchemaConverter.php} (98%)
 delete mode 100644 src/WikibaseSchemaHooks.php
 create mode 100644 tests/phpunit/DataAccess/EditConflictDetectorTest.php
 create mode 100644 tests/phpunit/DataAccess/MediaWikiRevisionSchemaInserterTest.php
 create mode 100644 tests/phpunit/DataAccess/MediaWikiRevisionSchemaUpdaterTest.php
 delete mode 100644 tests/phpunit/DataAccess/MediaWikiRevisionSchemaWriterTest.php
 create mode 100644 tests/phpunit/DataAccess/SchemaCleanerTest.php
 rename tests/phpunit/MediaWiki/{ => Actions}/SchemaEditActionTest.php (72%)
 create mode 100644 tests/phpunit/MediaWiki/Content/WikibaseSchemaContentHandlerTest.php
 create mode 100644 tests/phpunit/MediaWiki/Content/WikibaseSchemaSlotViewRendererTest.php
 create mode 100644 tests/phpunit/MediaWiki/SpecificLanguageMessageLocalizerTest.php
 create mode 100644 tests/phpunit/MediaWiki/WikibaseSchemaHooksTest.php
 create mode 100644 tests/phpunit/Presentation/AutocommentFormatterTest.php
 create mode 100644 tests/phpunit/Presentation/InputValidatorTest.php
 rename tests/phpunit/Services/{SchemaDispatcher/SchemaDispatcherTest.php => SchemaConverter/SchemaConverterTest.php} (92%)

Since your target date of 1st April... https://github.com/wikimedia/mediawiki-extensions-WikibaseSchema/compare/ab6f8fe...master 8 commits (Showing 14 changed files with 458 additions and 135 deletions.

Updating ab6f8fe..b29c9c5
Fast-forward
 extension.json                                                            |   3 +-
 i18n/en.json                                                              |   4 +++
 i18n/qqq.json                                                             |   4 +++
 src/DataAccess/MediaWikiRevisionSchemaUpdater.php                         |  71 +++++++++++++++++++++++++++++++++-------
 src/DataAccess/SchemaCleaner.php                                          |  79 +++++++++++++++++++++++++++++++++++++++++++++
 src/DataAccess/SchemaEncoder.php                                          |  70 +---------------------------------------
 src/MediaWiki/Actions/RestoreSubmitAction.php                             |   1 -
 src/MediaWiki/Actions/SchemaEditAction.php                                |   1 -
 src/MediaWiki/Actions/UndoSubmitAction.php                                |   1 -
 src/MediaWiki/Specials/SetSchemaLabelDescriptionAliases.php               |   1 -
 src/MediaWiki/WikibaseSchemaHooks.php                                     |  18 +++++++++++
 src/Presentation/AutocommentFormatter.php                                 |  34 ++++++++++++++++++++
 tests/phpunit/DataAccess/MediaWikiRevisionSchemaUpdaterTest.php           | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------
 tests/phpunit/DataAccess/SchemaCleanerTest.php                            |  87 +++++++++++++++++++++++++++++++++++++++++++++++++
 tests/phpunit/DataAccess/SchemaEncoderTest.php                            |  58 +++++++++++++++++++++------------
 tests/phpunit/MediaWiki/Specials/SetSchemaLabelDescriptionAliasesTest.php |   7 ++--
 16 files changed, 478 insertions(+), 136 deletions(-)
 create mode 100644 src/DataAccess/SchemaCleaner.php
 create mode 100644 tests/phpunit/DataAccess/SchemaCleanerTest.php

All of this makes a review harder; the review has been a moving target. It's not just been bug fixes etc, it's seemingly been new features/functionality being threaded in too. I haven't gone through the commits in detail, but pages and pages of them... Granted, i18n/l10n are excluded, and to some extent tests (though, they can have some value in reviewing the code too)

It's not fair on me (or anyone else), to be asked to review something for a target deploy date, and then carry on piling more code onto it. By your own admission on the 13th, you do state the extension is/was under active development too.

I understand it's difficult to ask for a code freeze too, but there's got to be some compromise in the middle. There's some discussion starting about this over on mediawiki.org, as we note we don't actually state any of this in our SOP, so it's not specifically your fault.


This particular review clearly was requested too early, apologies for that. What I can assure at this point, understanding it does not change the past issues, that the extension code is now in the ready state, and there are only finishing touches being done to it this week.
I will update this ticket next week with the new desired deployment date, after checking this with the Product Management, as the development took longer than planned, and the original date has not been met.

I don't see a problem with a review being requested early, in fact, it's beneficial to help with us trying to plan our workloads, prioritise etc. For example, Lyida filing it, and then stalling it because it wasn't ready is great, it helps us know what's going on. It's the work after that that causes the issues

If you could indeed work out a new target deployment date (I don't think t's fair on you either to ask for a month from today, or anything), giving a couple of weeks maybe, we should be able to get this shuffled in and through in a relatively timely fashion

Thanks for your understanding

From my side I'd like the review to happen asap because otherwise it's getting into my vacation and I can't help deal with the feedback and requests from the editors. For that to work out we'd need to have everything ready for deployment on 24th of April.

From my side I'd like the review to happen asap because otherwise it's getting into my vacation and I can't help deal with the feedback and requests from the editors. For that to work out we'd need to have everything ready for deployment on 24th of April.

Been busy. Hopefully planning to have this sorted out by the end of the week :)

As far as I'm concerned, this is good to go. A little bit of cleaning up, but nothing security specifically

	"version": "0.0.0",

Might want to set that to something > 0.0.0 before deploying it :)

switch(true) feels odd.

SchemaEditAction::getName() the * @since 1.17 seems out of place, it's since 1.17 in MW, not in this extension (and other FormAction subclasses, they override getName() but don't have this copied forward comment)

Some minor php documentation issues, you use return bool and return false in difference places, even if only in the first case, the code only returns a false.

SchemaConverter has quite a lot of very similar looking duplicate code in the get functions. But as differences of values/properties in handling may come later, it's probably not worth much "condensing". Maybe some of the error early returns could be condensed.

Some very minor bits of cleanup/standardisation/simplification in https://gerrit.wikimedia.org/r/#/c/mediawiki/extensions/WikibaseSchema/+/505662/