MediaWiki 1.40/wmf.12/Changelog

Core changes

 * - Branch commit for wmf/1.40.0-wmf.12 by trainbranchbot
 * - Fix LanguageVariantConverter test by daniel
 * - selenium: Fix failing tests by Zfilipin
 * - LanguageFactory: Avoid MWException and @throws per conventions by Bartosz Dziewoński
 * - Document exceptions by Adam Wight
 * - rdbms: Update note+warning about autoReconfigure calls by Lucas Werkmeister
 * - Deprecate global-blocks-specific methods and hook by csimiyu
 * - Drop unused deprecated hooks by Amir Sarabadani
 * - HtmlOutputRendererHelper: Add edit flavor by daniel
 * - HtmlOutputRendererHelper: add more convenient setters by daniel
 * - Rest: Use SelectQueryBuilder in LanguageLinksHandler by Lucas Werkmeister
 * - HtmlOutputRendererHelper: allow parser cache to be disabled. by daniel
 * - profiler: Drop support for Tideways 4.x in ProfilerXhprof by Kevin Israel
 * - selenium: Delete PreferencesPage by Željko Filipin
 * - Reorg: Move Title-related classes to title/ by Amir Sarabadani
 * - phan: Remove internal stubs that should never be used by Kevin Israel
 * - phan: Remove ValueError stub by Kevin Israel
 * - auth: Migrate some calls of $db->select to SelectQueryBuilder by Amir Sarabadani
 * - UserMailer: Don't check if PEAR Mail and Mail_mime classes exist by Kevin Israel
 * - selenium: Remove unneeded MW_SCRIPT_PATH environment variable by Željko Filipin
 * - Site request: Add Traditional Han language name of cdo for cdo_wiki by Winston Sung
 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - rdbms: simplify LoadBalancer::getRandomNonLagged with array_sum by Aaron Schulz
 * - rdbms: remove $rtt parameter from Database::ping by Aaron Schulz
 * - rdbms: make LoadBalancer::getReaderIndex empty group check more robust by Aaron Schulz
 * - Use real section metadata in tests by Subramanya Sastry
 * - Rest: Allow fetching content of pages with system messages by Derick Alangi
 * - ParserCache data: Delete data for unsupported versions by Subramanya Sastry
 * - Treat search result suggestions like clicks (v2) by Lucas Werkmeister (WMDE)
 * - Hard deprecate AbstractBlock::getPermissionsError by csimiyu
 * - resources: Should be possible to load upload modules on mobile by Jon Robson
 * - rdbms: make SqlitePlatform::tableName apply double quotes by Aaron Schulz
 * - Remove unused variable from unpacking arrays by Umherirrender
 * - Suppress line-height inside thumbs by Arlo Breault
 * - password: Reduce time cost of password unit tests by Tim Starling
 * - password: Update Argon2Password for PHP 7.4 minimum by Tim Starling
 * - page/{title}/html: handle unknown variant gracefully by daniel
 * - actions: Inject HookContainer into abstract Action class by Umherirrender
 * - Make RestStructureTest run in IDE by daniel
 * - Update Codex from v0.2.2 to v0.3.0                           by Anne Tomasevich
 * - selenium: Enable skipped test by Željko Filipin
 * - LanguageIntegrationTest: provideFormatSizes fixes by Reedy
 * - Improve units message documentation by Lucas Werkmeister
 * - Language: Handle ronna and quetta by Reedy
 * - rdbms: avoid pg_escape_bytea call-style deprecation notices by Aaron Schulz
 * - HookRunner - Change PreferencesGetLayoutHook params by suecarmol
 * - DatabaseSqlite: fix null blobs by Tim Starling
 * - LocalFileTest: use encodeBlob/decodeBlob for img_metadata by Tim Starling
 * - ExternalStoreFactory: fix total failure when $wgAutoloadAttemptLowercase = false by Tim Starling
 * - CommentStore: Use SelectQueryBuilder by Amir Sarabadani
 * - Category: Use SelectQueryBuilder by Amir Sarabadani
 * - BagOStuff: never use the full cache key as metrics key by daniel
 * - SimpleParsoidOutputStash: use makeKey by daniel
 * - Fix incomplete ITextFormatter mocks by thiemowmde
 * - Introduce PageRestHelperFactory by daniel
 * - HistoryBlob serialization stability by Tim Starling
 * - Special:Contribute: Responsive adjustments and styling by Santhosh Thottingal
 * - Partial Revert "Remove pre PHP 7.4 serialize/unserialize" by Reedy
 * - REST: introduce applyCacheControl by daniel
 * - Miscellaneous PHP version related cleanups by Tim Starling
 * - Hard-deprecate LanguageConverterFactory::isTitleConversionDisabled by Matěj Suchánek
 * - Hard-deprecate BacklinkCache::get by Matěj Suchánek
 * - Hard-deprecate MagicWordArray::getVariableRegex by Matěj Suchánek
 * - Followup to fb747bc0: Fix bad property names by Subramanya Sastry
 * - WikiTextStructure::getDefaultSort should return null, not false by Erik Bernhardson
 * - WatchedItemStore: Use primary key for update on watchlist by Umherirrender
 * - Parser: Fix extractSections behavior for PHP >= 8.0 by Máté Szabó
 * - Add section metadata parsercache serialization tests for MW 1.40 by Subramanya Sastry
 * - Protect against long match length in CHAR_REFS_REGEX by C. Scott Ananian
 * - MediaWiki: Temp silence FR-induced clearActionName warnings by Timo Tijhof
 * - Add tests for wt2html by daniel
 * - objectcache: avoid serialize in WANObjectCache::checkAndSetCooloff by Aaron Schulz
 * - search: Don't calculate thumbnail sizes in SearchResultThumbnailProvider by Matthias Mullie
 * - Settings: Introduce SettingsBuilder::getInstance to avoid $wgSettings by daniel
 * - Message::rawParam: Remove unused 'raw_param' annotation by sbassett
 * - InitializeArticleMaybeRedirect hook: Improve docs & restrict  by Gergő Tisza
 * - Remove deprecated getMasterDB methods by Matěj Suchánek
 * - Really drop DifferenceEngine::getDiffBodyCacheKey by Matěj Suchánek
 * - DevelopmentSettings: Enable Vue development mode by Kosta Harlan
 * - ResourceLoader: Clean up PHP 7.2 hacks by Tim Starling
 * - objectcache: use multi-row upsert support in SqlBagOStuff by Aaron Schulz
 * - rdbms: make doUpsert handle SET clauses with TIMESTAMPTZ by Aaron Schulz
 * - rdbms: clarify deleteJoin slightly by Aaron Schulz
 * - rdbms: Document template SelectQueryBuilder pattern by Lucas Werkmeister
 * - Deprecate Parser::getFunctionLang by C. Scott Ananian
 * - mobile preferences: optimize toggle switches by jsn
 * - specialpage: Silence known violation unsafe RequestContext changes by Timo Tijhof
 * - Simplify special pages now that GlobalUsage no longer extends them   by Bartosz Dziewoński
 * - Follow redirects for page/{title} formats html/with_html by msantos
 * - Add autoReconfigure to ILBFactory by Lucas Werkmeister
 * - Tell Windows users not to add user and group ID to .env by Lectrician1
 * - Remove DifferenceEngine::getDiffBodyCacheKey by Matěj Suchánek
 * - HookContainer: add getHookNames method by daniel
 * - Prevent section edit links from affecting the height of their headings by Bartosz Dziewoński
 * - Address contravariance todos by Tim Starling
 * - rdbms: remove lock timeouts from Database::isKnownStatementRollbackError by Aaron Schulz
 * - Clean up PHP 7.1 reference hacks by Tim Starling
 * - rdbms: improve TransactionProfiler::silenceForScope by Aaron Schulz
 * - rdbms: deprecate Database::wasErrorReissuable by Aaron Schulz
 * - jquery.tablesorter: Add support for the ordinal indicator º in dates by Sakretsu
 * - Feed: Use DerivativeContext and not clone main RequestContext by Umherirrender
 * - search: Use 60px for search thumbnails  by Amir Sarabadani
 * - Track reason for rendering in more detail. by daniel
 * - Implement LanguageConverter for sh.wiki by Acamicamacaraca
 * - Split "static default variant" language code from "language code with converter" by Winston Sung
 * - blobstore: enable cache value segmentation for blobs by Aaron Schulz
 * - blobstore: rename confusing $blobKey parameters by Aaron Schulz
 * - ApiParse: Avoid deprecated ParserOptions::newCanonical, resolve todo comment by Bartosz Dziewoński
 * - RevisionRenderer: Avoid deprecated ParserOptions::newCanonical by Bartosz Dziewoński
 * - mobile pref checkbox to toggle and save by ELLENR
 * - Replace some in_array( array_keys ) with simple isset by thiemowmde
 * - parser: Reduce overly deep code intention in LinkHolderArray by thiemowmde
 * - rdbms: Remove `@internal` from SelectQueryBuilder constructor by Lucas Werkmeister
 * - Make search results page widths more consistent by Matthias Mullie
 * - Various doc fixes about false on method arguments/return types by Umherirrender
 * - parser: allow segmentation of large preprocessor cache values by Aaron Schulz
 * - SQLPlatform: Check for empty assignment list in upsert by Bartosz Dziewoński
 * - Remove deprecated method call from CheckBlocksSecondaryAuthenticationProvider by Thalia
 * - objectcache: suppress TransactionProfiler in occasionallyGarbageCollect by Aaron Schulz
 * - Metrics: add metric property accessors by Cole White
 * - Metrics: move metric implementations to subdirectory by Cole White
 * - Metrics: expand Sample instance parameters by Cole White
 * - Metrics: rename extension to component by Cole White
 * - Refresh some http://*.wikipedia.org URLs by Lucas Werkmeister
 * - Action: Remove deprecated constructor parameters by Bartosz Dziewoński
 * - Prefill page/pattern/tagfilter/offender in form for Special:Log by Umherirrender
 * - api: Fix order by on list=allimages&aisort=timestamp for pagination by Umherirrender

