MediaWiki 1.41/wmf.28/Changelog

Core changes

 * - Branch commit for wmf/1.41.0-wmf.28 by trainbranchbot
 * - phpunit: Determine what extensions to load in unit tests via config by Daimona Eaytoy
 * - debug: Reference PSR LoggerInterface instead of Monolog where possible by Timo Tijhof
 * - MediaWiki.php: Convert executeTiming metric to new Stats library by Cole White
 * - tests: Use $this->getDb instead of wfGetDB in integration tests by Amir Sarabadani
 * - mw.widgets.DateInputWidget: Fix selecting when typing incomplete date by Bartosz Dziewoński
 * - specials: Only set valid local user as the relevant user by Func
 * - OutputPage: Client preferences should work for Temp users by Jon Robson
 * - Introduce LoggingSelectQueryBuilder by Amir Sarabadani
 * - objectcache: Deprecate unused `SqlBagOStuff::expireAll` by Derick Alangi
 * - Remove User::CHECK_USER_RIGHTS and User::IGNORE_USER_RIGHTS by Tim Starling
 * - Check EmailConfirmToEdit in checkActionPermissions by daniel
 * - MediaWiki: Remove unused param from `preOutputCommit` by Derick Alangi
 * - page: Clean up PageProps file header and improve docs by Timo Tijhof
 * - mediawiki.page.watch.ajax: Simplify 'data-mw-expiry' attr logic by Timo Tijhof
 * - PHPVersionCheck: Remove unused foreach key by Derick Alangi
 * - SpecialContributions: Show creation date in user timezone by Ammarpad
 * - HTMLSizeFilterField: Keep min/max selection for empty input by Func
 * - CREDITS: Add .mailmap entry for Dringsim (沈澄心) by Func
 * - skins: Add a data-mw-expiry attribute to watch link by Umherirrender
 * - Add base taint-check annotations to SelectQueryBuilder by Daimona Eaytoy
 * - Add another batch of taint-check annotations by Daimona Eaytoy
 * - WikiRevision: Preserve lowercase of external actors by Func
 * - Move lang validation from AllMessagesTablePager to SpecialAllMessages by Fomafix
 * - Add taint-check annotations to database methods by Daimona Eaytoy
 * - LogEventsList: Allow filtering logs by imported actors by Func
 * - Add second batch of taint-check annotations by Daimona Eaytoy
 * - Add first batch of taint-check annotations by Daimona Eaytoy
 * - ImportReporter: Make callback functions public by Func
 * - Add tests for taint-check by Daimona Eaytoy
 * - FileRepo: Reduce duplicated calls to resolveToStoragePathIfVirtual by Func
 * - ApiQueryAllPages: Group similar params together by Func
 * - phan: Re-enable class_alias support by Daimona Eaytoy
 * - Update references to config-vars.php by DannyS712
 * - Use namespaced specials in tests by Fomafix
 * - build: Update IPUtils to 4.0.1 (and IPSet from 3 to 4) by Timo Tijhof
 * - RELEASE-NOTES-1.41: Consolidate PSR-4 deprecation efforts into one list by James D. Forrester
 * - tests: Migrate to SelectQueryBuilder in DbTestPreviewer by Amir Sarabadani
 * - CREDITS: Update ahead of REL1_41 branching by James D. Forrester
 * - Drop User and PermissionManager's group permission methods, deprecated since 1.34/1.36 by James D. Forrester
 * - Prevent empty namespace list in Special:Random by Lucas Werkmeister
 * - Output: Use constant for unknown content type by Derick Alangi
 * - Output: Remove unused constants from StreamFile by Derick Alangi
 * - Document version when Block::toArray was added by Thalia
 * - installer: Add database updater for 2008/2011 redirect schema changes by Bartosz Dziewoński
 * - phpcs: drop exclusions of preprocessorFuzzTest.php script by DannyS712
 * - Use ::class for class name resolution by Umherirrender
 * - Deprecate explicit arguments to OutputPage::prepareErrorPage  by C. Scott Ananian
 * - ResourceLoader: Inline single use mw.loader.store.toJSON function by Timo Tijhof
 * - ResourceLoader: Avoid store serialization and overwrite on each view by Timo Tijhof
 * - rdbms: Fix "Undefined index: DEFAULT" in LBFactoryMulti::reconfigure by Timo Tijhof
 * - SpecialPage::getDescription should return a Message  by C. Scott Ananian
 * - Ensure that installer i18n is loaded by update.php by Brian Wolff
 * - Deprecate returning a string from Action::getPageTitle  by C. Scott Ananian
 * - LoginSignupSpecialPage::showSuccessPage: only allow Message as 1st param   by C. Scott Ananian
 * - Drop the PersonalUrls hook, deprecated in 1.39 by James D. Forrester
 * - tests: Migrate more cases to SQB by Amir Sarabadani
 * - wdio-mediawiki: Release 2.3.0   by WMDE-Fisch
 * - Drop BaseTemplate::getTrail and printTrail, deprecated since 1.39 by James D. Forrester
 * - RELEASE-NOTES: Remove mention of MaintenanceRunner::shutdown by Derick Alangi
 * - maintenance: Migrate another batch to SelectQueryBuilder by Amir Sarabadani
 * - SpecialUndelete: Do not clone RequestContext by Ammarpad
 * - Deprecate SpecialRandomPage::__construct without injected services by Fomafix
 * - Namespace Config-related classes under \MediaWiki\Config by James D. Forrester
 * - Namespace Sanitizer under \MediaWiki\Parser by James D. Forrester
 * - Remove double space from a message by Amir E. Aharoni
 * - Remove deprecated User properties mOptions, mBlock, mBlockedby and mHideName by Tim Starling
 * - Add Block::toArray by Tim Starling
 * - ForeignResourcesManager: Also support .zip releases by James D. Forrester
 * - RevisionArchiveRecord: Also check for permission to view deleted pages by Bartosz Dziewoński
 * - updateSpecialPages.php: Avoid implicit float conversion on modulo by Umherirrender
 * - Add since tag to UserOptionsManager::MAX_BYTES_OPTION_VALUE by Reedy
 * - Update extension.schema.v1 per extension.schema.v2 by Reedy
 * - Fix LanguageIntegrationTest::testCldr by Lucas Werkmeister
 * - Get correct main page in API call examples by Ammar Abdulhamid
 * - importDump: Unconditionally call $importer->setUsernamePrefix by Reedy
 * - jobs: Migrate to use SQB in HTMLCacheUpdateJob by Amir Sarabadani
 * - Migrate another major batch to SelectQueryBuilder by Amir Sarabadani
 * - Namespace remaining User-related classes under \MediaWiki\User by James D. Forrester
 * - Edit Recovery: save data on beforeunload and visibilitychange by Sam Wilson
 * - PermissionManager: introduce getApplicableBlock by daniel
 * - mediawiki.util: Use native string repetition implementation by Ammarpad
 * - ResourceLoader: Set virtualFilePath for startup.js (take 2) by Timo Tijhof
 * - Introduce ActionFactory::getActionInfo by daniel
 * - Blocks cleanup by Tim Starling
 * - UserOptionsManager: Fix potential access to global context by Bartosz Dziewoński
 * - parser: Delay Parser creation in ParsoidSiteConfig/ParsoidDataAccess by Umherirrender
 * - specials: Move row formatting from Special:MergeHistory to pager by Umherirrender
 * - specials: Move row formatting from Special:ProtectedTitles to pager by Umherirrender
 * - specials: Move row formatting from Special:NewPages to pager by Umherirrender
 * - Namespace User under \MediaWiki\User by James D. Forrester
 * - Revert "ResourceLoader: Set 'virtualFilePath' for startup.js" by Jforrester
 * - cache: Add support for pagelinks read new in BacklinkCache by Amir Sarabadani
 * - specials: Add support for pagelinks read new in SpecialMostLinked by Amir Sarabadani
 * - shellbox: Use Telemetry class instead of WebRequest::getRequestId by Piotr Miazga
 * - Namespace remaining Title-related classes under \MediaWiki\Title by James D. Forrester
 * - Namespace TitleParser under \MediaWiki\Title by James D. Forrester
 * - Namespace TitleFormatter under \MediaWiki\Title by James D. Forrester
 * - Namespace NamespaceInfo under \MediaWiki\Title by James D. Forrester
 * - tests: Migrate more easy cases to SQB by Amir Sarabadani
 * - ChangesListSpecialPage: Omit watchlist expiry icon in legend when transcluded by Bartosz Dziewoński
 * - mediawiki.language: Use ES6 String.repeat method by Ammarpad
 * - mediawiki.language: Move related modules and virtual files to separate dir  by Timo Tijhof
 * - Use OutputPage::setPageTitleMsg instead of ::setPageTitle  by C. Scott Ananian
 * - Pass Message to OutputPage::setPageTitleMsg directly  by C. Scott Ananian
 * - OutputPage: introduce ::setPageTitleMsg to fix escaping issue  by C. Scott Ananian
 * - mediawiki.page.watch.ajax: Move into separate dir to improve source map  by Timo Tijhof
 * - Parser: use PHPDoc comments on properties, typed private properties by tacsipacsi
 * - WikiPage: Remove redundant private field by Bartosz Dziewoński
 * - WikiPage: Make isRedirect and getRedirectTarget consistent again by Bartosz Dziewoński
 * - WikiPage: Stop trying to insert `redirect` rows on reads by Bartosz Dziewoński
 * - Edit Recovery: reset textarea caret position to top by Sam Wilson
 * - Language: Avoid string cast in getFormattedNsText by Timo Tijhof
 * - upload: Fix doc on UploadVerifyUploadHook by Umherirrender
 * - ParserTestRunner: fix handling of multiple property/extension options by C. Scott Ananian
 * - UndeletePage: Use new RevisionRecord after undeleting it by Bartosz Dziewoński
 * - Update 'validateParserCacheSerializationTestData' maintenance script by C. Scott Ananian
 * - Don't set AuthenticationRequest::$username on login by Tim Starling
 * - Follow RFC 3986 on what is path in mailto URLs by Petr Pchelko
 * - filebackend: Log cache set failure in FileBackendStore by Umherirrender
 * - jsduck.json: Remove HTMLIFrameElement and XMLDocument from external by Fomafix
 * - jsduck.json: Remove not existing entries and sort alphabetical by Fomafix
 * - Add title cache for Title::newMainPage by TehKittyCat
 * - Add new maintenance script cleanupPageLang.php by Fomafix
 * - specials: Avoid selecting interwiki redirects by Umherirrender
 * - Languages: Add PLURAL support for Kildin Sámi by Jon Harald Søby
 * - Title::getPageLanguage: Fallback to content handler language by Fomafix

