Page MenuHomePhabricator

CommentStreams incompatible with SemanticMediaWiki
Closed, ResolvedPublicBUG REPORT

Description

On latest versions of CommentStreams and SemanticMediaWiki, when a wiki with following configurations:

$wgLocalisationCacheConf = [
	'class' => LocalisationCache::class,
	'store' => 'array',
	'storeClass' => false,
	'storeServer' => [],
	'forceRecache' => false,
	'storeDirectory' => __DIR__ . "/cache/l10n",
	'manualRecache' => true,
];

then run rebuildLocalisationCache maintenance script, the following exceptions will happen:

SMW\Exception\SiteLanguageChangeException from line 243 of /var/www/wiki/w/extensions/SemanticMediaWiki/src/NamespaceManager.php: A change to the `wgLanguageCode` was detected showing a discrepancy (de, en) and is preventing Semantic MediaWiki from modifying related namespace settings.

LocalSettings.php should only contain one `wgLanguageCode` definition and the declaration should happen before `enableSemantics`.
#0 /var/www/wiki/w/extensions/SemanticMediaWiki/src/NamespaceManager.php(200): SMW\NamespaceManager->getLanguageCode()
#1 /var/www/wiki/w/extensions/SemanticMediaWiki/src/NamespaceManager.php(92): SMW\NamespaceManager::initCustomNamespace()
#2 /var/www/wiki/w/extensions/SemanticMediaWiki/src/MediaWiki/Hooks.php(221): SMW\NamespaceManager::initCanonicalNamespaces()
#3 /var/www/wiki/w/includes/Hooks.php(174): SMW\MediaWiki\Hooks::SMW\MediaWiki\{closure}()
#4 /var/www/wiki/w/includes/Hooks.php(202): Hooks::callHook()
#5 /var/www/wiki/w/includes/title/NamespaceInfo.php(356): Hooks::run()
#6 /var/www/wiki/w/languages/Language.php(487): NamespaceInfo->getCanonicalNamespaces()
#7 /var/www/wiki/w/languages/Language.php(563): Language->getNamespaces()
#8 /var/www/wiki/w/includes/title/MediaWikiTitleCodec.php(108): Language->getNsText()
#9 /var/www/wiki/w/includes/title/MediaWikiTitleCodec.php(138): MediaWikiTitleCodec->getNamespaceName()
#10 /var/www/wiki/w/includes/title/MediaWikiTitleCodec.php(266): MediaWikiTitleCodec->formatTitle()
#11 /var/www/wiki/w/includes/cache/LinkCache.php(246): MediaWikiTitleCodec->getPrefixedDBkey()
#12 /var/www/wiki/w/includes/Title.php(3142): LinkCache->addLinkObj()
#13 /var/www/wiki/w/includes/Revision/RevisionRecord.php(109): Title->getArticleID()
#14 /var/www/wiki/w/includes/Revision/RevisionStoreRecord.php(64): MediaWiki\Revision\RevisionRecord->__construct()
#15 /var/www/wiki/w/includes/Revision/RevisionStore.php(1893): MediaWiki\Revision\RevisionStoreRecord->__construct()
#16 /var/www/wiki/w/includes/Revision/RevisionStore.php(1816): MediaWiki\Revision\RevisionStore->newRevisionFromRowAndSlots()
#17 /var/www/wiki/w/includes/Revision/RevisionStore.php(2538): MediaWiki\Revision\RevisionStore->newRevisionFromRow()
#18 /var/www/wiki/w/includes/Revision/RevisionStore.php(1513): MediaWiki\Revision\RevisionStore->loadRevisionFromConds()
#19 /var/www/wiki/w/includes/Revision.php(139): MediaWiki\Revision\RevisionStore->getRevisionByTitle()
#20 /var/www/wiki/w/extensions/Gadgets/includes/MediaWikiGadgetsDefinitionRepo.php(139): Revision::newFromTitle()
#21 /var/www/wiki/w/extensions/Gadgets/includes/MediaWikiGadgetsDefinitionRepo.php(108): MediaWikiGadgetsDefinitionRepo->fetchStructuredList()
#22 /var/www/wiki/w/includes/libs/objectcache/wancache/WANObjectCache.php(1423): MediaWikiGadgetsDefinitionRepo->{closure}()
#23 /var/www/wiki/w/includes/libs/objectcache/wancache/WANObjectCache.php(1278): WANObjectCache->fetchOrRegenerate()
#24 /var/www/wiki/w/extensions/Gadgets/includes/MediaWikiGadgetsDefinitionRepo.php(115): WANObjectCache->getWithSetCallback()
#25 /var/www/wiki/w/extensions/Gadgets/includes/MediaWikiGadgetsDefinitionRepo.php(31): MediaWikiGadgetsDefinitionRepo->loadGadgets()
#26 /var/www/wiki/w/extensions/Gadgets/includes/GadgetHooks.php(134): MediaWikiGadgetsDefinitionRepo->getGadgetIds()
#27 /var/www/wiki/w/includes/Hooks.php(174): GadgetHooks::registerModules()
#28 /var/www/wiki/w/includes/Hooks.php(202): Hooks::callHook()
#29 /var/www/wiki/w/includes/ServiceWiring.php(690): Hooks::run()
#30 /var/www/wiki/w/includes/libs/services/ServiceContainer.php(458): Wikimedia\Services\ServiceContainer->{closure}()
#31 /var/www/wiki/w/includes/libs/services/ServiceContainer.php(427): Wikimedia\Services\ServiceContainer->createService()
#32 /var/www/wiki/w/includes/MediaWikiServices.php(901): Wikimedia\Services\ServiceContainer->getService()
#33 /var/www/wiki/w/maintenance/rebuildLocalisationCache.php(98): MediaWiki\MediaWikiServices->getResourceLoader()
#34 /var/www/wiki/w/includes/cache/localisation/LocalisationCache.php(1049): RebuildLocalisationCache->{closure}()
#35 /var/www/wiki/w/includes/cache/localisation/LocalisationCacheBulkLoad.php(100): LocalisationCache->recache()
#36 /var/www/wiki/w/maintenance/rebuildLocalisationCache.php(178): LocalisationCacheBulkLoad->recache()
#37 /var/www/wiki/w/maintenance/rebuildLocalisationCache.php(138): RebuildLocalisationCache->doRebuild()
#38 /var/www/wiki/w/maintenance/doMaintenance.php(99): RebuildLocalisationCache->execute()
#39 /var/www/wiki/w/maintenance/rebuildLocalisationCache.php(197): require_once('/var/www/wiki/w...')
#40 {main}