Vendor

 * - Bump parsoid to 0.17.0-a7          by Arlo Breault
 * - Add wikimedia/metrics-platform 1.0.0 by Sam Smith

AbuseFilter

 * - Register AbuseFilter menu as standard tabs by Jon Robson

ArticlePlaceholder

 * - Bump eslint-config-wikimedia from 0.22.1 to 0.23.0 by Addbot

CampaignEvents

 * - Implement support for private registration UI in registration modal by MHorsey
 * - Implement support for private registration in Special:RegisterForEvent by MHorsey
 * - Load data from the master DB in delete and move hook handlers by Daimona Eaytoy
 * - EventDetails: update selection label after removing participants by Daimona Eaytoy
 * - Allow showing a policy message in the footer of the registration form by Daimona Eaytoy
 * - Remove renamed hook by Daimona Eaytoy
 * - Generalize the policy message lookup by Daimona Eaytoy
 * - Create Echo notification for when users register for an event  by MHorsey
 * - Fix more bugs in participant selection on EventDetails by Daimona Eaytoy
 * - Add privacy toggle to the registration dialog by MHorsey
 * - Fix participants list selected by Claudio Melo

CentralAuth

 * - Remove unnecessary wrappers for generator functions by Bartosz Dziewoński
 * - AntiSpoof: Do not ship the schema file for global antispoof by Umherirrender

CheckUser

 * - Selenium: Refactor WebdriverIO tests from sync to async mode by dreamyjazz