Vendor

 * - Bump parsoid to 0.18.0-a25    by Arlo Breault
 * - build: Update IPUtils to 4.0.1 (and IPSet from 3 to 4) by Timo Tijhof

3D

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

AbuseFilter

 * - Revert "Remove unused SecurityCheck-ReDoS suppression" by Daimona Eaytoy
 * - Use OutputPage::setPageTitleMsg instead of ::setPageTitle by C. Scott Ananian
 * - Remove unused SecurityCheck-ReDoS suppression by C. Scott Ananian

AdvancedSearch

 * - [build] Bump wdio-selenium to v2.3.0 by WMDE-Fisch
 * - build: Use conf.MessageDirs for banana path config by James D. Forrester
 * - Dramatically simplify boolean state management in ExpandablePane by thiemowmde

AntiSpoof

 * - Use HookHandlers for core hooks by Umherirrender

ArticleCreationWorkflow

 * - Use HookHandlers for core hooks by Umherirrender
 * - Fix failing WorkflowTest by Daimona Eaytoy
 * - .gitreview: Swap to track=1 by Reedy

ArticlePlaceholder

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

Babel

 * - Replace use of ParserOutput::getCategories, deprecated in 1.38 by C. Scott Ananian

BounceHandler

 * - Use HookHandlers for core hooks by Umherirrender