I'm not sure whether it is CommentStreams or SMW causing this exception, but when I removed
wfLoadExtension ( 'CommentStreams' );, everything went well.

Event Timeline

Zorua_Fox renamed this task from Plugin incompatible with SemanticMediWiki to Extension incompatible with SemanticMediWiki.Apr 4 2025, 7:57 AM
Zorua_Fox triaged this task as Medium priority.
Aklapper renamed this task from Extension incompatible with SemanticMediWiki to CommentStreams incompatible with SemanticMediaWiki.Apr 4 2025, 9:27 AM
Zorua_Fox raised the priority of this task from Medium to Needs Triage.Apr 7 2025, 5:33 PM

@MarkAHershberger @Osnard Sorry to bother you but is this a SMW issue or CommentStreams changed something?

Thanks for the ping. I'll try to look later, unless @Osnard beats me to it. I don't think this is related to the SMW bit as that has been here a while.

@Zorua_Fox did you upgrade recently? What were you running before?

在T391074#10877000中,@MarkAHershberger写道:

Thanks for the ping. I'll try to look later, unless @Osnard beats me to it. I don't think this is related to the SMW bit as that has been here a while.

@Zorua_Fox did you upgrade recently? What were you running before?

@MarkAHershberger My wiki has been consistently updated and uses Git for version control. You can check https://github.com/TopRealm for related information, including core configurations such as frontend and backend code, all within this organization. Hope this is helpful to you.