CirrusSearch

 * - Add CirrusSearchConcreteReplicaGroup to the config-dump API by David Causse
 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Enable ICU Folding for Russian and Cleanup of Analysis Config by tjones
 * - Unpack and Upgrade Ukrainian Analysis Chain by tjones
 * - Add config option to disable incoming link counting by Erik Bernhardson

Cite

 * - Undo use of .reference instead of .mw-ref in CSS counter rules by Bartosz Dziewoński
 * - VE: Use instead of in CE HTML by Bartosz Dziewoński

Cognate

 * - tests: Replace assertEmpty with assertSame by Umherirrender

Collection

 * - tests: Replace assertEmpty with assertNull by Umherirrender

CommonsMetadata

 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - tests: Remove null values from LicenseParserTest for php8.1 by Umherirrender

ConfirmEdit

 * - tests: Replace assertEmpty with assertSame by Umherirrender

ContentTranslation

 * - Fix warnings reported by PHPCS related to config access by Santhosh Thottingal
 * - CX3 Build 0.2.0+20221121  by Santhosh Thottingal
 * - Remove desktop only es6 modules by Jon Robson
 * - CX: use select query builder in CorporaLookup class by NikG
 * - SX MW UI lib: Fix MWThumbnail defaults and usage by NikG
 * - SX utils: Fix "debounce" method and add tests by NikG

DiscussionTools

 * - Use 'BeforePageDisplay' instead of 'OutputPageBeforeHTML' for once-per-page things  by Bartosz Dziewoński
 * - Fix Phan failure due to core changes in Action by Bartosz Dziewoński
 * - Dedupe ApiDiscussionToolsTrait::parseRevision and HookUtils::parseRevisionParsoidHtml by Bartosz Dziewoński
 * - ApiDiscussionToolsTrait: PageInfo & Compare don't need HTML for editing by Derick Alangi
 * - HookUtils::parseRevisionParsoidHtml doesn't need HTML for editing by Bartosz Dziewoński
 * - Don't add lede button if mobile DiscussionTools not enabled by Bartosz Dziewoński
 * - highlighter: Fix double-escaping of popup notifications by Bartosz Dziewoński
 * - Don't run OutputPageBeforeHTML for the talkpageheader by David Lynch
 * - CommentFormatter: Fix condition for lede button to consider table of contents by Bartosz Dziewoński
 * - Make "Add topic" button sticky by Ed Sanders
 * - CommentFormatter: Fix condition for lede button to consider new wrappers by Bartosz Dziewoński
 * - Remove override for Minerva hiding .tmbox, no longer needed by Bartosz Dziewoński
 * - Allow replying to some comments with accidental complex transclusions by Bartosz Dziewoński
 * - Add test cases for T313093 by Bartosz Dziewoński
 * - Place replies outside transclusions, disallow replying to transcluded comments by Bartosz Dziewoński
 * - Add test case for T313100 by Bartosz Dziewoński

DonationInterface

 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Update SmashPig to v0.8.3.11 and own version number by cstone
 * - Update minFraud and GeoIP2 libraries by Andrew Green

Echo

 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Fix no-JS Special:Notifications only displaying one notification per day by Bartosz Dziewoński
 * - Initialize Echo when CentralAuth autologin replaces the user toolbar by Gergő Tisza
 * - Move skinStyle rules to skin by Jon Robson
 * - Use buildComparison instead of raw SQL by Bartosz Dziewoński
 * - Fix and disable some phpcs exclusions by Reedy

EntitySchema

 * - selenium: Delete tests disabled for more than 1 year  by Željko Filipin
 * - Selenium: Retry setting the description by Michael Große
 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Actions: Remove support for deprecated Page constructor parameter by Lucas Werkmeister

EventBus

 * - PageChangeHooks - Guard against null revision by Ottomata

FileExporter

 * - tests: Replace assertEmpty with assertSame by Umherirrender

FileImporter

 * - Fix all remaining PHPCS warnings by thiemowmde
 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Make use of the ?? syntax where it makes sense by thiemowmde
 * - Remove obolete BetaFeature message by thiemowmde

FlaggedRevs

 * - Remove unused maintenance script clearCachedText.php by Bartosz Dziewoński
 * - SpecialContributions: Treat edits at never-reviewed articles as pending by Martin Urbanec
 * - Document database tables by Gergő Tisza
 * - Remove some unused method parameters from central classes by thiemowmde
 * - SpecialContributions: Make it possible to see pending changes only by Martin Urbanec

Flow

 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Actions: Remove support for deprecated Page constructor parameter by Umherirrender
 * - Move UrlGenerator dependency from Templating to RevisionFormatter by thiemowmde
 * - Replace begin/commit with startAtomic/endAtomic by Gergő Tisza
 * - Replace deprecated User::incEditCount by Umherirrender
 * - Use PHPUnit's createMock shortcut where possible by thiemowmde
 * - Use native in_array and array_column where possible by Thiemo Kreuz
 * - Remove unused Templating::getOutput method by thiemowmde

GeoData

 * - Fix phpcs excluded sniffs by Umherirrender
 * - Ensure coordinates are stored as floats by Erik Bernhardson
 * - Use buildComparison instead of raw SQL by Bartosz Dziewoński

GlobalBlocking

 * - Remove getPermissionsError from GlobalBlock by csimiyu

GlobalPreferences

 * - tests: Replace assertEmpty with assertSame by Umherirrender

GlobalUsage

 * - Don't copy local file usage when a shared file is deleted by Bartosz Dziewoński
 * - Copy file usage from the correct database when local file is deleted by Bartosz Dziewoński
 * - SpecialGlobalUsage: Use PagerNavigationBuilder for paging links by Bartosz Dziewoński
 * - Fix limit links on Special:GlobalUsage going back to start by Bartosz Dziewoński
 * - Fix GlobalUsage displaying one more row than requested by Bartosz Dziewoński
 * - Suggest files when searching subpages for Special:GlobalUsage by Umherirrender
 * - Do not extend core special page classes that aren't stable to extend  by Bartosz Dziewoński