Campaigns

 * - Use HookHandlers for core hook by Umherirrender

CampaignEvents

 * - build: Update mediawiki-codesniffer to 42.0.0 by Daimona Eaytoy
 * - Allow participants to switch visibility if the event has ended by Daimona Eaytoy
 * - Update copy of P&E Dashboard help text by Daimona Eaytoy

CategoryTree

 * - Replace deprecated wfGetDB( DB_REPLICA ) by Fomafix

CentralAuth

 * - Don't check attached status during autocreateaccount by Matěj Suchánek
 * - Suppress phan taint errors in CentralAuth by Derick Alangi
 * - Revert "Drop reportedly unneeded suppressions" by Daimona Eaytoy
 * - CentralAuthHooks: Use Block::toArray by Thalia
 * - Drop reportedly unneeded suppressions by Matěj Suchánek
 * - Let the builder know about the new variables by Matěj Suchánek
 * - Provide abuse filter variables during (auto)createaccount by Matěj Suchánek

CentralNotice

 * - Move archived campaigns to a new subaction of Special:CentralNotice by pcoombe
 * - Make text translatable in the campaign editor by tacsipacsi
 * - IP Masking: treat temporary users as anonymous by Elliott Eggleston
 * - build: Update MediaWiki requirement to 1.41 by James D. Forrester
 * - Add BannerRandom's Bengali translation by MdsShakil

CheckUser

 * - clienthints: Implement display on Special:CheckUser 'Get users' by Dreamy Jazz
 * - Document SpecialCheckUserLog $opts property as an array by Dreamy Jazz
 * - Implement read new support for CheckUserGetUsersPager by Dreamy Jazz
 * - clienthints: Display data in Special:CheckUser 'get edits' by Dreamy Jazz
 * - clienthints: Add UserAgentClientHintsFormatter by Dreamy Jazz
 * - clienthints: Add UserAgentClientHintsLookup service by Dreamy Jazz
 * - Use ::class for class name resolution by Umherirrender
 * - Store event in cu_private_event when related log entry cannot be found by Piotr Miazga
 * - build: Update linters by Ed Sanders
 * - SpecialPage::getDescription should return a Message by C. Scott Ananian

ChessBrowser

 * - Remove unused variable from ChessBrowserHooks by Umherirrender
 * - Use HookHandlers for core hooks by Umherirrender

CirrusSearch

 * - [build] Bump wdio-mediawiki to v2.3.0 by WMDE-Fisch
 * - selenium: await browser.saveScreenshot by Antoine Musso
 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

