Page MenuHomePhabricator

Wikimedia\Assert\PostconditionException: Postcondition failed: user_name variable must resolve to a UserIdentity
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error
  • service.version: 1.45.0-wmf.15
  • timestamp: 2025-08-19T13:28:58.876Z
  • labels.phpversion: 8.1.33
  • trace.id: e091525c-f190-4457-aa2f-3aa4d48df178
  • Find trace.id in Logstash
labels.normalized_message
[{reqId}] {exception_url}   Wikimedia\Assert\PostconditionException: Postcondition failed: user_name variable must resolve to a UserIdentity
FrameLocationCall
from/srv/mediawiki/php-1.45.0-wmf.15/vendor/wikimedia/assert/src/Assert.php(203)
#0/srv/mediawiki/php-1.45.0-wmf.15/extensions/ORES/includes/Hooks/AbuseFilterHooks.php(147)Wikimedia\Assert\Assert::postcondition(bool, string)
#1/srv/mediawiki/php-1.45.0-wmf.15/includes/HookContainer/HookContainer.php(155)ORES\Hooks\AbuseFilterHooks->onAbuseFilter_computeVariable(string, MediaWiki\Extension\AbuseFilter\Variables\VariableHolder, array, null)
#2/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/Hooks/AbuseFilterHookRunner.php(78)MediaWiki\HookContainer\HookContainer->run(string, array)
#3/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/Variables/LazyVariableComputer.php(484)MediaWiki\Extension\AbuseFilter\Hooks\AbuseFilterHookRunner->onAbuseFilter_computeVariable(string, MediaWiki\Extension\AbuseFilter\Variables\VariableHolder, array, null)
#4/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/Variables/VariablesManager.php(73)MediaWiki\Extension\AbuseFilter\Variables\LazyVariableComputer->compute(MediaWiki\Extension\AbuseFilter\Variables\LazyLoadedVariable, MediaWiki\Extension\AbuseFilter\Variables\VariableHolder, Closure)
#5/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(831)MediaWiki\Extension\AbuseFilter\Variables\VariablesManager->getVar(MediaWiki\Extension\AbuseFilter\Variables\VariableHolder, string, int)
#6/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(467)MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->getVarValue(string)
#7/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(588)MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#8/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(435)MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalNode(MediaWiki\Extension\AbuseFilter\Parser\AFPTreeNode)
#9/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(383)MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->evalTree(MediaWiki\Extension\AbuseFilter\Parser\AFPSyntaxTree)
#10/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/Parser/FilterEvaluator.php(349)MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->parse(string)
#11/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/FilterRunner.php(349)MediaWiki\Extension\AbuseFilter\Parser\FilterEvaluator->checkConditions(string, string)
#12/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/FilterRunner.php(310)MediaWiki\Extension\AbuseFilter\FilterRunner->checkFilter(MediaWiki\Extension\AbuseFilter\Filter\ExistingFilter)
#13/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/FilterRunner.php(288)MediaWiki\Extension\AbuseFilter\FilterRunner->checkAllFiltersInternal()
#14/srv/mediawiki/php-1.45.0-wmf.15/extensions/AbuseFilter/includes/Hooks/Handlers/FilteredActionsHandler.php(342)MediaWiki\Extension\AbuseFilter\FilterRunner->runForStash()
#15/srv/mediawiki/php-1.45.0-wmf.15/includes/deferred/MWCallableUpdate.php(52)MediaWiki\Extension\AbuseFilter\Hooks\Handlers\FilteredActionsHandler->MediaWiki\Extension\AbuseFilter\Hooks\Handlers\{closure}(string)
#16/srv/mediawiki/php-1.45.0-wmf.15/includes/deferred/DeferredUpdates.php(459)MediaWiki\Deferred\MWCallableUpdate->doUpdate()
#17/srv/mediawiki/php-1.45.0-wmf.15/includes/deferred/DeferredUpdates.php(201)MediaWiki\Deferred\DeferredUpdates::attemptUpdate(MediaWiki\Deferred\MWCallableUpdate)
#18/srv/mediawiki/php-1.45.0-wmf.15/includes/deferred/DeferredUpdates.php(288)MediaWiki\Deferred\DeferredUpdates::run(MediaWiki\Deferred\MWCallableUpdate)
#19/srv/mediawiki/php-1.45.0-wmf.15/includes/deferred/DeferredUpdatesScope.php(243)MediaWiki\Deferred\DeferredUpdates::MediaWiki\Deferred\{closure}(MediaWiki\Deferred\MWCallableUpdate, int)
#20/srv/mediawiki/php-1.45.0-wmf.15/includes/deferred/DeferredUpdatesScope.php(172)MediaWiki\Deferred\DeferredUpdatesScope->processStageQueue(int, int, Closure)
#21/srv/mediawiki/php-1.45.0-wmf.15/includes/deferred/DeferredUpdates.php(307)MediaWiki\Deferred\DeferredUpdatesScope->processUpdates(int, Closure)
#22/srv/mediawiki/php-1.45.0-wmf.15/includes/MediaWikiEntryPoint.php(302)MediaWiki\Deferred\DeferredUpdates::doUpdates(int)
#23/srv/mediawiki/php-1.45.0-wmf.15/includes/MediaWikiEntryPoint.php(187)MediaWiki\MediaWikiEntryPoint->commitMainTransaction()
#24/srv/mediawiki/php-1.45.0-wmf.15/includes/MediaWikiEntryPoint.php(170)MediaWiki\MediaWikiEntryPoint->doPrepareForOutput()
#25/srv/mediawiki/php-1.45.0-wmf.15/includes/MediaWiki.php(87)MediaWiki\MediaWikiEntryPoint->prepareForOutput()
#26/srv/mediawiki/php-1.45.0-wmf.15/includes/api/ApiMain.php(983)MediaWiki::preOutputCommit(MediaWiki\Context\DerivativeContext)
#27/srv/mediawiki/php-1.45.0-wmf.15/includes/api/ApiMain.php(926)MediaWiki\Api\ApiMain->executeActionWithErrorHandling()
#28/srv/mediawiki/php-1.45.0-wmf.15/includes/api/ApiEntryPoint.php(152)MediaWiki\Api\ApiMain->execute()
#29/srv/mediawiki/php-1.45.0-wmf.15/includes/MediaWikiEntryPoint.php(198)MediaWiki\Api\ApiEntryPoint->execute()
#30/srv/mediawiki/php-1.45.0-wmf.15/api.php(44)MediaWiki\MediaWikiEntryPoint->run()
#31/srv/mediawiki/w/api.php(3)require(string)
#32{main}
Notes