GrowthExperiments

 * - NewImpact: Prepare experiment by Kosta Harlan
 * - refreshUserImpactData.php: Add force and dry-run flags  by Gergő Tisza
 * - refreshUserImpactData.php: Add minimum edit filter by Gergő Tisza
 * - Revert "NewImpact: Remove d3 feature-flag" by Kosta Harlan
 * - NewImpact: inject username value in ErrorDisplay by Sergio Gimeno
 * - NewImpact: Remove d3 feature-flag by Kosta Harlan
 * - NewImpact: use plural in pageviews chart title by Sergio Gimeno
 * - NewImpact: update copy texts based on copy doc v0.2 by Sergio Gimeno
 * - User impact trendcharts: use space better by Gergő Tisza
 * - Abbreviate pageview count in new impact module mobile summary by Gergő Tisza
 * - Turn UserImpact formatting logic into separate service by Gergő Tisza
 * - Add different message for single-day edit streak by Gergő Tisza
 * - ImageRecommendation: End experiment by Kosta Harlan
 * - NewImpact: Use locale-aware date range formatting for longest streak by Gergő Tisza
 * - Better logic split between user impact classes by Gergő Tisza
 * - User impact: Don't regenerate on non-mainspace edits by Gergő Tisza
 * - Simplify SpecialImpact by Gergő Tisza
 * - User impact: Sort&filter before adding URLs by Gergő Tisza
 * - Refactor UserImpactHandler::run by Gergő Tisza
 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - NewImpact: Don't include items with no page views in topViewedArticles by Kosta Harlan
 * - NewImpact: Set minimum height for unactivated desktop by Kosta Harlan
 * - NewImpact: Set minimum height for activated desktop module by Kosta Harlan
 * - NewImpact: Set minimum height for mobile overlay summary by Kosta Harlan
 * - NewImpact: Load server-side data when available by Kosta Harlan
 * - NewImpact: Instrument app loading by Kosta Harlan
 * - NewImpact: Export user impact data from server-side by Kosta Harlan
 * - UserImpact: Make page view data stale a method on the value object by Kosta Harlan
 * - User impact: add impact data to instrumentation events by Sergio Gimeno
 * - SortedFilteredUserImpact: Initialize properties to null by Kosta Harlan
 * - User impact: empty data screen by Sergio Gimeno
 * - UserImpactHandler: Allow POST requests as well by Kosta Harlan
 * - Limit user impact API for anons by Gergő Tisza
 * - Docs & code improvements related to SortedFilteredUserImpact by Gergő Tisza
 * - Makeshift deduplication for RefreshUserImpactJob by Gergő Tisza
 * - eslint: Remove unneeded suppression by Kosta Harlan
 * - UserImpactHandler: Instrument cache hit and misses by Kosta Harlan
 * - User impact: convert numbers to locale numerals by Sergio Gimeno
 * - User impact: always display contributions link as not visited by Sergio Gimeno
 * - extension.json: Remove unused GEHomepageNewAccountVariants config by Kosta Harlan
 * - Batch user impact data updates via RefreshUserImpactJob by Gergő Tisza
 * - [i18n] Change "None" to "None (I claim them manually)" by Martin Urbanec
 * - User impact: always display article links in blue by Sergio Gimeno
 * - User impact: always call $i18n.text by Sergio Gimeno
 * - Mentee overview: always call $i18n.text by Sergio Gimeno
 * - NewImpact: Show 5 top viewed pages  by Kosta Harlan
 * - User impact: fix streak graph overflow by Sergio Gimeno
 * - Add .mw-parser-output to banner module by Gergő Tisza
 * - Speed up registration time check in ImpactHooks by Gergő Tisza
 * - NewImpact: Restrict data to main namespace by Kosta Harlan
 * - vue tests: mock i18n plugin in jest setup by Sergio Gimeno
 * - ImpactHooks: $diff is a DateInterval, not an int by Kosta Harlan
 * - [cleanup] Remove GEMentorshipMigrationStage by Martin Urbanec
 * - [cleanup] Remove GEMentorDashboardBackendEnabled by Martin Urbanec
 * - [cleanup] Remove GEMentorDashboardDiscoveryEnabled by Martin Urbanec
 * - Vue components: codex icons hook exports icons as strings or objects  by Sergio Gimeno
 * - MentorDashboard: Load missing message by Martin Urbanec
 * - updateIsActiveFlagForMentees: Drop mentorship entries for invalid users by Martin Urbanec
 * - Mentee overview: update offset before request by Sergio Gimeno
 * - updateIsActiveFlagForMentees: Treat "no edits" user correctly by Martin Urbanec
 * - SECURITY: Ensure user is not blocked in ApiManageMentorList by Martin Urbanec
 * - User impact: accessibility review by Sergio Gimeno
 * - UserImpactHandler: Re-calculate data on demand by Kosta Harlan
 * - User impact: add disabled and unactivated state by Sergio Gimeno
 * - User impact: wrap article pageviews count and graph by Sergio Gimeno
 * - api-testing: Add basic test for user-impact endpoint by Kosta Harlan
 * - UserImpactHandler: Use interface by Kosta Harlan
 * - User impact: add missing tooltips on articles list by Sergio Gimeno
 * - Mentor dashboard: merge ext.growthExperiments.MentorDashboard.Vue in MentorDashboard by Sergio Gimeno
 * - Mentor dashboard: remove uneeded files from the non-Vue mentee overview  by Sergio Gimeno
 * - HomepageHooks: Implement onContributeCards hook by Kosta Harlan
 * - HomepageVisit: Update to schema version 1.5.0 by Kosta Harlan

ImageMap

 * - Avoid Phan PhanUndeclaredMethod false positives by Bartosz Dziewoński
 * - Use Parsoid's HTML5-compliant helpers for HTML transformations by Bartosz Dziewoński