Cite

 * - [build] Bump wdio-mediawiki to v2.3.0 by WMDE-Fisch

Citoid

 * - Use HookHandlers for core hooks by Umherirrender

CodeEditor

 * - Add change handler for Edit Recovery by Sam Wilson

CodeMirror

 * - [build] Bump wdio-mediawiki to v2.3.0 by WMDE-Fisch
 * - resources: Manage upstream CodeMirror using ManageForeignResources by James D. Forrester
 * - Update embedded CodeMirror library to 5.65.15 by David Lynch

Collection

 * - Use HookHandlers for core hooks by Umherirrender
 * - Use pass-by-ref on OutputPageCheckLastModified hook by Umherirrender
 * - Passing arguments to OutputPage::prepareErrorPage has been deprecated by C. Scott Ananian

ConfirmEdit

 * - build: Simplify banana config with require and for-of by Timo Tijhof
 * - build: Switch eslint to ES6 mode, and make pass by James D. Forrester
 * - build: Update all linters to latest as of September 2023 by James D. Forrester
 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

ContentTranslation

 * - SX unified dashboard: Enable published translation editing on desktop by NikG
 * - SX unified dashboard: Open target page on published translation click by NikG
 * - CX: Add "target_url" to published translation DTO by NikG
 * - CX: Add "sourcesection" URL param if needed when continuing a draft by NikG
 * - SX Help panel: Add spacing after list item icon by NikG
 * - SX: Do not navigate to "Pick a sentence" step when redirect to CX by NikG
 * - CX: Adjust "Pick a section" step to redirect to platform-specific editor by NikG
 * - SX: Update vue and vue-router versions by NikG
 * - CX: Update revision tag according to Manual:Tags by Wangombe

DiscussionTools

 * - Fix visibility of preview of new topic on mobile by Ed Sanders
 * - HookUtils: Fetch all needed props in one query by Bartosz Dziewoński
 * - Action::getPageTitle should return a Message by Bartosz Dziewoński
 * - SpecialPage::getDescription should return a Message by Bartosz Dziewoński

DismissableSiteNotice

 * - Use HookHandlers for core hook by Umherirrender

DonationInterface

 * - Add unit test for 'DLocal: Avoid duplicate order IDs' fix by jgleeson
 * - Passing arguments to OutputPage::prepareErrorPage has been deprecated by C. Scott Ananian
 * - Break up payments_form and form_amount in c_t messages by Elliott Eggleston
 * - build: Update MediaWiki requirement to 1.39 by James D. Forrester
 * - Delete mercadopago from dlocaly supported submethod by wfan
 * - DLocal: Avoid duplicate order IDs by Elliott Eggleston

Echo

 * - [build] Bump wdio-mediawiki to v2.3.0 by WMDE-Fisch
 * - Call hook handler for own hooks directly and not via hook system by Umherirrender
 * - ForeignWikiRequest: Ensure fetching CSRF tokens uses unique CentralAuth tokens by Bartosz Dziewoński
 * - ForeignWikiRequest: Specify formatversion, errorformat by Bartosz Dziewoński
 * - Use OutputPage::setPageTitleMsg instead of ::setPageTitle by C. Scott Ananian

ElectronPdfService

 * - [build] Bump wdio-mediawiki to v2.3.0 by WMDE-Fisch
 * - Get Config from ContextSource in hook handler by Umherirrender
 * - Use HookHandlers for core hooks by Umherirrender

EntitySchema

 * - Passing arguments to OutputPage::prepareErrorPage has been deprecated by C. Scott Ananian
 * - Use HookHandlers for core hook by Umherirrender

EventLogging

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

EventStreamConfig

 * - API: Increase streams param values limit to 250 by Sam Smith

ExtensionDistributor

 * - Use HookHandlers for core hook by Umherirrender

ExternalGuidance

 * - Use HookHandlers for core hooks by Umherirrender

FeaturedFeeds

 * - Use HookHandlers for core hooks by Umherirrender

FileImporter

 * - Use ParserOutput::getCategoryNames instead of ::getCategories by C. Scott Ananian
 * - [build] Bump wdio-mediawiki to v2.3.0 by WMDE-Fisch
 * - Mock RestrictionStore in all tests by thiemowmde
 * - SpecialPage::getDescription should return a Message by C. Scott Ananian

FlaggedRevs

 * - Combine HookHandlers in same class into one handler by Umherirrender
 * - Replace use of deprecated ParserOutput::getCategories method by C. Scott Ananian
 * - Move Media namespace special case back to inReviewNamespace by thiemowmde

Flow

 * - Use ::class for class name resolution by Umherirrender
 * - build: Adjust phan suppression by Umherirrender

FundraiserLandingPage

 * - Added Fundraiseup code to DonateWiki Head. by Damilare Adedoyin