Started after deployment of 1.45.0-wmf.15 to group0.

There was a recent code change in extensions/ORES/includes/Hooks/AbuseFilterHooks.php: https://gerrit.wikimedia.org/r/c/mediawiki/extensions/ORES/+/1179027

The fact this is related to AbuseFilter scares me a little bit so I'm gonna mark this as an UBN out of an overabundance of caution. Hopefully someone can properly triage the impact

Event Timeline

jnuche triaged this task as Unbreak Now! priority.Aug 19 2025, 2:55 PM
jnuche updated the task description. (Show Details)
jnuche added subscribers: kostajh, mszabo, STran.

Consistently reproducible when editing a page without being logged in: the edit stash API request in the background attempts to evaluate abuse filters to try and reuse the cached result for the actual save, but the user account is an IP user so UserIdentityLookup won't find anything. It's probably not safe to try to cache the result here because the user_name variable will differ between the stash execution (where it is set to an IP user) and the actual edit attempt (where it will be a temporary user).

Change #1180163 had a related patch set uploaded (by Máté Szabó; author: Máté Szabó):

[mediawiki/extensions/ORES@master] AbuseFilterHooks: Handle IP user performers without actor records

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

Change #1180167 had a related patch set uploaded (by Kosta Harlan; author: Máté Szabó):