ImageSuggestions

 * - Add script to generate notifications for a given list of users & categories by Matthias Mullie

JsonConfig

 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Stop log spam about missing pages by thiemowmde
 * - Avoid try…catch where if…else will do when using Language::factory by Bartosz Dziewoński
 * - Remove unused config by tacsipacsi

Kartographer

 * - Removed unnecessary debounce option from mapdata lib call by thiemowmde
 * - Fix confusing order of validation error messages by thiemowmde
 * - Link to GeoJSON schema in error message based on the schema by thiemowmde
 * - Allow limited wikitext in GeoJSON validation error messages by thiemowmde
 * - Provide Commons data via full URL by Adam Wight
 * - nearby: Replace hand-crafted debounce with OO.ui.debounce by thiemowmde
 * - Make "secret" wikitext parsing in GeoJSON more obvious by thiemowmde

LoginNotify

 * - i18n: Use native digits in login notify messages by Ebrahim Byagowi

MachineVision

 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Tests: remove fake i18n plugin by Eric Gardner
 * - Don't call Message::serialize directly by Reedy

MassMessage

 * - tests: Replace assertTrue(empty) with assertSame by Umherirrender

Math

 * - Rewrite hot TexNode methods for performance by thiemowmde
 * - Remove unnecessary uses of by Bartosz Dziewoński
 * - Make code using the Math.CheckerFactory service discoverable by Moritz Schubotz (physikerwelt)
 * - Replace manual array merge in ParserUtil with native function by thiemowmde
 * - Fix Phan warning in TexVC class by thiemowmde
 * - Replace some confusing array_walk with more trivial foreach by thiemowmde
 * - Simplify VE data modules using 'packageFiles' by Bartosz Dziewoński
 * - Make use of ?: and ?? shortcut syntax where it makes sense by thiemowmde
 * - Change validate in MathValidator to php-based checking by Stegmujo
 * - Remove PNG rendering mode by Moritz Schubotz (physikerwelt)
 * - Add Service Initialization in Render by Stegmujo
 * - Avoid try…catch where if…else will do when using LanguageFactory by Bartosz Dziewoński

MediaSearch

 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - build: Remove unneeded stylelint suppressions by Umherirrender
 * - build: Run stylelint for vue files by Umherirrender
 * - Remove local copy of i18n plugin from jest tests by Eric Gardner

MobileFrontend

 * - tests: Replace assertEmpty with assertCount by Umherirrender
 * - Update Phan suppressions and related code by thiemowmde
 * - Use more compact modern syntax like ?? where it makes sense by thiemowmde
 * - Remove comments that literally repeat what the code says by thiemowmde
 * - Use PHPUnit's convenience shortcuts where possible by thiemowmde
 * - selenium: Delete all tests by Željko Filipin
 * - Update to Node v14.17.5 by Željko Filipin
 * - Add support for autocapitalize in MobileFrontend search overlay by Jon Robson
 * - [SECURITY] Use rev_page_timestamp in SpecialMobileHistory by Amir Sarabadani

NavigationTiming

 * - Remove ElementTiming measurements by Peter Hedenskog
 * - tests: Remove unneeded mw.eventLog stub from CentralNotice test by Timo Tijhof
 * - build: Fix eslint cross-browser compat warning and enforce by Timo Tijhof
 * - Collect skin, namespaceId and action for paint timings. by Peter Hedenskog
 * - Remove reference to unused jquery.cookie dependency by Timo Tijhof
 * - tests: Clean up using propContains by Timo Tijhof
 * - Add test for multiple CLS frames and rounding by Timo Tijhof
 * - Collect Cumulative Layout Shift instead of just Layout Shift by Peter Hedenskog
 * - Remove FirstInputTiming. by Peter Hedenskog
 * - Collect skin for navtiming by Peter Hedenskog

OAuth

 * - Remove duplicated word from a message by Amir E. Aharoni
 * - Various minor documentation and code style cleanups by Thiemo Kreuz
 * - Fix PHP 8.1 test errors by Gergő Tisza
 * - Update another OAuth 2.0 message from “consumer” to “client” by Lucas Werkmeister

ORES

 * - tests: Replace assertEmpty with assertSame by Umherirrender

PageAssessments

 * - tests: Replace assertEmpty with assertSame by Umherirrender

PageImages

 * - Make sure pithumbsize set width and not height by Amir Sarabadani
 * - Ensure array is passed to getProperties by Matthias Mullie
 * - Add in-process cache for result of getPageImage DB query by Amir Sarabadani
 * - Remove size check by Matthias Mullie

PageTriage

 * - Hide Deletion Tag Log from Special:Log by Novem Linguae
 * - Don't add newline to top of page when applying maintenance tags by Novem Linguae
 * - CurationToolbar: Adding the Old_prod template to the article talk page by MPGuy2824
 * - NewPagesFeed: Adding a "Reset Filters" button for NPP by MPGuy2824
 * - Add integration test for PageTriageUtil::createNotificationEvent by Novem Linguae
 * - PageCuration: Detect and  templates as references  by MPGuy2824
 * - NewPagesFeed filters: Change the default filters for a new user by MPGuy2824
 * - Add unit tests for PageTriageUtil::mapOresParamsToClassNames by Novem Linguae
 * - Refactor deprecated wfGetDB calls by Novem Linguae
 * - Change 15 minute warnings to 60 minute warnings by Novem Linguae
 * - Disable pagetriagetagging API when not using enwiki feature flag by Novem Linguae
 * - Update Composer dependencies by Kosta Harlan
 * - tests: use clearHook, avoid $wgHooks by daniel
 * - Fix NewPagesFeed filter preferences saving bug  by Novem Linguae
 * - Page Curation: Show warning for newly created pages by MPGuy2824
 * - CurationToolbar: Marking CSD tag messages as optional to translate by MPGuy2824

PageViewInfo

 * - Remove meaningless ->any from test setups by thiemowmde