Gadgets

 * - Add support for content models in definitions  by Siddharth VP
 * - Add support for namespaces in definitions  by brandonxlf
 * - tests: Enforce parity between Gadget::serializeDefinition and toArray by Timo Tijhof

GeoCrumbs

 * - Use HookHandlers for core hooks by Umherirrender

GlobalBlocking

 * - GlobalBlockingHooks: Use Block::toArray by Thalia
 * - Use HookHandlers for LoadExtensionSchemaUpdatesHook by Umherirrender

Graph

 * - Use ::class for class name resolution by Umherirrender
 * - Use HookHandlers for core hooks by Umherirrender

GrowthExperiments

 * - listTaskCounts: Do not expect tasks key to be present by Martin Urbanec
 * - SpecialPage::getDescription should return a Message by C. Scott Ananian
 * - WelcomeSurveyHooks: Use context of the SpecialPage object by Func
 * - AddImageFeedbackHandler: Add missing parameters by Martin Urbanec
 * - Change CSS selector for Minerva mobile menu icon by Jan Drewniak
 * - build: Update eslint-config-wikimedia to 0.25.1 by Martin Urbanec

GuidedTour

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

ImageMap

 * - Move Parsoid implementation of ImageMap from Parsoid repo by Subramanya Sastry
 * - Sync up ImageMap repo with Parsoid by Subramanya Sastry

ImageSuggestions

 * - Use HookHandlers for core hook by Umherirrender

InputBox

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

intersection

 * - Use HookHandlers for core hooks by Umherirrender

IPInfo

 * - BlockInfoRetriever: Use Block::toArray by Thalia
 * - Move unit tests that access ExtensionRegistry to integration tests by Thalia

Josa

 * - Use HookHandlers for core hook by Umherirrender

Kartographer

 * - Remove KartographerNearbyOnMobile in the code and mw-config code. by mareikeheuer
 * - Avoid use of deprecated ParserOutput::getCategories by C. Scott Ananian
 * - Replace deprecated wfGetDB( DB_REPLICA ) by Fomafix
 * - build: Update linters by Ed Sanders

LandingCheck

 * - Use HookHandlers for core hook by Umherirrender

Listings

 * - Use HookHandlers for core hook by Umherirrender

MapSources

 * - Use HookHandlers for core hook by Umherirrender

MassMessage

 * - tests: Add @group Database and use namespaced Status by Umherirrender

Math

 * - Fix underbrace by Stegmujo
 * - Add mw-invert class to which generates text by Ed Sanders
 * - Use string as return type of MMLutil::addPreOperator by Moritz Schubotz (physikerwelt)
 * - Fix Pilcrow size by Stegmujo
 * - Fix rendering of "<" and ">" in MathML by Stegmujo
 * - Render MathML for smash command from texified mhchem by Stegmujo

MediaModeration

 * - Use HookHandlers for core hook by Umherirrender

MediaSearch

 * - Use options-messages to delay message parsing on Special:Preferences by Umherirrender
 * - Use HookHandlers for core hook by Umherirrender

MobileApp

 * - Use HookHandlers for core hooks by Umherirrender
 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

MobileFrontend

 * - Update section toggle indicator to be an icon not a button by bwang
 * - Toggler: Remove unused isClosed option by Ed Sanders
 * - Toggler: Make all options into class properties by Ed Sanders
 * - Add label to drawer close icon by bwang
 * - Fixes cannot read properties of undefined by Jon Robson

MultimediaViewer

 * - Improve special page handling in onBeforePageDisplay by Umherirrender

NavigationTiming

 * - Use HookHandlers for core hook by Umherirrender

NearbyPages

 * - tests: Raise jQuery requirement from v3.6.1 to v3.7.1 by James D. Forrester

Newsletter

 * - Use ::class for class name resolution by Umherirrender
 * - tests: Add NewsletterContentHandlerTest to Database group by Umherirrender

NewUserMessage

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

ORES

 * - Change the user-facing name of the extension by Amir Sarabadani
 * - tests: Migrate to use SelectQueryBuilder by Amir Sarabadani

PageTriage

 * - Use OutputPage::setPageTitleMsg instead of ::setPageTitle by C. Scott Ananian
 * - Make sure different key values are handled while submitting by Sohom
 * - Remove usage of ParserOutput::getCategories, deprecated in 1.38 by C. Scott Ananian

ParserMigration

 * - Gate the ?useparsoid=1 functionality behind a configuration variable by C. Scott Ananian

Phonos

 * - PhonosButton: add tooltip, using the same message as the aria-label by MusikAnimal
 * - Change aria-label for errors, and link button and popup by Sam Wilson

Popups

 * - Selenium: More explicitly target reference links by Jon Robson

ProofreadPage

 * - build: Update linters by Ed Sanders
 * - Drop manageForeignResources maintenance script by Reedy

QuickSurveys

 * - Use HookHandlers for core hooks by Umherirrender

RelatedArticles

 * - Simplify Hooks::hasRelatedArticles by Umherirrender
 * - Use ::class for class name resolution by Umherirrender