[mediawiki/extensions/ORES@wmf/1.45.0-wmf.15] AbuseFilterHooks: Handle IP user performers without actor records

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

Change #1180172 had a related patch set uploaded (by Máté Szabó; author: Máté Szabó):

[mediawiki/extensions/AbuseFilter@master] Don't stash filter results for IP users when temp accounts are enabled

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

Change #1180163 merged by jenkins-bot:

[mediawiki/extensions/ORES@master] AbuseFilterHooks: Handle IP user performers without actor records

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

Change #1180167 merged by jenkins-bot:

[mediawiki/extensions/ORES@wmf/1.45.0-wmf.15] AbuseFilterHooks: Handle IP user performers without actor records

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

Mentioned in SAL (#wikimedia-operations) [2025-08-19T16:30:41Z] <mszabo@deploy1003> Started scap sync-world: Backport for [[gerrit:1180167|AbuseFilterHooks: Handle IP user performers without actor records (T402298)]]

Mentioned in SAL (#wikimedia-operations) [2025-08-19T16:32:38Z] <mszabo@deploy1003> mszabo, kharlan: Backport for [[gerrit:1180167|AbuseFilterHooks: Handle IP user performers without actor records (T402298)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Change #1180177 had a related patch set uploaded (by Máté Szabó; author: Máté Szabó):

[mediawiki/extensions/ORES@master] AbuseFilterHooks: Gracefully handle performers without actor records

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

Mentioned in SAL (#wikimedia-operations) [2025-08-19T17:05:15Z] <mszabo@deploy1003> Started scap sync-world: Backport for [[gerrit:1180167|AbuseFilterHooks: Handle IP user performers without actor records (T402298)]]

Mentioned in SAL (#wikimedia-operations) [2025-08-19T17:07:11Z] <mszabo@deploy1003> kharlan, mszabo: Backport for [[gerrit:1180167|AbuseFilterHooks: Handle IP user performers without actor records (T402298)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2025-08-19T17:12:53Z] <mszabo@deploy1003> Finished scap sync-world: Backport for [[gerrit:1180167|AbuseFilterHooks: Handle IP user performers without actor records (T402298)]] (duration: 07m 38s)

Change #1180177 merged by jenkins-bot:

[mediawiki/extensions/ORES@master] AbuseFilterHooks: Gracefully handle performers without actor records

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

Change #1180198 had a related patch set uploaded (by Máté Szabó; author: Máté Szabó):

[mediawiki/extensions/ORES@wmf/1.45.0-wmf.15] AbuseFilterHooks: Gracefully handle performers without actor records

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

Change #1180198 merged by jenkins-bot:

[mediawiki/extensions/ORES@wmf/1.45.0-wmf.15] AbuseFilterHooks: Gracefully handle performers without actor records

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

Mentioned in SAL (#wikimedia-operations) [2025-08-19T19:33:25Z] <mszabo@deploy1003> Started scap sync-world: Backport for [[gerrit:1180198|AbuseFilterHooks: Gracefully handle performers without actor records (T402298)]]

Mentioned in SAL (#wikimedia-operations) [2025-08-19T19:35:21Z] <mszabo@deploy1003> mszabo: Backport for [[gerrit:1180198|AbuseFilterHooks: Gracefully handle performers without actor records (T402298)]] synced to the testservers (see https://wikitech.wikimedia.org/wiki/Mwdebug). Changes can now be verified there.

Mentioned in SAL (#wikimedia-operations) [2025-08-19T19:45:02Z] <mszabo@deploy1003> Finished scap sync-world: Backport for [[gerrit:1180198|AbuseFilterHooks: Gracefully handle performers without actor records (T402298)]] (duration: 11m 36s)

Change #1180172 merged by jenkins-bot:

[mediawiki/extensions/AbuseFilter@master] Don't stash filter results for IP users when temp accounts are enabled

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