ParserFunctions

 * - Replace Parser::getFunctionLang with ::getTargetLanguage by C. Scott Ananian

Phonos

 * - Switch from a ButtonWidget to a PopupButtonWidget by Sam Wilson

ProofreadPage

 * - Remove defunct grunt build commands by Sohom
 * - Add API to get current image from Openseadragon by Sohom
 * - Add Openseadragon controller module for EditInSequence by Sohom

PropertySuggester

 * - tests: Replace assertEmpty with assertSame by Umherirrender

ReadingLists

 * - Adjust verbiage of hint for installing the latest app. by Dmitry Brant
 * - Don't make unnecessary API call(s) for anonymized reading list preview. by Dmitry Brant
 * - Introduce Import button for launching deeplink into app. by Dmitry Brant
 * - Fix deprecation of strlen with null parameter. by Dmitry Brant

RelatedArticles

 * - selenium: Enable one skipped test, delete one failing test by Željko Filipin

Renameuser

 * - build: Run eslint for json files by Umherirrender

RevisionSlider

 * - Simplify slightly complex code reading time zone settings by thiemowmde
 * - Fix and add missing JSDoc type hints in SliderView class by thiemowmde

Scribunto

 * - tests: Replace assertEmpty with assertCount by Umherirrender
 * - Namespace translations for Moroccan Arabic (ary) by Ideophagous
 * - Avoid try…catch where if…else will do when using LanguageFactory by Bartosz Dziewoński

SearchVue

 * - Update position of SearchVue panel to match interwiki widget position by Simone Cuomo
 * - Search improvements - not closed QuickView disregards article snippet position by Vadim Kovalenko
 * - Mobile: Create a Quick View component by Simone Cuomo
 * - Fix background colour of Search preview by Simone Cuomo
 * - build: Run stylelint for vue files by Umherirrender
 * - SearchPreview instrumentation - Record user Image click by Simone Cuomo
 * - SearchPreview Instrumentation - Trigger event on snippets clicked by Simone Cuomo
 * - SearchPreview Instrumentation - Trigger event when sections are clicked  by Vadim Kovalenko
 * - Enable users to open and close quick view on special:search results page by Simone Cuomo
 * - Use cannonical /wiki/X#Y URLs instead of ?title=X#Y URLS by Matthias Mullie
 * - Special:Search - incorrect position for RTL arrow for QuickView by Simone Cuomo
 * - when all sections are displayed, bottom border is not displayed by Simone Cuomo
 * - Preferences link should re-direct to the specific endpoint by Simone Cuomo

ShortUrl

 * - Use 'BeforePageDisplay' instead of 'OutputPageBeforeHTML' for once-per-page things by Bartosz Dziewoński

SiteMatrix

 * - Fix displaying duplicate language names on Special:SiteMatrix by Bartosz Dziewoński

SyntaxHighlight_GeSHi

 * - Make the code size limit for highlighting configurable  by alex4401

TimedMediaHandler

 * - tests: Replace assertEmpty with assertSame by Umherirrender

Translate

 * - PrepareTranslatablePageSpecialPage: Handle $par being null by Reedy
 * - Move MessageGroupConfigurationParser to namespaces by wangombe
 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - MessageBundleMessageGroupLoader: Use proper database server index by Abijeet

TranslationNotifications

 * - Add option to notify all, selected or all except some languages  by wangombe

UploadWizard

 * - Remove GlobalBlocking calls by AnaïsGueyte

UrlShortener

 * - Remove usage of User::isBlockedGlobally by csimiyu

VisualEditor

 * - Do not grey out page title while loading NWE on Vector 2022 by Bartosz Dziewoński
 * - Update VE core submodule to master (099b95023) by Ed Sanders
 * - Use PageRestHelperFactory by daniel
 * - Link inspector: Avoid focussing a input when it isn't visible by Ed Sanders
 * - Remove usage of User::isBlockedGlobally and User::getGlobalBlock by csimiyu
 * - Collect timing metrics for ParsoidClient by daniel