ReportIncident

 * - form: Adjust font and list styles to more closely match Figma spec by Kosta Harlan
 * - emailer: Provide a link to Special:EmailUser/{user} by Kosta Harlan
 * - emailer: Specify name used with 'from' address by Kosta Harlan
 * - form: Remove email field by Kosta Harlan
 * - form: Only post somethingElseDetails if checkbox is selected by Kosta Harlan
 * - form: Use optionalFlag prop by Kosta Harlan
 * - i18n: Reference code of conduct a single time by Kosta Harlan
 * - form: Render help text in footer of step 1 by Kosta Harlan
 * - api: Support receiving "something else" details by Kosta Harlan
 * - email: Initial implementation to email moderators by Kosta Harlan
 * - Fix name of 'descriptionmsg' in extension.json by Dreamy Jazz
 * - form: Make parens in optional text part of message value by Kosta Harlan
 * - form: Convert form fields to CdxField components by Kosta Harlan
 * - i18n: Adjust copy for dialog engage text by Kosta Harlan
 * - i18n: Adjust copy per Figma specs by Kosta Harlan
 * - form: Use a form HTML element by Kosta Harlan
 * - form: Use consistent names between form data and API by Kosta Harlan
 * - form: POST form data to intake API by Kosta Harlan
 * - ServiceWiring: Clarify code coverage comment by Kosta Harlan

RevisionSlider

 * - [build] Bump wdio-selenium to v2.3.0 by WMDE-Fisch
 * - Add missing PHPUnit tests for hook handlers by thiemowmde

SandboxLink

 * - Do not preload info for link which would not be used by Taavi Väänänen

Score

 * - Update documentation in ve.ui.MWScoreContextItem by Ed Sanders
 * - build: Update linters by Ed Sanders
 * - Use https to link lilypond.org on Special:Version by Umherirrender
 * - Use HookHandlers for core hooks by Umherirrender

Scribunto

 * - Use ::class for class name resolution by Umherirrender

SecurePoll

 * - Convert call_user_func_array in StatusException by Umherirrender

SiteMatrix

 * - Use HookHandlers for core hooks by Umherirrender

StopForumSpam

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

TemplateData

 * - Remove bogus updateParamDetailsLanguage call with no language by thiemowmde
 * - Use correct BCP 47 language codes in lang="…" attributes by thiemowmde
 * - Remove unused `return true` from addParam method by thiemowmde
 * - Simplify client-side translateObsoleteParamTypes implementation by thiemowmde
 * - Use more consistent variable names in Dialog class by thiemowmde

TemplateStyles

 * - Use HookHandlers for core hooks by Umherirrender
 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

TemplateWizard

 * - build: Update linters by Ed Sanders

TheWikipediaLibrary

 * - Use HookHandlers for core hooks by Umherirrender

TorBlock

 * - Hooks: Use Block::toArray by Thalia

Translate

 * - Lift some types from Title to Page{Reference,Identity} by tacsipacsi
 * - Migrate a few selects to SelectQueryBuilder by Niklas Laxström
 * - PageTranslationSpecialPage: Add caller to SelectQueryBuilder by Abijeet
 * - MessageGroupReview: Move group priorities related method by Abijeet
 * - MessageGroupReview: Code improvements by Abijeet
 * - PageTranslation: Validate display title unit id only if translatable by Abijeet
 * - Ensure translation unit title is a valid MediaWiki title by Abijeet
 * - Add type declarations to PageMoveCollection::class by Wangombe
 * - Add type declarations to PageMoveOperation::class by Wangombe
 * - Statistics: Fix call to makeTimeCondition by Niklas Laxström
 * - Statistics: Optimize the weekly format with simple cache by Niklas Laxström
 * - Statistics: prepare for service injection by Niklas Laxström
 * - PageTranslationSpecialPage: Use SelectQueryBuilder by Abijeet
 * - SyncTranslatableBundleStatusMaintenanceScript: Minor code fixes by Abijeet
 * - TranslatableBundleStatusStore: Use property declarations by Abijeet

TranslationNotifications

 * - Use HookHandlers for core hook by Umherirrender

TrustedXFF

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

TwoColConflict

 * - Fixed styling for info icon on the special talk page conflict resolution screen. by mareikeheuer
 * - [build] Bump wdio-mediawiki to v2.3.0 by WMDE-Fisch
 * - Add missing `@group Database` to tests that started failing by thiemowmde

UniversalLanguageSelector

 * - history.replaceState: Drop unused argument by Ed Sanders
 * - build: Update linters by Ed Sanders

UploadsLink

 * - Use HookHandlers for core hooks by Umherirrender

UrlShortener

 * - SpecialUrlShortener: Allow pre-filling url field from subpage by Ammarpad

VipsScaler

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester
 * - Use HookHandlers for core hooks by Umherirrender