My wiki started with MediaWiki 1.39, went through version upgrades to 1.41 and 1.43, and is now stable at 1.43.x.

Thanks for the repo... I asked if you had upgraded because I thought you were running CommentStreams for a while, but I can see now that you installed it and then removed it on the same day. This is a good resource for troubleshooting.

I'm fairly confident that SMW + CommentStreams isn't a the problem here, but I'll do more research.

在T391074#10878158中,@MarkAHershberger写道:

Thanks for the repo... I asked if you had upgraded because I thought you were running CommentStreams for a while, but I can see now that you installed it and then removed it on the same day. This is a good resource for troubleshooting.

I'm fairly confident that SMW + CommentStreams isn't a problematic, but I'll do more research.

Yes... I once installed it and the rebuildLocalisationCache.php broke, so I instantly removed it. I can readded it at any time for current debugging if necessary, just reply this task to remind me this if it's helpful. I'd like to provide any details of this task.

Thanks for researching this. For BlueSpice we use CommentStreams + SMW 5 and didn't face any issues so far. I have seen the error message

A change to the wgLanguageCode was detected showing a discrepancy (de, en) and is preventing Semantic MediaWiki from modifying related namespace settings.

in the past already. As far as I can remember this can happen when either SMW or the message subsystem of MediaWiki is initialized too early. Sometimes this happens because some exception is thrown and MediaWiki tries to output a message in the content language.

In this particular case we can also see Extension:Gadgets in the call stack, which tries to create a list of gadgets and therefore accesses the wiki content.

@Zorua_Fox could you try removing Gadgets and installing CommentStreams temporarily to see if the problem recurs?

在T391074#10887643中,@MarkAHershberger写道:

@Zorua_Fox could you try removing Gadgets and installing CommentStreams temporarily to see if the problem recurs?

Debugging was performed according to your suggested approach, and the error stack has changed but the original issue hasn't disappeared—it's still the same language code duplication problem as before.

root@VM-20-13-debian:/www/wwwroot/MediaWiki# php maintenance/run.php rebuildLocalisationCache
[4ed0b1f0d8faac4ab81d1724] [no req]   SMW\Exception\SiteLanguageChangeException: A change to the `wgLanguageCode` was detected showing a discrepancy (zh, en) and is preventing Semantic MediaWiki from modifying related namespace settings.