Wikibase

 * - Use SelectQueryBuilder in BulkSubscriptionUpdater by Lucas Werkmeister
 * - Use SelectQueryBuilder in WikiPageEntityStore by Lucas Werkmeister
 * - tests: Replace assertTrue(empty) with assertSame by Umherirrender
 * - Auto-reconfigure LBFactory in some more places by Lucas Werkmeister
 * - Use SelectQueryBuilder in WikiPageEntityRedirectLookup by Lucas Werkmeister
 * - Remove searchApiUrl / domain from fetchByTitle by Lucas Werkmeister
 * - REST: Simplify the value format in deserializers by Ollie Shotton
 * - REST: Validate PropertyValuePairs during deserialization by Ollie Shotton
 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Adjusted typography in REST and Action API format differences doc by Leszek Manicki
 * - Introduce new showcalendar option for time formatters by Lucas Werkmeister
 * - Actions: Remove support for deprecated Page constructor parameter by Umherirrender
 * - REST: Document the new statement structure by sihe
 * - Bump wikibase-data-values-value-view to HEAD by Lucas Werkmeister
 * - REST: Simplify response definitions in OAS by Ollie Shotton
 * - REST: Rename "new" definitions in OAS by Ollie Shotton
 * - REST: Remove unused definitions from OAS by Ollie Shotton
 * - REST: Remove unused REST API Domain Deserializer by Ollie Shotton
 * - REST: Reorder PropertyValuePairDeserializer params by Ollie Shotton
 * - REST: Catch specific exceptions in Deserializer by Ollie Shotton
 * - REST: Use new Deserializers in JsonDiffStatementPatcher by Ollie Shotton
 * - Fix special page subpage handling in PHP 8.1 by Lucas Werkmeister
 * - changePropertyDataType.php: Add optional --summary by Lucas Werkmeister
 * - REST: Use new Deserializers in REST API requests by Ollie Shotton
 * - Add vector search client for use in new skin version by Michael Große
 * - Bump stylelint-config-wikimedia from 0.11.1 to 0.13.1 by Addbot
 * - Auto-reconfigure LBFactory in DumpGenerator by Lucas Werkmeister
 * - REST: Rename RestSerializerFactory -> SerializerFactory by Jakob Warkotsch
 * - REST: Remove legacy statement format response specs by Jakob Warkotsch
 * - REST: Remove unused Serializers and legacy Factory by Jakob Warkotsch
 * - Really test LanguageWithConversion::factory and not Language::factory by Bartosz Dziewoński
 * - REST: Improve PATCH e2e test by Ollie Shotton
 * - Avoid try…catch where if…else will do when using LanguageFactory by Bartosz Dziewoński
 * - REST: Use new statement format in error context by Jakob Warkotsch
 * - REST: Refactor ReplaceItemStatementTest by Ollie Shotton
 * - Make eslint fail on warning by Michael Große
 * - REST: Use new Serializer for statement lists by sihe
 * - Translate special page names into Polish by Msz2001
 * - REST: Add ReferenceDeserializer by Jakob Warkotsch
 * - REST: Use new Serializer for single statements by sihe
 * - phpcs: Remove unused exclude-pattern by Lucas Werkmeister
 * - REST: Disallow skipped tests by Jakob Warkotsch
 * - bridge: update browserlist by Michael Große
 * - bridge: update storybook by Michael Große
 * - bridge: update node version by Michael Große
 * - Disable ignored jsdoc eslint rules by Michael Große
 * - tainted-ref: update node version by Michael Große
 * - REST: Add StatementDeserializer by Jakob Warkotsch
 * - REST: Add PropertyValuePairDeserializer by Jakob Warkotsch
 * - Use SelectQueryBuilder in PropertyInfoTableBuilder by Lucas Werkmeister
 * - Bump dawidd6/action-send-mail from 3.7.0 to 3.7.1 by Addbot
 * - Use \u{00A0} instead of  by Fomafix

WikibaseCirrusSearch

 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Provide an array of descriptions for search by Erik Bernhardson
 * - Encode empty label/description fields as null by Erik Bernhardson
 * - Restore test cases with \u{00A0} instead of  by Fomafix
 * - Use \u{00A0} instead of  and temporary skip test cases  by Fomafix

WikibaseLexeme

 * - Remove resources/vendor from Gruntfile.js by Lucas Werkmeister
 * - Bump Special:NewLexeme to not synthesize italic font glyphs in copyright by Michael Große
 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Actions: Remove support for deprecated Page constructor parameter by Umherirrender
 * - Check array type in list change op deserializers by Lucas Werkmeister
 * - Shorten wikibaselexeme-form-field-required message by Lucas Werkmeister
 * - Bump special new lexeme to include required asterisk title by Michael Große
 * - Add wikibaselexeme-form-field-required message by Michael Große
 * - Update lemma help link target URL by Lucas Werkmeister
 * - NewLexeme: Hide language variant fallback indicators by Lucas Werkmeister
 * - Restore test cases with \u{00A0} instead of  by Fomafix
 * - Use \u{00A0} instead of  and temporary skip test cases  by Fomafix

WikibaseMediaInfo

 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - Represent empty labels/descriptions in search as null by Erik Bernhardson
 * - Hash the query components in "wbmi-mediasearch-entities" keys by Aaron Schulz
 * - Revert "Make sure wbUserSpecifiedLanguages is a plain array" by Lucas Werkmeister

WikiEditor

 * - Move logging hook registrations for realtime preview into document-ready by David Lynch

WikiLambda

 * - Styling tweaks to Publish Component, per aalhazwani@ by ddw
 * - ZObjectSelector: Retain aliases in search results by James D. Forrester
 * - build: Upgrade Codex from 0.2.2 to 0.3.0 by Julia Kieserman
 * - Run app in Vue 3 mode. by EWright
 * - Check if results are ready before showing info-icons for tester runs by dmartin
 * - Update function-schemata sub-module to HEAD (a19a2e3)   by James D. Forrester
 * - Add the alias name back in the function viewer sidebar. by ddw
 * - Convert the messages in the Publish Dialog to use Codex Message by ddw
 * - Enable deleting arguments on desktop (mobile already implemented). by ddw
 * - Update placeholder to use untitled and zid when no title is defined by Julia Kieserman
 * - Remove the "are you sure" dialog, its not showing only on page reload by ddw
 * - ISO code changes by temitope adesoji
 * - E2E test for CUJ 1: Evaluate a function by Florent
 * - Hide the "show more languages" button on the Function Viewer Details by ddw
 * - package: Define 'selenium-daily' job, for now same as all tests by James D. Forrester
 * - README: Make clearer that the system is only half-built with no local services by James D. Forrester
 * - Update function-schemata sub-module to HEAD (b2b3612) by James D. Forrester
 * - Trust LanguageFactory to construct Language objects by Bartosz Dziewoński
 * - Add the default browser are you sure message when trying to reload the by ddw
 * - Make the publish and leave editor dialogs mobile friendly. by ddw
 * - Show ZID for testers with no labels in the Tester Table. by ddw
 * - On Implementations + Tester tables, when no label show ZID. by ddw
 * - Add the Leave Editor Dialog to the ZObjectEditor, for when a user tries by ddw
 * - Ensure there is not an error in the FunctionViewerSidebar if a type was not set for an argument. by ddw
 * - ApiPerformTestTest: Annotate some other methods tested by James D. Forrester
 * - Setup zObject editor "isDirty", which is connected to the Publish by ddw
 * - Support receipt of JSON testers in the perform_test API method.  by EWright
 * - i18n: Don't say admins in the function-editing tooltip, it might not be by James D. Forrester
 * - build: Upgrade Codex from 0.2.1 to 0.2.2 by James D. Forrester