VisualEditor

 * - Favor jQuery's .toggleClass to reduce code duplication by thiemowmde
 * - Update banana check to use config.MessagesDirs by Ed Sanders
 * - ApiVisualEditor: Pass section to IntroMessageBuilder by Bartosz Dziewoński
 * - Edit check: Handle the manual citation workflow by Ed Sanders
 * - Remove the BetaFeatures integration by Bartosz Dziewoński

Wikibase

 * - REST: Ensure that GetPropertyLabel only requires read access by Jakob Warkotsch
 * - REST: Add spec tests for GetPropertyLabel by Jakob Warkotsch
 * - REST: Add middlewares to GetPropertyLabelRouteHandler by Jakob Warkotsch
 * - REST: Validate GetPropertyLabel requests by Jakob Warkotsch
 * - REST: Handle label not defined in GetPropertyLabel by Jakob Warkotsch
 * - REST: Include revision metadata in GetPropertyLabel response by Jakob Warkotsch
 * - REST: Add GET property description to OAS doc by Silvan
 * - Use OutputPage::setPageTitleMsg instead of ::setPageTitle by C. Scott Ananian
 * - Passing arguments to OutputPage::prepareErrorPage has been deprecated by C. Scott Ananian
 * - tests: Remove accomodations for OutputPage::setPageTitle by Bartosz Dziewoński
 * - Actions::getPageTitle can return a Message; no need to ::parse it by C. Scott Ananian
 * - REST: Mark GetPropertyDescriptions as production ready by Silvan
 * - REST: Fix class name typo by Jakob Warkotsch
 * - REST: Add authorization to "Patch Item Descriptions" by Ollie Shotton
 * - REST: Handle edit metadata in "Patch Item Descriptions" by Ollie Shotton
 * - REST: Fix TestValidatingRequestDeserializerServiceContainer by Jakob Warkotsch
 * - REST: Mark GetPropertyAliases as production-ready by muja
 * - Fix small PHPDoc mistakes found by the MediaWiki CodeSniffer by thiemowmde
 * - REST: Add TermLookupEntityTermsRetriever service wiring by Jakob Warkotsch
 * - REST: Reorder terms by muja
 * - REST: Add GetPropertyLabel happy path by Jakob Warkotsch
 * - bridge: selenium: await browser.saveScreenshot by Antoine Musso
 * - REST: Add schema tests for GetPropertyDescriptions by Silvan
 * - REST: Add GetPropertyAliases schema tests by muja
 * - REST: Add PropertyLabelRetriever by Jakob Warkotsch
 * - REST: Implement "Patch Item Descriptions" happy path by Ollie Shotton
 * - REST: Add GET property label to OAS by Jakob Warkotsch
 * - REST: Add GetPropertyAliases validation by muja
 * - Enable some PHPCS sniffs to avoid common mistakes in PHPDoc blocks by thiemowmde
 * - REST: Add validation to GetPropertyDescriptions by Silvan
 * - REST: Add middlewares to GetPropertyAliases by muja
 * - REST: Create `DescriptionsDeserializer` by Ollie Shotton
 * - REST: Fix param order in `EditMetadataHelper` assert statements by Ollie Shotton
 * - REST: Add middlewares to GetPropertyDescriptions by Silvan
 * - REST: Add GetPropertyLabels to happyPath tests by Silvan
 * - REST: Check existence in GetPropertyDescriptions by Silvan
 * - REST: Check if property exists in GetPropertyAliases use case by muja
 * - REST: Create GetPropertyDescriptions happy path by Silvan
 * - Many small fixes to incomplete/unspecific/broken PHPDoc comments by thiemowmde
 * - Add a few strict types to help the MediaWiki CodeSniffer by thiemowmde
 * - REST: GetPropertyAliases happy path by muja
 * - REST: Use service container for validator instantiation by Jakob Warkotsch
 * - REST: Improve e2e tests by muja
 * - REST: Fix test property labels by Silvan
 * - REST: Create PropertyDescriptionsRetriever by Silvan
 * - REST: Add "PATCH Item Descriptions" route to OAS by Ollie Shotton
 * - REST: Rename "InvalidLabelsPatchRequest" in OAS by Ollie Shotton
 * - REST: Improve OpenAPI schema by Ollie Shotton
 * - REST: Create PropertyAliasesRetriever interface by muja
 * - REST: Add GetPropertyAliases to OAS by muja
 * - REST: Improve aliases examples in OAS by muja
 * - REST: Move request validation code to a new namespace by Ollie Shotton
 * - REST: Add GET property descriptions route to OAS by Silvan
 * - REST: Remove field interfaces from DeserializedRequestAdapter by Ollie Shotton
 * - Replace array_key_exists with the short ??= syntax by thiemowmde
 * - REST: Optimize `DELETE` related tests by muja
 * - Remove unnecessarily complex copy of assertArrayEquals by thiemowmde
 * - Consistent use of whitespace in PHPDoc comments by thiemowmde
 * - Consistent use of bool/int shortcuts in PHPDoc comments by thiemowmde
 * - Make certain PHPUnit test setups more robust by thiemowmde
 * - Use OutputPage::setPageTitleMsg instead of ::setPageTitle by C. Scott Ananian
 * - Remove WikibaseRepo.LanguageNameLookup service by Lucas Werkmeister
 * - Add klingon for monolingual codes by Remko de Keijzer
 * - SpecialPage::getDescription should return a Message by C. Scott Ananian
 * - tests: Accomodate the new OutputPage::setPageTitleMsg method by C. Scott Ananian

