GrowthExperiments accesses MediaWiki-extensions-CommunityConfiguration data via a wrapper called MediaWikiConfigReaderWrapper. This wrapper allows us to pre-process certain configuration options before passing them over to the rest of GrowthExperiments. This was done to support otherwise-incompatible changes that are being made as migrating to the CommunityConfiguration extension (from Special:EditGrowthConfig).
One of those pre-processing impacts GELevelingUpKeepGoingNotificationThresholds, which is specified as an integer in CommunityConfiguration extension, but the rest of GrowthExperiments expects a range (one minimum, one maximum). We use the integer specified in CommunityConfiguration as the maximum, and provide a fixed integer as the minimum. Overall, this allows us to follow the promises made in the user interface (see below), without also having to make difficult-to-revert changes across all of GrowthExperiments.
This pre-processing is a form of Technical-Debt that should be replaced with a better solution. We used it as an intermediate solution, as we weren't sure which route we want to go through. In T366139: Clarify if the minimum in GELevelingUpKeepGoingNotificationThresholds should be editable, we decided to keep the minimum fixed and non-configurable, as there is no scenario in which changing the minimum would be necessary.
Within this task, we should remove the technical debt mentioned above. Given the decision described above, we can do the following:
- Create a new configuration variable called GELevelingUpKeepGoingNotificationThresholdsMaximum (or similar), and migrate the current value of GELevelingUpKeepGoingNotificationThresholds from the JSON page to it.
- Create a constant in LevellingUpManager, which would define the minimum (currently set as 1; although it is overridable both on-wiki and in server-settings, no wiki changed it, and code-wise, the variable is only referred to in GrowthExperiments itself).
- Remove all usages of GELevelingUpKeepGoingNotificationThresholds with either the constant or GELevelingUpKeepGoingNotificationThresholdsMaximum, as appropriate
- Drop GELevelingUpKeepGoingNotificationThresholds altogether