WikiLove

 * - Remove redundant skin style by Jon Robson
 * - Drop commented out code by Jon Robson

WikimediaMaintenance

 * - createExtensionTables: Add PageTriage tables-generated.sql by TheresNoTime

WikimediaMessages

 * - Add another policy message for the CampaignEvents extension by Daimona Eaytoy
 * - Update name of CampaignEvents hook by Daimona Eaytoy
 * - Slight tweak to message for importing reading lists. by Dmitry Brant

Wikisource

 * - Add stylelint and fix errors by Sam Wilson
 * - Add a npm fix script by Sohom

Wikistories

 * - Add new design of read next story on the last frame of each story by Huei Tan

MinervaNeue

 * - tests: Replace assertEmpty with assertSame by Umherirrender
 * - selenium: Enable one skipped test, delete one failing test by Željko Filipin
 * - Remove styles for `dd` that cause content to be cut off by Bartosz Dziewoński
 * - HookRunner - Change PreferencesGetLayoutHook params by suecarmol
 * - Move skinStyle from Echo to Minerva by Jon Robson
 * - Disable auto-capitalization hint on search field of wikis with $wgCapitalLinks = false by Jon Robson
 * - Special contribute Selenium Test by Moh'd Khier Abualruz
 * - hacks: Stop hiding .fmbox and .tmbox by Bartosz Dziewoński

MonoBook

 * - Fix alignment when Echo is clicked by Jon Robson
 * - Move skinStyles for Echo to Monobook by Jon Robson

Nostalgia

 * - Fix search box by Bartosz Dziewoński

Timeless

 * - Simplify implementation of heading underlines   by Bartosz Dziewoński
 * - Orange "New Message" Bar of Death styling by Jack Phoenix

Vector

 * - search: Don’t pass searchApiUrl into fetchByTitle by Lucas Werkmeister
 * - Add jQuery.UI styles to Vector 2022  by Ed Sanders
 * - Ensure more menu shows on lower resolutions by bwang
 * - Prepare styles for Page Tools menu by Jan Drewniak
 * - Drop the VisualEnhancementsNext feature flag by Jon Robson
 * - Fix icon button spacing in sticky header by bwang
 * - Update page tools to use VectorComponentPinnableHeader by bwang
 * - Update ToC selector to account for page tools by bwang
 * - Reintroduce h2 to Table of contents label by bwang
 * - [Cleanup] Address FIXMES relating to cached HTML by Jon Robson
 * - Update TOC to use PinnableHeader by bwang

VisualEditor/VisualEditor

 * - Add jsdoc for undocumented build functions by David Chan
 * - Fix eslint warnings by David Chan
 * - Sanitize href attribute in LinkContextItem and LinkAnnotation by Ed Sanders
 * - Upgrade DOMPurify to 2.4.1 by Ed Sanders
 * - Add unit tests for ve.sanitize by Ed Sanders
 * - Add test for use of ve.sanitize (DOMPurify) in external paste handler by Ed Sanders

No changes

 * 3D
 * ActiveAbstract
 * AdvancedSearch
 * AntiSpoof
 * ApiFeatureUsage
 * ArticleCreationWorkflow
 * Babel
 * BetaFeatures
 * BounceHandler
 * Calendar
 * Campaigns
 * Capiunto
 * CategoryTree
 * CentralNotice
 * CharInsert
 * ChessBrowser
 * CiteThisPage
 * Citoid
 * CodeEditor
 * CodeMirror
 * CologneBlue
 * ContactPage
 * CreditsSource
 * Dashiki
 * Disambiguator
 * DismissableSiteNotice
 * DoubleWiki
 * Elastica
 * ElectronPdfService
 * EventLogging
 * EventStreamConfig
 * ExtensionDistributor
 * ExternalGuidance
 * FeaturedFeeds
 * FundraiserLandingPage
 * FundraisingTranslateWorkflow
 * GWToolset
 * Gadgets
 * GeoCrumbs
 * GlobalCssJs
 * GlobalUserPage
 * GlobalWatchlist
 * GoogleNewsSitemap
 * Graph
 * GuidedTour
 * IPInfo
 * InputBox
 * Insider
 * Interwiki
 * InterwikiSorting
 * Josa
 * LabeledSectionTransclusion
 * LandingCheck
 * LdapAuthentication
 * Linter
 * LiquidThreads
 * Listings
 * MapSources
 * MediaModeration
 * MobileApp
 * Modern
 * MultimediaViewer
 * NearbyPages
 * NewUserMessage
 * Newsletter
 * Nuke
 * OATHAuth
 * OAuthRateLimiter
 * OpenStackManager
 * PageNotice
 * PagedTiffHandler
 * PdfHandler
 * Poem
 * PoolCounter
 * Popups
 * QuickSurveys
 * Quiz
 * RSS
 * SandboxLink
 * Score
 * SearchExtraNS
 * SecureLinkFixer
 * SecurePoll
 * SimilarEditors
 * SpamBlacklist
 * StopForumSpam
 * SubPageList3
 * SubpageSortkey
 * TemplateData
 * TemplateSandbox
 * TemplateStyles
 * TemplateWizard
 * TextExtracts
 * Thanks
 * TheWikipediaLibrary
 * TitleBlacklist
 * TocTree
 * TorBlock
 * TrustedXFF
 * TwoColConflict
 * UniversalLanguageSelector
 * UploadsLink
 * VipsScaler
 * WebAuthn
 * WikibaseLexemeCirrusSearch
 * WikibaseQualityConstraints
 * Wikidata.org
 * WikidataPageBanner
 * WikimediaApiPortal
 * WikimediaApiPortalOAuth
 * WikimediaBadges
 * WikimediaEditorTasks
 * WikimediaEvents
 * WikimediaIncubator
 * XAnalytics
 * cldr
 * intersection
 * timeline
 * wikihiero

Total changes
565 Changes in 81 repos by 98 authors