Page MenuHomePhabricator

Switch `GrowthMentorList` Community Configuration provider to JSON schema validation
Closed, ResolvedPublic

Description

GrowthExperiments-Mentorship needs to maintain a list of mentors. Currently, this is done via CommunityConfiguration, specifically, using the GrowthMentorList provider. Data validity is ensured by custom-written validator (originally from times when no Community Configuration existed and when a similar feature existed internally within GrowthExperiments).

Ideally, we should use the default JSON-based validator. This will allow us to do several improvements:

  • remove last bits of CC1.0 code from GrowthExperiments,
  • ensure defaults-provisioning code works as intended (see T417417 for more details),
  • in the long term, be easier to maintain than a custom-written validator.

@Urbanecm_WMF previously attempted to do this as part of T367575: Structured Mentor list should load its data using the CommunityConfiguration extension, but unsuccessfully.

Acceptance Criteria
  • On all wikis (beta and production), the JSON schema validator is used to validate MediaWiki:GrowthMentors.json

Details

Related Changes in Gerrit:
Show related patches Customize query in gerrit

Event Timeline

Restricted Application added a subscriber: Aklapper. · View Herald Transcript

Change #1052143 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] Validate mentor list using a JSON schema

https://gerrit.wikimedia.org/r/1052143

Change #1052143 abandoned by Urbanecm:

[mediawiki/extensions/GrowthExperiments@master] Validate mentor list using a JSON schema

Reason:

will replace with a different solution

https://gerrit.wikimedia.org/r/1052143

Change #1239707 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] [DNM] Validate mentor list using a JSON schema

https://gerrit.wikimedia.org/r/1239707

This is a potentially dangerous change, as it can easily trigger validation errors or misbehaviours. We can slightly reduce the risks by deploying more gradually (continuing to use CommunityStructuredMentorListValidator on most wikis and perhaps switching pilots first).