WikibaseLexeme

 * - Allow Action::getPageTitle to return a Message  by C. Scott Ananian
 * - tests: Update for new return of HistoryAction::getPageTitle by Umherirrender
 * - Bump special-new-lexeme to pull in the improved required marker by Michael Große

WikidataPageBanner

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester

wikihiero

 * - Use HookHandlers for core hook by Umherirrender

WikimediaBadges

 * - build: Use conf.MessageDirs for banana path config by James D. Forrester
 * - Use HookHandlers for core hook by Umherirrender

WikimediaMaintenance

 * - blameStartupRegistry: migrate off string-assumed Module::getScript by Timo Tijhof
 * - blameStartupRegistry: Fix "Notice: Undefined key startupBytes" by Timo Tijhof
 * - blockDisabledAccounts: Update code for setting block expiry by Bartosz Dziewoński

WikimediaMessages

 * - Add label for Wikifunctions in “other projects” sidebar section by Lucas Werkmeister
 * - Add label for Foundation wiki in "other projects" sidebar section by Michael Große

Wikisource

 * - Update Transkribus model for Swedish Wikisource by Parthiv

XAnalytics

 * - Use HookHandlers for core hooks by Umherirrender

MinervaNeue

 * - Fixes history icon in green last modified bar by Jon Robson
 * - Remove Minerva bundle size check by Jon Robson

Timeless

 * - build: Update linters by Ed Sanders
 * - TimelessTemplate.php: Use strict equality by Ed Sanders
 * - Remove unused vendor prefixes by Ed Sanders

Vector

 * - Fixes saving of limited width by Jon Robson
 * - Clean up FIXMES now the cache has cleared by Jon Robson
 * - Disable client preferences by default by Jon Robson
 * - [anon prefs] Update TOC pin/unpin classes for Zebra by bwang

WikimediaApiPortal

 * - Use HookHandlers for core hook by Umherirrender

VisualEditor/VisualEditor

 * - ve.repeatString: Use native implementation by Ammarpad

No changes

 * ActiveAbstract
 * ApiFeatureUsage
 * BetaFeatures
 * Calendar
 * Capiunto
 * CharInsert
 * CiteThisPage
 * Cognate
 * CologneBlue
 * CommonsMetadata
 * ContactPage
 * CreditsSource
 * Dashiki
 * Disambiguator
 * DoubleWiki
 * Elastica
 * EventBus
 * FileExporter
 * FundraisingTranslateWorkflow
 * GeoData
 * GlobalCssJs
 * GlobalPreferences
 * GlobalUsage
 * GlobalUserPage
 * GlobalWatchlist
 * GoogleNewsSitemap
 * Insider
 * Interwiki
 * InterwikiSorting
 * JsonConfig
 * LabeledSectionTransclusion
 * LdapAuthentication
 * Linter
 * LiquidThreads
 * LoginNotify
 * MachineVision
 * Modern
 * MonoBook
 * Nostalgia
 * Nuke
 * OATHAuth
 * OAuth
 * OAuthRateLimiter
 * OpenStackManager
 * PageAssessments
 * PageImages
 * PageNotice
 * PageViewInfo
 * PagedTiffHandler
 * ParserFunctions
 * PdfHandler
 * Poem
 * PropertySuggester
 * Quiz
 * RSS
 * ReadingLists
 * RealMe
 * SearchExtraNS
 * SearchVue
 * SecureLinkFixer
 * ShortUrl
 * SimilarEditors
 * SpamBlacklist
 * SubPageList3
 * SubpageSortkey
 * SyntaxHighlight_GeSHi
 * TemplateSandbox
 * TextExtracts
 * Thanks
 * TimedMediaHandler
 * TitleBlacklist
 * TocTree
 * UploadWizard
 * VueTest
 * WebAuthn
 * WikiEditor
 * WikiLambda
 * WikiLove
 * WikibaseCirrusSearch
 * WikibaseLexemeCirrusSearch
 * WikibaseMediaInfo
 * WikibaseQualityConstraints
 * Wikidata.org
 * WikimediaApiPortalOAuth
 * WikimediaEditorTasks
 * WikimediaEvents
 * WikimediaIncubator
 * Wikistories
 * cldr
 * timeline

Total changes
461 Changes in 111 repos by 69 authors