LocalSettings.php should only contain one `wgLanguageCode` definition and the declaration should happen before `enableSemantics`.
Backtrace:
from /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/NamespaceManager.php(233)
#0 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/NamespaceManager.php(189): SMW\NamespaceManager->getLanguageCode()
#1 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/NamespaceManager.php(90): SMW\NamespaceManager::initCustomNamespace()
#2 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/MediaWiki/Hooks.php(183): SMW\NamespaceManager::initCanonicalNamespaces()
#3 /www/wwwroot/MediaWiki/includes/HookContainer/HookContainer.php(159): SMW\MediaWiki\Hooks::onCanonicalNamespaces()
#4 /www/wwwroot/MediaWiki/includes/HookContainer/HookRunner.php(1075): MediaWiki\HookContainer\HookContainer->run()
#5 /www/wwwroot/MediaWiki/includes/title/NamespaceInfo.php(385): MediaWiki\HookContainer\HookRunner->onCanonicalNamespaces()
#6 /www/wwwroot/MediaWiki/includes/title/NamespaceInfo.php(430): MediaWiki\Title\NamespaceInfo->getCanonicalNamespaces()
#7 /www/wwwroot/MediaWiki/includes/user/Options/DefaultOptionsLookup.php(111): MediaWiki\Title\NamespaceInfo->getValidNamespaces()
#8 /www/wwwroot/MediaWiki/includes/user/Options/DefaultOptionsLookup.php(126): MediaWiki\User\Options\DefaultOptionsLookup->getGenericDefaultOptions()
#9 /www/wwwroot/MediaWiki/includes/user/Options/UserOptionsManager.php(548): MediaWiki\User\Options\DefaultOptionsLookup->getDefaultOptions()
#10 /www/wwwroot/MediaWiki/includes/user/Options/UserOptionsManager.php(460): MediaWiki\User\Options\UserOptionsManager->loadOriginalOptions()
#11 /www/wwwroot/MediaWiki/includes/user/Options/UserOptionsManager.php(169): MediaWiki\User\Options\UserOptionsManager->loadUserOptions()
#12 /www/wwwroot/MediaWiki/includes/context/RequestContext.php(478): MediaWiki\User\Options\UserOptionsManager->getOption()
#13 /www/wwwroot/MediaWiki/includes/ServiceWiring.php(578): MediaWiki\Context\RequestContext->getLanguage()
#14 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(440): Wikimedia\Services\ServiceContainer::{closure}()
#15 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(406): Wikimedia\Services\ServiceContainer->createService()
#16 /www/wwwroot/MediaWiki/includes/MediaWikiServices.php(356): Wikimedia\Services\ServiceContainer->getService()
#17 /www/wwwroot/MediaWiki/includes/MediaWikiServices.php(914): MediaWiki\MediaWikiServices->getService()
#18 /www/wwwroot/MediaWiki/includes/ServiceWiring.php(568): MediaWiki\MediaWikiServices->getCommentParserFactory()
#19 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(440): Wikimedia\Services\ServiceContainer::{closure}()
#20 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(406): Wikimedia\Services\ServiceContainer->createService()
#21 /www/wwwroot/MediaWiki/includes/MediaWikiServices.php(356): Wikimedia\Services\ServiceContainer->getService()
#22 /www/wwwroot/MediaWiki/includes/MediaWikiServices.php(907): MediaWiki\MediaWikiServices->getService()
#23 /www/wwwroot/MediaWiki/includes/ServiceWiring.php(1211): MediaWiki\MediaWikiServices->getCommentFormatter()
#24 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(440): Wikimedia\Services\ServiceContainer::{closure}()
#25 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(406): Wikimedia\Services\ServiceContainer->createService()
#26 /www/wwwroot/MediaWiki/includes/MediaWikiServices.php(356): Wikimedia\Services\ServiceContainer->getService()
#27 /www/wwwroot/MediaWiki/includes/MediaWikiServices.php(1370): MediaWiki\MediaWikiServices->getService()
#28 /www/wwwroot/MediaWiki/includes/ServiceWiring.php(2744): MediaWiki\MediaWikiServices->getLogFormatterFactory()
#29 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(440): Wikimedia\Services\ServiceContainer::{closure}()
#30 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(406): Wikimedia\Services\ServiceContainer->createService()
#31 /www/wwwroot/MediaWiki/includes/MediaWikiServices.php(356): Wikimedia\Services\ServiceContainer->getService()
#32 /www/wwwroot/MediaWiki/includes/ServiceWiring.php(776): MediaWiki\MediaWikiServices->getService()
#33 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(440): Wikimedia\Services\ServiceContainer::{closure}()
#34 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(406): Wikimedia\Services\ServiceContainer->createService()
#35 /www/wwwroot/MediaWiki/includes/MediaWikiServices.php(356): Wikimedia\Services\ServiceContainer->getService()
#36 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(414): MediaWiki\MediaWikiServices->getService()
#37 /www/wwwroot/MediaWiki/vendor/wikimedia/object-factory/src/ObjectFactory.php(204): Wikimedia\Services\ServiceContainer->get()
#38 /www/wwwroot/MediaWiki/vendor/wikimedia/object-factory/src/ObjectFactory.php(149): Wikimedia\ObjectFactory\ObjectFactory::getObjectFromSpec()
#39 /www/wwwroot/mw-utils/YsArchives-Extensions/CommentStreams/includes/ServiceWiring.php(56): Wikimedia\ObjectFactory\ObjectFactory->createObject()
#40 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(440): Wikimedia\Services\ServiceContainer::MediaWiki\Extension\CommentStreams\{closure}()
#41 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(406): Wikimedia\Services\ServiceContainer->createService()
#42 /www/wwwroot/MediaWiki/includes/MediaWikiServices.php(356): Wikimedia\Services\ServiceContainer->getService()
#43 /www/wwwroot/MediaWiki/vendor/wikimedia/services/src/ServiceContainer.php(414): MediaWiki\MediaWikiServices->getService()
#44 /www/wwwroot/MediaWiki/vendor/wikimedia/object-factory/src/ObjectFactory.php(204): Wikimedia\Services\ServiceContainer->get()
#45 /www/wwwroot/MediaWiki/vendor/wikimedia/object-factory/src/ObjectFactory.php(149): Wikimedia\ObjectFactory\ObjectFactory::getObjectFromSpec()
#46 /www/wwwroot/MediaWiki/includes/HookContainer/HookContainer.php(256): Wikimedia\ObjectFactory\ObjectFactory->createObject()
#47 /www/wwwroot/MediaWiki/includes/HookContainer/HookContainer.php(348): MediaWiki\HookContainer\HookContainer->makeExtensionHandlerCallback()
#48 /www/wwwroot/MediaWiki/includes/HookContainer/HookContainer.php(524): MediaWiki\HookContainer\HookContainer->normalizeHandler()
#49 /www/wwwroot/MediaWiki/includes/HookContainer/HookContainer.php(146): MediaWiki\HookContainer\HookContainer->getHandlers()
#50 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/MediaWiki/HookDispatcher.php(113): MediaWiki\HookContainer\HookContainer->run()
#51 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/Settings.php(226): SMW\MediaWiki\HookDispatcher->onSettingsBeforeInitializationComplete()
#52 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/Services/SharedServicesContainer.php(159): SMW\Settings->loadFromGlobals()
#53 [internal function]: SMW\Services\SharedServicesContainer::SMW\Services\{closure}()
#54 /www/wwwroot/MediaWiki/vendor/onoi/callback-container/src/CallbackContainerBuilder.php(260): call_user_func_array()
#55 /www/wwwroot/MediaWiki/vendor/onoi/callback-container/src/CallbackContainerBuilder.php(288): Onoi\CallbackContainer\CallbackContainerBuilder->getReturnValueFromCallbackHandlerFor()
#56 /www/wwwroot/MediaWiki/vendor/onoi/callback-container/src/CallbackContainerBuilder.php(195): Onoi\CallbackContainer\CallbackContainerBuilder->getReturnValueFromSingletonFor()
#57 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/Services/ServicesFactory.php(265): Onoi\CallbackContainer\CallbackContainerBuilder->singleton()
#58 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/MediaWiki/MwCollaboratorFactory.php(149): SMW\Services\ServicesFactory->getSettings()
#59 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/Setup.php(210): SMW\MediaWiki\MwCollaboratorFactory->newConnectionProvider()
#60 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/src/Setup.php(121): SMW\Setup->initConnectionProviders()
#61 /www/wwwroot/mw-utils/YsArchives-Extensions/SemanticMediaWiki/includes/SemanticMediaWiki.php(75): SMW\Setup->init()
#62 /www/wwwroot/MediaWiki/includes/Setup.php(576): SemanticMediaWiki::onExtensionFunction()
#63 /www/wwwroot/MediaWiki/maintenance/run.php(49): require_once(string)
#64 {main}