As discussed in a meeting with @Michael, those are the next steps:

  • ensure the change can be deployed progressively via a feature flag,
    • MediaWiki-extensions-CommunityConfiguration reads the list of CC providers from both extension.json and MW config (which is prioritised); we should be able to (temporarily) copy provider config for GrowthMentorList to MW config and change the validator as needed,
  • download mentorslists from all GrowthExperiments wikis and validate them against the JSON schema,
  • for all invalidities, write a test that ensures "reading such GrowthMentors.json works even in the new system" (alternatively, write a data migration, but I'd really like to avoid that),
    • at the very least, {"Mentors": []} will likely require intervention
    • for the test, overrideProviderConfig (from CommunityConfigurationTestHelpers in CC) should be sufficient; it pretends given provider is static, but to verify validation works, this should be more than enough
  • allow MediaWiki-extensions-CommunityConfiguration to log invalid reads at an appropriate level; use this to verify the deployment of this change suceeded
Urbanecm_WMF triaged this task as Medium priority.
Urbanecm_WMF moved this task from Incoming to Doing on the Growth-Team (FY2025-26 Q3 Sprint 3) board.

[...]

  • download mentorslists from all GrowthExperiments wikis and validate them against the JSON schema,

To do this, I first needed the actual JSON schema (written as JSON). To receive it, I used PS13 of https://gerrit.wikimedia.org/r/c/mediawiki/extensions/GrowthExperiments/+/1239707 and in my shell.php session, I did this:

> \MediaWiki\MediaWikiServices::getInstance()->get('CommunityConfiguration.ProviderFactory')->newProvider('GrowthMentorList')->getValidator()->getSchemaBuilder()->getRootSchema()
= [
    "$schema" => "https://json-schema.org/draft-04/schema#",
    "$id" => "GrowthExperiments/Config/Schemas/MentorListSchema",
    "additionalProperties" => false,
    "required" => [],
    "type" => "object",
    "properties" => [
      "Mentors" => [
        "type" => "object",
        "patternProperties" => [
          "^[0-9]+$" => [
            "type" => "object",
            "properties" => [
              "username" => [
                "type" => "string",
              ],
              "message" => [
                "type" => [
                  "string",
                  "null",
                ],
                "maxLength" => 240,
              ],
              "weight" => [
                "type" => "integer",
              ],
              "automaticallyAssigned" => [
                "type" => "boolean",
              ],
              "awayTimestamp" => [
                "type" => "string",
              ],
            ],
            "additionalProperties" => false,
          ],
        ],
        "default" => [],
        "additionalProperties" => false,
      ],
    ],
  ]

The result is pasted below:

1{
2 "$schema": "https://json-schema.org/draft-04/schema#",
3 "$id": "GrowthExperiments/Config/Schemas/MentorListSchema",
4 "additionalProperties": false,
5 "required": [],
6 "type": "object",
7 "properties": {
8 "Mentors": {
9 "type": "object",
10 "patternProperties": {
11 "^[0-9]+$": {
12 "type": "object",
13 "properties": {
14 "username": {
15 "type": "string"
16 },
17 "message": {
18 "type": [
19 "string",
20 "null"
21 ],
22 "maxLength": 240
23 },
24 "weight": {
25 "type": "integer"
26 },
27 "automaticallyAssigned": {
28 "type": "boolean"
29 },
30 "awayTimestamp": {
31 "type": "string"
32 }
33 },
34 "additionalProperties": false
35 }
36 },
37 "default": [],
38 "additionalProperties": false
39 }
40 }
41}

  • for all invalidities, write a test that ensures "reading such GrowthMentors.json works even in the new system" (alternatively, write a data migration, but I'd really like to avoid that),
    • at the very least, {"Mentors": []} will likely require intervention

To my surprise, it didn't. This is because DataProvider::normalizeConfigToObjects automatically converts PHP arrays to objects when the schema specifies an object is expected.

  • for the test, overrideProviderConfig (from CommunityConfigurationTestHelpers in CC) should be sufficient; it pretends given provider is static, but to verify validation works, this should be more than enough

I've added MentorListConfigProviderTest::testLoadsFromInvalid that can validate a certain stored wikipage can be read. We can add more cases to it as we learn about them when validating the various mentor lists.

I've successfully validated the mentor lists. I used this Jupyter notebook. The only case of an invalid mentor list is {"Mentors": []}, which works properly, as demonstrated in the previous comment.

If anyone wishes to examine the results closer, see the following file (and/or the source code):

Change #1240694 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[operations/mediawiki-config@master] [Growth] Force legacy validation of GrowthMentorList

https://gerrit.wikimedia.org/r/1240694

Change #1240697 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[operations/mediawiki-config@master] [Growth] Enable new GrowthMentorList validation on beta wikis

https://gerrit.wikimedia.org/r/1240697

Change #1240694 merged by jenkins-bot:

[operations/mediawiki-config@master] [Growth] Force legacy validation of GrowthMentorList

https://gerrit.wikimedia.org/r/1240694

Mentioned in SAL (#wikimedia-operations) [2026-02-23T09:21:17Z] <urbanecm@deploy2002> Started scap sync-world: Backport for [[gerrit:1240694|[Growth] Force legacy validation of GrowthMentorList (T417422)]]

Mentioned in SAL (#wikimedia-operations) [2026-02-23T09:23:16Z] <urbanecm@deploy2002> urbanecm: Backport for [[gerrit:1240694|[Growth] Force legacy validation of GrowthMentorList (T417422)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Change #1242273 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[operations/mediawiki-config@master] Revert "[Growth] Force legacy validation of GrowthMentorList"

https://gerrit.wikimedia.org/r/1242273

Change #1242273 merged by jenkins-bot:

[operations/mediawiki-config@master] Revert "[Growth] Force legacy validation of GrowthMentorList"

https://gerrit.wikimedia.org/r/1242273

Mentioned in SAL (#wikimedia-operations) [2026-02-23T09:36:30Z] <urbanecm@deploy2002> Started scap sync-world: Backport for [[gerrit:1242273|Revert "[Growth] Force legacy validation of GrowthMentorList" (T417422)]]

Mentioned in SAL (#wikimedia-operations) [2026-02-23T09:42:30Z] <urbanecm@deploy2002> Finished scap sync-world: Backport for [[gerrit:1242273|Revert "[Growth] Force legacy validation of GrowthMentorList" (T417422)]] (duration: 06m 00s)

I tried deploying the force legacy validation patch today, and it failed, with:

Original exception: [9cf2012a-3dfe-434f-827c-c040e6520c9e] /wiki/Main_Page InvalidArgumentException: Provider class GrowthMentorList is not supported
Backtrace:
from /srv/mediawiki/php-1.46.0-wmf.16/extensions/CommunityConfiguration/src/Provider/ConfigurationProviderFactory.php(86)
#0 /srv/mediawiki/php-1.46.0-wmf.16/extensions/CommunityConfiguration/src/Provider/ConfigurationProviderFactory.php(142): MediaWiki\Extension\CommunityConfiguration\Provider\ConfigurationProviderFactory->getProviderClassSpec(string)
#1 /srv/mediawiki/php-1.46.0-wmf.16/extensions/CommunityConfiguration/src/Provider/ConfigurationProviderFactory.php(175): MediaWiki\Extension\CommunityConfiguration\Provider\ConfigurationProviderFactory->constructProvider(string)
#2 /srv/mediawiki/php-1.46.0-wmf.16/extensions/GrowthExperiments/ServiceWiring.php(644): MediaWiki\Extension\CommunityConfiguration\Provider\ConfigurationProviderFactory->newProvider(string)
#3 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/services/src/ServiceContainer.php(440): Wikimedia\Services\ServiceContainer::{closure}(MediaWiki\MediaWikiServices)
#4 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/services/src/ServiceContainer.php(406): Wikimedia\Services\ServiceContainer->createService(string)
#5 /srv/mediawiki/php-1.46.0-wmf.16/includes/MediaWikiServices.php(379): Wikimedia\Services\ServiceContainer->getService(string)
#6 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/services/src/ServiceContainer.php(414): MediaWiki\MediaWikiServices->getService(string)
#7 /srv/mediawiki/php-1.46.0-wmf.16/extensions/GrowthExperiments/includes/GrowthExperimentsServices.php(204): Wikimedia\Services\ServiceContainer->get(string)
#8 /srv/mediawiki/php-1.46.0-wmf.16/extensions/GrowthExperiments/ServiceWiring.php(633): GrowthExperiments\GrowthExperimentsServices->getMentorProviderStructured()
#9 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/services/src/ServiceContainer.php(440): Wikimedia\Services\ServiceContainer::{closure}(MediaWiki\MediaWikiServices)
#10 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/services/src/ServiceContainer.php(406): Wikimedia\Services\ServiceContainer->createService(string)
#11 /srv/mediawiki/php-1.46.0-wmf.16/includes/MediaWikiServices.php(379): Wikimedia\Services\ServiceContainer->getService(string)
#12 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/services/src/ServiceContainer.php(414): MediaWiki\MediaWikiServices->getService(string)
#13 /srv/mediawiki/php-1.46.0-wmf.16/extensions/GrowthExperiments/includes/GrowthExperimentsServices.php(200): Wikimedia\Services\ServiceContainer->get(string)
#14 /srv/mediawiki/php-1.46.0-wmf.16/extensions/GrowthExperiments/ServiceWiring.php(620): GrowthExperiments\GrowthExperimentsServices->getMentorProvider()
#15 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/services/src/ServiceContainer.php(440): Wikimedia\Services\ServiceContainer::{closure}(MediaWiki\MediaWikiServices)
#16 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/services/src/ServiceContainer.php(406): Wikimedia\Services\ServiceContainer->createService(string)
#17 /srv/mediawiki/php-1.46.0-wmf.16/includes/MediaWikiServices.php(379): Wikimedia\Services\ServiceContainer->getService(string)
#18 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/services/src/ServiceContainer.php(414): MediaWiki\MediaWikiServices->getService(string)
#19 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/object-factory/src/ObjectFactory.php(204): Wikimedia\Services\ServiceContainer->get(string)
#20 /srv/mediawiki/php-1.46.0-wmf.16/vendor/wikimedia/object-factory/src/ObjectFactory.php(149): Wikimedia\ObjectFactory\ObjectFactory::getObjectFromSpec(array, array)
#21 /srv/mediawiki/php-1.46.0-wmf.16/includes/HookContainer/HookContainer.php(231): Wikimedia\ObjectFactory\ObjectFactory->createObject(array)
#22 /srv/mediawiki/php-1.46.0-wmf.16/includes/HookContainer/HookContainer.php(288): MediaWiki\HookContainer\HookContainer->makeExtensionHandlerCallback(string, array, array)
#23 /srv/mediawiki/php-1.46.0-wmf.16/includes/HookContainer/HookContainer.php(411): MediaWiki\HookContainer\HookContainer->normalizeHandler(string, array, array)
#24 /srv/mediawiki/php-1.46.0-wmf.16/includes/HookContainer/HookContainer.php(128): MediaWiki\HookContainer\HookContainer->getHandlers(string, array)
#25 /srv/mediawiki/php-1.46.0-wmf.16/includes/HookContainer/HookRunner.php(4818): MediaWiki\HookContainer\HookContainer->run(string, array)
#26 /srv/mediawiki/php-1.46.0-wmf.16/includes/User/Options/DefaultOptionsLookup.php(113): MediaWiki\HookContainer\HookRunner->onUserGetDefaultOptions(array)
#27 /srv/mediawiki/php-1.46.0-wmf.16/includes/User/Options/DefaultOptionsLookup.php(122): MediaWiki\User\Options\DefaultOptionsLookup->getGenericDefaultOptions()
#28 /srv/mediawiki/php-1.46.0-wmf.16/includes/User/Options/UserOptionsManager.php(538): MediaWiki\User\Options\DefaultOptionsLookup->getDefaultOptions(MediaWiki\User\User)
#29 /srv/mediawiki/php-1.46.0-wmf.16/includes/User/Options/UserOptionsManager.php(440): MediaWiki\User\Options\UserOptionsManager->loadOriginalOptions(MediaWiki\User\User, int)
#30 /srv/mediawiki/php-1.46.0-wmf.16/includes/User/Options/UserOptionsManager.php(163): MediaWiki\User\Options\UserOptionsManager->loadUserOptions(MediaWiki\User\User, int)
#31 /srv/mediawiki/php-1.46.0-wmf.16/includes/User/Options/UserOptionsLookup.php(117): MediaWiki\User\Options\UserOptionsManager->getOption(MediaWiki\User\User, string, null, bool, int)
#32 /srv/mediawiki/php-1.46.0-wmf.16/includes/Actions/ActionEntryPoint.php(382): MediaWiki\User\Options\UserOptionsLookup->getBoolOption(MediaWiki\User\User, string)
#33 /srv/mediawiki/php-1.46.0-wmf.16/includes/Actions/ActionEntryPoint.php(144): MediaWiki\Actions\ActionEntryPoint->performRequest()
#34 /srv/mediawiki/php-1.46.0-wmf.16/includes/MediaWikiEntryPoint.php(180): MediaWiki\Actions\ActionEntryPoint->execute()
#35 /srv/mediawiki/php-1.46.0-wmf.16/index.php(44): MediaWiki\MediaWikiEntryPoint->run()
#36 /srv/mediawiki/w/index.php(3): require(string)
#37 {main}

on every single request. This was happening, because the config patch includes 'type' => 'GrowthMentorList' as part of wgCommunityConfigurationProviders. However, the GrowthMentorList provider class/type was only introduced in the GrowthExperiments patch (which changes the default validation to jsonschema), that is not yet in production.

This means that, right now, the configuration patch and the GrowthExperiments patch are bidirectionally dependent on each other. If we deploy GrowthExperiments patch first, we enable the new validation (which we want to do carefully). If we deploy the new config patch, we have InvalidArgumentException everywhere.

To fix this, we should:

  1. Temporarily change the default validation in GrowthExperiments' extension.json to legacy ("validator": {"type": "GrowthMentorship"}}).
  2. Backport both r1239707 and the patch from step 1 to production
  3. At this point, the conversion between PHP arrays and objects will happen in the GrowthMentorList provider, rather than in CommunityGetMentorDataTrait
  4. Re-deploy the config patch (no changes should be necessary)

Then, we can follow as originally planned, which means:

  1. Enable new validation on beta wikis (r1240697) and possibly on testwiki
  2. Perform testing
  3. Once happy, deploy to production (while using T417893)

Change #1242282 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] Temporarily switch mentor list validation to legacy validator

https://gerrit.wikimedia.org/r/1242282

Change #1242283 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[operations/mediawiki-config@master] Revert^2 "[Growth] Force legacy validation of GrowthMentorList"

https://gerrit.wikimedia.org/r/1242283

Change #1239707 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Validate mentor list using a JSON schema

https://gerrit.wikimedia.org/r/1239707

Change #1242284 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] Revert "Temporarily switch mentor list validation to legacy validator"

https://gerrit.wikimedia.org/r/1242284

Change #1242295 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@wmf/1.46.0-wmf.16] Validate mentor list using a JSON schema

https://gerrit.wikimedia.org/r/1242295

Change #1242296 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@wmf/1.46.0-wmf.16] Temporarily switch mentor list validation to legacy validator

https://gerrit.wikimedia.org/r/1242296

Change #1242295 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@wmf/1.46.0-wmf.16] Validate mentor list using a JSON schema

https://gerrit.wikimedia.org/r/1242295

Change #1242296 merged by Urbanecm:

[mediawiki/extensions/GrowthExperiments@wmf/1.46.0-wmf.16] Temporarily switch mentor list validation to legacy validator

https://gerrit.wikimedia.org/r/1242296

Mentioned in SAL (#wikimedia-operations) [2026-02-23T10:57:58Z] <urbanecm@deploy2002> Started scap sync-world: Backport for [[gerrit:1242298|cleanup: Remove unused code]], [[gerrit:1242295|Validate mentor list using a JSON schema (T417422)]], [[gerrit:1242296|Temporarily switch mentor list validation to legacy validator (T417422)]]

Mentioned in SAL (#wikimedia-operations) [2026-02-23T10:59:50Z] <urbanecm@deploy2002> urbanecm: Backport for [[gerrit:1242298|cleanup: Remove unused code]], [[gerrit:1242295|Validate mentor list using a JSON schema (T417422)]], [[gerrit:1242296|Temporarily switch mentor list validation to legacy validator (T417422)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2026-02-23T11:04:43Z] <urbanecm@deploy2002> Finished scap sync-world: Backport for [[gerrit:1242298|cleanup: Remove unused code]], [[gerrit:1242295|Validate mentor list using a JSON schema (T417422)]], [[gerrit:1242296|Temporarily switch mentor list validation to legacy validator (T417422)]] (duration: 06m 46s)

Change #1242282 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Temporarily switch mentor list validation to legacy validator

https://gerrit.wikimedia.org/r/1242282

Change #1242283 merged by jenkins-bot:

[operations/mediawiki-config@master] Revert^2 "[Growth] Force legacy validation of GrowthMentorList"

https://gerrit.wikimedia.org/r/1242283

Mentioned in SAL (#wikimedia-operations) [2026-02-23T12:20:18Z] <urbanecm@deploy2002> Started scap sync-world: Backport for [[gerrit:1242283|Revert^2 "[Growth] Force legacy validation of GrowthMentorList" (T417422)]]

Mentioned in SAL (#wikimedia-operations) [2026-02-23T12:22:11Z] <urbanecm@deploy2002> urbanecm: Backport for [[gerrit:1242283|Revert^2 "[Growth] Force legacy validation of GrowthMentorList" (T417422)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2026-02-23T12:36:09Z] <urbanecm@deploy2002> Finished scap sync-world: Backport for [[gerrit:1242283|Revert^2 "[Growth] Force legacy validation of GrowthMentorList" (T417422)]] (duration: 15m 50s)

Change #1240697 merged by jenkins-bot:

[operations/mediawiki-config@master] [Growth] beta: Enable new GrowthMentorList validation on beta wikis

https://gerrit.wikimedia.org/r/1240697

Attempting to save:

{
	"Mentors": []
}

on beta wikis should fail with this.

Change #1242392 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[operations/mediawiki-config@master] [Growth] Log read failures when JSON schema validation is enabled

https://gerrit.wikimedia.org/r/1242392

Change #1242466 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[operations/mediawiki-config@master] [Growth] Enable wmgGEMentorListJsonSchemaEnabled

https://gerrit.wikimedia.org/r/1242466

Change #1242284 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Revert "Temporarily switch mentor list validation to legacy validator"

https://gerrit.wikimedia.org/r/1242284

Change #1242392 merged by jenkins-bot:

[operations/mediawiki-config@master] [Growth] Log read failures when JSON schema validation is enabled

https://gerrit.wikimedia.org/r/1242392

Mentioned in SAL (#wikimedia-operations) [2026-02-25T12:39:58Z] <urbanecm@deploy2002> Started scap sync-world: Backport for [[gerrit:1243190|feat(DataProvider): Allow logging of read validation failures (T417893)]], [[gerrit:1242392|[Growth] Log read failures when JSON schema validation is enabled (T417422 T417893)]]

Mentioned in SAL (#wikimedia-operations) [2026-02-25T12:42:16Z] <urbanecm@deploy2002> urbanecm: Backport for [[gerrit:1243190|feat(DataProvider): Allow logging of read validation failures (T417893)]], [[gerrit:1242392|[Growth] Log read failures when JSON schema validation is enabled (T417422 T417893)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Change #1243811 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[operations/mediawiki-config@master] [Growth] testwiki: Enable wmgGEMentorListJsonSchemaEnabled

https://gerrit.wikimedia.org/r/1243811

Mentioned in SAL (#wikimedia-operations) [2026-02-25T12:46:56Z] <urbanecm@deploy2002> Finished scap sync-world: Backport for [[gerrit:1243190|feat(DataProvider): Allow logging of read validation failures (T417893)]], [[gerrit:1242392|[Growth] Log read failures when JSON schema validation is enabled (T417422 T417893)]] (duration: 06m 57s)

Change #1243811 merged by jenkins-bot:

[operations/mediawiki-config@master] [Growth] testwiki: Enable wmgGEMentorListJsonSchemaEnabled

https://gerrit.wikimedia.org/r/1243811

Mentioned in SAL (#wikimedia-operations) [2026-02-25T12:48:05Z] <urbanecm@deploy2002> Started scap sync-world: Backport for [[gerrit:1243811|[Growth] testwiki: Enable wmgGEMentorListJsonSchemaEnabled (T417422)]]

Mentioned in SAL (#wikimedia-operations) [2026-02-25T12:50:20Z] <urbanecm@deploy2002> urbanecm: Backport for [[gerrit:1243811|[Growth] testwiki: Enable wmgGEMentorListJsonSchemaEnabled (T417422)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2026-02-25T13:00:05Z] <urbanecm@deploy2002> Finished scap sync-world: Backport for [[gerrit:1243811|[Growth] testwiki: Enable wmgGEMentorListJsonSchemaEnabled (T417422)]] (duration: 12m 00s)

Change #1242466 merged by jenkins-bot:

[operations/mediawiki-config@master] [Growth] Enable wmgGEMentorListJsonSchemaEnabled

https://gerrit.wikimedia.org/r/1242466

Mentioned in SAL (#wikimedia-operations) [2026-02-25T13:05:01Z] <urbanecm@deploy2002> Started scap sync-world: Backport for [[gerrit:1242466|[Growth] Enable wmgGEMentorListJsonSchemaEnabled (T417422)]]

Mentioned in SAL (#wikimedia-operations) [2026-02-25T13:07:10Z] <urbanecm@deploy2002> urbanecm: Backport for [[gerrit:1242466|[Growth] Enable wmgGEMentorListJsonSchemaEnabled (T417422)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2026-02-25T13:12:25Z] <urbanecm@deploy2002> Finished scap sync-world: Backport for [[gerrit:1242466|[Growth] Enable wmgGEMentorListJsonSchemaEnabled (T417422)]] (duration: 07m 24s)

Urbanecm_WMF added a subscriber: Etonkovidova.

Should be finally ready.

@Etonkovidova The biggest risk here is that a weird MediaWiki:GrowthMentors.json (the JSON backing the mentor list up) is not recognised anymore, as we completely changed the validation logic. If Logstash says something like Array value found, but an object is required. Key: Mentors or similar (in CommunityConfiguration channel), then we have a potentially serious problem.

Should be finally ready.

@Etonkovidova The biggest risk here is that a weird MediaWiki:GrowthMentors.json (the JSON backing the mentor list up) is not recognised anymore, as we completely changed the validation logic. If Logstash says something like Array value found, but an object is required. Key: Mentors or similar (in CommunityConfiguration channel), then we have a potentially serious problem.

Looks ok to me (checked on ruwiki beta). Checked logstash CommunityConfiguration channel - the error is not present.

Etonkovidova updated the task description. (Show Details)