I added a simple line of code in different locations within LocalSettings.php.

error_log("wgLanguageCode before/after xxx load: " . $wgLanguageCode);

This line of code outputs the same result in the command line, proving that LocalSettings.php only exported a single language code until the very end. However, SMW still reports an error indicating duplicate language codes. Not sure if this information will be helpful for debugging.

9246c5af9e0f09259404c55518def652.png (267×1 px, 55 KB)

the second "before SMW load" should be "after SMW load".

I'm able to reproduce a similar traceback in regular page loads with just SMW+CommentStreams on 1.43.

By adding $wgDebugLogGroup["session"] = "$logDir/session.log"; to the local settings, a backtrace including CommentStreams/includes/ServiceWiring.php(56): Wikimedia\ObjectFactory\ObjectFactory->createObject() is logged in session.log. Without CS, no backtrace is logged.

I was not able to reproduce the rebuildLocalisationCache problem even after I copied your $wgLocalisationCacheConf.

@Zorua_Fox try the version tagged 8.0.3. It worked for me without giving those errors.

@Osnard It looks like d.savuljesku's work to make CS "store agnostic" is where the problem was introduced.

I tried reverting that, but it was too complicated and there are too many intervening changes for me to quickly understand the right thing to do.

在T391074#10893279中,@MarkAHershberger写道:

@Zorua_Fox try the version tagged 8.0.3. It worked for me without giving those errors.

@Osnard It looks like Ifd1160f is where the problem was introduced.

I tried reverting that, but it was too complicated and there are too many intervening changes for me to quickly understand the right thing to do.

8.0.3 (0945e7e) also works for me, I guess the issue might be with the changes after this tag.

@MarkAHershberger Additionally, I noticed a potential timezone display error in CommentStreams. When users set UTC+8 (Asia/Shanghai) as the default timezone, CommentStream actually displays timestamps in UTC-8, as shown in the screenshot:

image.png (1×1 px, 1 MB)

In this screenshot my PC and wiki used UTC+8 as timezone, but "2025年06月08日 20:43" was a UTC-8 time
Even stranger: this isn't UTC-8 time at all, but rather UTC+8 with an additional 8 hours added. I'm quite certain this is a bug, at least in this version.
I'm not sure if this issue has been fixed in the commits after 0945e7e.

@MarkAHershberger Additionally, I noticed a potential timezone display error in CommentStreams.

Please open a new task for this bug so that we don't forget to check it. If it has been fixed, we'll close it.

It looks like d.savuljesku's work to make CS "store agnostic" is where the problem was introduced.

Thanks for reporting. I will have a look.

Change #1159325 had a related patch set uploaded (by ItSpiderman; author: ItSpiderman):

[mediawiki/extensions/CommentStreams@REL1_43] Lazy load DeletePageFactory to avoid issues on rebuildLocalizationCache

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

@Dsavuljesku investigated this issue and found the injection of the DeletePageFactory to be the root cause. He has provided a fix at https://gerrit.wikimedia.org/r/c/mediawiki/extensions/CommentStreams/+/1159325

Maybe you can test it quickly?

In my test, the patch works. It would still be good to hear from @Zorua_Fox, though, to confirm.

在T391074#10920960中,@MarkAHershberger写道:

In my test, the patch works. It would still be good to hear from @Zorua_Fox, though, to confirm.

@MarkAHershberger @Osnard This patch works well on my MediaWiki test site (almost identical to the production environment). However, since the production environment's git uses multiple mirrored repositories to ensure access to the original repository, I cannot directly check out the patch on Gerrit from the production environment. Full production testing still requires merging this patch into the REL1_43 or master branch.

Change #1159325 merged by jenkins-bot:

[mediawiki/extensions/CommentStreams@REL1_43] Lazy load DeletePageFactory to avoid issues on rebuildLocalizationCache

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

Change #1159747 had a related patch set uploaded (by Robert Vogel; author: ItSpiderman):

[mediawiki/extensions/CommentStreams@master] Lazy load DeletePageFactory to avoid issues on rebuildLocalizationCache

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

Thanks for the feedback. I have now merged the change.

Change #1159747 merged by Robert Vogel:

[mediawiki/extensions/CommentStreams@master] Lazy load DeletePageFactory to avoid issues on rebuildLocalizationCache

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

Zorua_Fox claimed this task.