MediaWiki 1.39/wmf.12/Changelog

Core changes

 * - Branch commit for wmf/1.39.0-wmf.12 by trainbranchbot
 * - mediawiki.less: Deprecate useless mixins by Ed Sanders
 * - Remove CSS vendor prefixes no longer required   by Ed Sanders
 * - TempUser: ScrambleMapping by Tim Starling
 * - ApiQueryBacklinksprop: Make sure the index setting exists by Amir Sarabadani
 * - objectcache: document BagOStuff and WANObjectCache as `@newable` by Timo Tijhof
 * - Add data-parsoid data to ParserOutput for caching by Derick Alangi
 * - SessionManager: stop storing an ObjectFactory instance by Alexander Vorwerk
 * - Revert "ResourceLoader namespace" by Lucas Werkmeister (WMDE)
 * - ApiQueryBacklinksprop: Force the correct templatelinks index on read new by Amir Sarabadani
 * - Support placeholder in OOUI HTMLComboboxField by Lucas Werkmeister
 * - ResourceLoader namespace by Tim Starling
 * - UrlUtilsProviders::provideExpand: use cartesian product by Tim Starling
 * - UrlUtils: Simplify and increase test coverage by Timo Tijhof
 * - Fix silently skipped UrlUtilsTest by Tim Starling
 * - RELEASE-NOTES-1.39: Don't list MySQL alongside MariaDB, it's not actually tested by James D. Forrester
 * - installer: Require MySQL 5.7+ or MariaDB 10.3+, and distinguish in docs  by James D. Forrester
 * - tests: Pass context to HTMLForm constructor by Bartosz Dziewoński
 * - specials: Use setTitle on GET forms to strip subpage everywhere by Bartosz Dziewoński
 * - import: Soft-deprecate WikiRevision::getUserObj and related methods by Thiemo Kreuz
 * - import: Fix incomplete type hint for WikiRevision::getUserObj by Thiemo Kreuz
 * - qunit: Micro-optim for testrunner $(document) and mw.log by Timo Tijhof
 * - qunit: Improve dangling animation and ajax detection by Timo Tijhof
 * - qunit: Remove module monkey-patch and use QUnit.hooks instead. by Timo Tijhof
 * - qunit: Remove custom QUnit 1.x setup/teardown aliases by Timo Tijhof
 * - Fix typo in "overridden" by Matěj Suchánek
 * - qunit: Remove use of QUnit 1.x setup/teardown by Timo Tijhof
 * - Allow AuthenticationResponse to store private failure reasons by dreamyjazz
 * - Remove the deprecated MWNamespace class by Alexander Vorwerk
 * - ParserObserver: Only report duplicate parse if the content is the same by Bartosz Dziewoński
 * - Fix help message for "Recent changes → Use non-JavaScript interface" preference by Bartosz Dziewoński
 * - RestrictionStore: Add support for templatelinks migration by Amir Sarabadani
 * - mediawiki.skinning: Make accessibility rules module universal to skins by Jon Robson
 * - poolcounter: Avoid calling parent::doWork in PoolWorkArticleView classes by Thiemo Kreuz
 * - Remove hiding of extra namespace checkboxes on legacy watchlist and RC by Bartosz Dziewoński
 * - SpecialWhatLinksHere: Convert form to use HTMLForm by Bartosz Dziewoński
 * - Support namespace dropdown 'in-user-lang' option in HTMLForm and OOUI widget by Bartosz Dziewoński
 * - SpecialContributions: Use standard method for hiding fields by Bartosz Dziewoński
 * - Update Codex from v0.1.0-alpha.5 to v0.1.0-alpha.6 by Roan Kattouw
 * - Setup.php: Remove internal use of $IP by Timo Tijhof
 * - Make SpecialPageAliasTest more strict by Thiemo Kreuz
 * - Add optional link to project talk page next to a skin's listing by Nicholas Ray
 * - Improve warning text in message "fileexist" by Stang
 * - Bury the reset preferences link by Tim Starling
 * - resourceloader: Hoist constructor and common methods in ResourceLoader.php by Timo Tijhof
 * - Remove access to config globals from includes/exception by daniel
 * - Config schema: add notice to generated files. by daniel
 * - ApiQueryInfo: Force PRIMARY index on templatelinks by Amir Sarabadani
 * - Skip some SearchEngineTest/SpecialSearchTest tests on SQLite by Kosta Harlan
 * - rdbms: Replace getConnection with getLazyConnectionRef by Amir Sarabadani
 * - Sync up with Parsoid parserTests files by Arlo Breault
 * - maintenance: Don't run unsafe shutdown after crash by Timo Tijhof
 * - Match Parsoid output for bad images in galleries by Arlo Breault
 * - rdbms: Move out more functions from Database to SQLPlatform by Amir Sarabadani
 * - Support unlinked media |link=| in gallery by Arlo Breault
 * - Remove redundant calls to add(External)Link by Arlo Breault
 * - Use Linker::getImageLinkMTOParams for galleries by Arlo Breault
 * - Language: Inject NamespaceInfo by Bartosz Dziewoński
 * - resourceloader: Change "uz" locale of moment.js to "uz-latn" by Amir E. Aharoni
 * - Remove hardcoded number from MediaWiki:Searchlimit-help/en by joseph emmanuel kayode (iemarjay)
 * - Make "username" spelling consistent in messages by Amir E. Aharoni
 * - Extend findMissingActors to fix broken actors with empty actor_name by Func
 * - Add jps as a recognized alias of jpg files by Derk-Jan Hartman
 * - Treat file |link= options like wikilinks in terms of title attributes by Arlo Breault
 * - wikipage: Remove usage of protection related deprecated Title function by Umherirrender
 * - Use injection for LinksMigration on LinkBatch, action, api, special page by Umherirrender
 * - MediaSearchWidget should declare an explicit dependency on mediawiki.user module by Jack Phoenix
 * - Fix many typos in comments by Matěj Suchánek
 * - OutputPage: Handle language variants in getUnprefixedDisplayTitle by bhsd
 * - AutoLoader: provide methods for registering classes by daniel
 * - objectcache: lower SerializedValueContainer call overhead by Aaron Schulz
 * - Split out slow ScopeStructureTest for easier paratest parallelization by Aaron Schulz
 * - TempUser CentralAuth integration by Tim Starling
 * - objectcache: disable key segmentation for apcu by Aaron Schulz
 * - Remove references to legacy page_restrictions field in page table by Amir Sarabadani
 * - DeletePage: Show warning when assoc talk page has subpages by Dayllan Maza
 * - objectcache: reduce function_exists calls in SqlBagOStuff by Aaron Schulz
 * - Accomodate a future change to config information in the ParserTest class by C. Scott Ananian
 * - rdbms: Normalize DBTransactionSizeError message by Amir Sarabadani
 * - mw.htmlform: Load OOUI modules required to check conditional hide/disable by Bartosz Dziewoński
 * - UserAuthority: Fix wikitext escaping for block errors by Taavi Väänänen
 * - Add partial support for running Parsoid selser tests by Subramanya Sastry
 * - Add support for Parsoid html2wt & html2html testing modes by Subramanya Sastry
 * - Revision: Log traces as 'exception.trace' instead of 'trace' by Timo Tijhof

Vendor

 * - Bump parsoid to 0.16.0-a8            by Arlo Breault
 * - Re-build with composer v2.3.3 and request users stick to it by James D. Forrester

AbuseFilter

 * - AbuseFilterViewDiff: simplifications to prepare for refactor by DannyS712

ArticlePlaceholder

 * - Update .phan/config.php for Wikibase stub changes by Lucas Werkmeister

Babel

 * - tests: Remove references to legacy page_restrictions field in page table by Amir Sarabadani

BetaFeatures

 * - tests: Pass context to HTMLForm constructor by Bartosz Dziewoński

CentralAuth

 * - tests: Minor clean up by Timo Tijhof
 * - tests: Remove use of QUnit 1.x setup/teardown by Timo Tijhof
 * - Consistent spelling of "username" by Amir E. Aharoni

CentralNotice

 * - tests: Remove use of QUnit 1.x setup/teardown by Timo Tijhof

CheckUser

 * - Consistent spelling of "username" by Amir E. Aharoni
 * - tests: Mock db platform by Amir Sarabadani
 * - Improve timestamp handling for postgres by Umherirrender
 * - Hooks.php: Fix paths for SQLite by Reedy

CirrusSearch

 * - First pass at removing obvious Type usages by David Causse
 * - Remove unused oggthumblocation variable by Derk-Jan Hartman
 * - Prevent pathological wildcard queries to reach the backend by David Causse
 * - Default shard counts to 1 by Erik Bernhardson

Cite

 * - parser tests: Make `!! config` values JSON-compatible by C. Scott Ananian
 * - Sync up with Parsoid citeParserTests.txt by Subramanya Sastry

cldr

 * - Add autonym for Hadza by Raymond

ConfirmEdit

 * - tests: Pass context to HTMLForm constructor by Bartosz Dziewoński

ContentTranslation

 * - SX block template adaptation: Support different availability levels by NikG
 * - Allow restoring translations with invalid templates  by Santhosh Thottingal
 * - Limit the CX entrypoints to ES6 only browsers by Santhosh Thottingal
 * - Use appendChild instead of append to avoid browser compatibility issues by Santhosh Thottingal
 * - CX: Register module to add "Translate" page quick action inside ULS by NikG
 * - MWExpandableContent SFC: Add check for contentRef on window resize by NikG
 * - CX3 Build 0.2.0+20220516    by Santhosh Thottingal
 * - mffrequentlanguages entryopoint: Handle the case of undefined deviceLanguage  by Santhosh Thottingal
 * - SXPublisher: Fix expected publishing result message for lead sections by NikG
 * - tests: Simplify with built-in test.each and assert.rejects by Timo Tijhof
 * - tests: Remove use of QUnit 1.x setup/teardown by Timo Tijhof
 * - Consistent spelling of "username" by Amir E. Aharoni
 * - SX block templates: Fix spinner to be displayed until translation is loaded by NikG
 * - SX Dashboard: Fix refresh button to work after multiple clicks by NikG
 * - SX sentence translation: Enforce MT to retain spaces after full stops by NikG
 * - SX: Fix edit summary for lead sections by NikG

DiscussionTools

 * - Remove code for handling legacy HTML with data-mw-comment-name by Ed Sanders
 * - Fix error message when trying to reply to transcluded comment on a protected page by Bartosz Dziewoński
 * - Redesign "new comments" warning by Ed Sanders
 * - Fix reply links sometimes not working after visiting action=edit&section=new with new topic tool enabled by Bartosz Dziewoński
 * - ReplyWidget: Fix 'returntoquery' handling for anon links by Bartosz Dziewoński
 * - Add missing 'undo' button on mobile by Ed Sanders

DonationInterface

 * - get the error parameters without relay on ffname by wfan
 * - Skeleton files for Braintree by jgleeson
 * - Add validation to employers field with test by Damilare Adedoyin
 * - Add PayPal countries, sort Ingenico countries by Elliott Eggleston
 * - Simpler function to build payments form URLs by Elliott Eggleston
 * - Stop using deprecated Hooks::register by Elliott Eggleston
 * - Short-circuit Adyen JS on ResultSwitcher by Elliott Eggleston
 * - Tiebreaker rules for gateways by Elliott Eggleston
 * - Stop overwriting countries files when running tests by Elliott Eggleston
 * - Re-hide extra Visa logo by Elliott Eggleston
 * - Allow specifying min/max amount in any currency by Elliott Eggleston
 * - Combined gateway countries and tests by Damilare Adedoyin
 * - Test cases for all available gateway from form chooser by wfan
 * - Remove unused getBasedir function by Elliott Eggleston
 * - Factory method for ConfigurationReader by Elliott Eggleston

Echo

 * - Don't change width of Vector when more than 0 notifications by Jon Robson
 * - tests: Use native QUnit.test.each, ES5, and other cleanups by Timo Tijhof
 * - tests: Remove use of QUnit 1.x setup/teardown by Timo Tijhof
 * - Use watchlist-progressive icon for WatchlistChangePresentationModel by Kosta Harlan
 * - WatchlistChangePresentationModel: Place in "message" section by Kosta Harlan
 * - build: Update stylelint-config-wikimedia to 0.13.0 by Ed Sanders
 * - eslint: Use .eslintignore by Ed Sanders

EventLogging

 * - Do not throw when navigator.sendBeacon is not a fn by Sam Smith
 * - Integrate mediawiki/libs/metrics-platform  by Sam Smith

ExtensionDistributor

 * - Providers: Use HttpRequestFactory service instead of `Http::class` by Derick Alangi

FileImporter

 * - Fix bogus user object creation in WikiRevisionFactory by Thiemo Kreuz

FlaggedRevs

 * - FlaggablePageView: Use DifferenceEngine helper methods by Bartosz Dziewoński
 * - FlaggablePageView: Remove some unused code by Bartosz Dziewoński
 * - Fix incomplete FlaggedRevs::binaryFlagging implementation by Thiemo Kreuz
 * - Test more level names for getLevels by Adam Wight

Flow

 * - Consistent spelling of "username" by Amir E. Aharoni

GeoData

 * - build: Bump eslint-config-wikimedia to 0.22.1 by WMDE-Fisch
 * - Use actual `const` for class constant in Coord class by Thiemo Kreuz
 * - Make Globe class testable and streamline code a bit by Thiemo Kreuz
 * - Make Math algorithms more robust and add tests by Thiemo Kreuz
 * - Avoid count when the actual count is not needed by Thiemo Kreuz
 * - Simplify user-defined sorting functions by Thiemo Kreuz

GlobalBlocking

 * - Consistent spelling of "username" by Amir E. Aharoni

GrowthExperiments

 * - Lowercase in an action message by Amir E. Aharoni
 * - Comunity configuration: add --create-only option to changeWikiConfig.php by Gergő Tisza
 * - Translate Special:ManageMentors to Czech by Martin Urbanec
 * - tests: Remove use of QUnit 1.x setup/teardown by Timo Tijhof
 * - Campaign templates: allow to configure benefits list text by Sergio Gimeno
 * - Introduce campaign templates by Gergő Tisza
 * - Account creation: allow campaign configuration via GECampaigns option by Sergio Gimeno
 * - SpecialQuitMentorship: Only enable when wikitext mentor provider is in use by Martin Urbanec
 * - Add Special:ManageMentors by Martin Urbanec
 * - Include ext.growthExperiments.DataStore as a dependency of ext.growthExperiments.Help by MewOphaswongse
 * - Suggested edits: update footer background color for LastDayEditsWidget by MewOphaswongse
 * - Vue migration: setup linters and jest unit tests by Sergio Gimeno
 * - Use constants instead of strings for identifying MentorProviders by Martin Urbanec
 * - Account creation: add thank you landing pages by Sergio Gimeno
 * - HomepageHooks: Utilize 'use' statements for all namespaced code by Kosta Harlan
 * - Remove GEHomepageSuggestedEditsTopicsRequiresOptIn by Kosta Harlan
 * - Remove unused GEHomepageSuggestedEditsRequiresOptIn config by Kosta Harlan
 * - Use constants from ext.growthExperiments.DataStore instead of requiring virtual files directly by MewOphaswongse
 * - Community configuration: Use merge strategies by Gergő Tisza
 * - Suggested edits: always output config vars needed by ext.growthExperiments.DataStore by MewOphaswongse
 * - Send sections_to_exclude in the POST body by Gergő Tisza
 * - Change how suggested edits is set up in ext.growthExperiments.Homepage.mobile by MewOphaswongse
 * - selenium: Wait for elements to exist by Kosta Harlan
 * - Post-edit dialog: show the full task feed by MewOphaswongse
 * - Suggested edits: move non-UI logic out of ext.growthExperiments.Homepage.SuggestedEdits by MewOphaswongse
 * - Re-add RC tags Selenium test by Gergő Tisza
 * - Post edit: avoid title overflow for long article name by Sergio Gimeno
 * - Welcome emails: Open privacy footer links in new tab by Gergő Tisza

IPInfo

 * - Remove AdHocDebug from IPInfo by AnaïsGueyte
 * - Fix documentation for generatePropertyMarkup in IPInfo widget by Thalia
 * - Parse preferences messages so links can be displayed by Thalia
 * - Update ipinfo-preference-enable by AnaïsGueyte

Kartographer

 * - Skip rendering empty when no caption is given by Thiemo Kreuz
 * - Duplicate "latest revision may be special" logic from FlaggedRevs by Thiemo Kreuz
 * - Show articles by relevance instead of geographical distance by WMDE-Fisch

Linter

 * - Revert "Add linter category for "inline-media-caption"" by Arlo Breault

MobileFrontend

 * - Fix search result ordering by Mormegil
 * - Remove comma splice from a message by Amir E. Aharoni
 * - Toggler: Fix revealing sections with special characters like `"` `,` `(`   by Bartosz Dziewoński

MultimediaViewer

 * - tests: Minor clean up of mmv.ui.metadataPanel.js and other tests by Timo Tijhof
 * - tests: Make mmv.ui.metadataPanel.js pass with non-English locale by Timo Tijhof
 * - tests: Remove use of QUnit 1.x setup/teardown by Timo Tijhof

PageTriage

 * - ArticleCompile: Log trace as 'exception.trace' instead of 'trace' by Timo Tijhof

Popups

 * - Revert "Use null for default user options value of beta features" by Func

ProofreadPage

 * - Removes Page: pages VisualEditor by Tpt

RelatedArticles

 * - Pages that do not exist shouldn't output related articles by Jon Robson

Renameuser

 * - Consistent spelling of "username" by Amir E. Aharoni

Scribunto

 * - In tests, replace wgHooks with setTemporaryHook by Tim Starling
 * - Temporarily disable failing parser test by Bartosz Dziewoński
 * - Start namespacing extension by Reedy

SecurePoll

 * - Consistent spelling of "username" by Amir E. Aharoni

SimilarEditors

 * - Return data from MockSimilarEditorsClient::getSimilarEditors by Thalia
 * - Add $userText property to Neighbor by Thalia
 * - Fix documentation for Neighbor and TimeOverlap from int to float by Thalia

SpamBlacklist

 * - Replace "blacklist" with "block list" in messages by Amir E. Aharoni

TemplateData

 * - Streamline HTML rendering code for format messages by Thiemo Kreuz
 * - Add placeholder to avoid wikitext editor jumping down by Thiemo Kreuz

TimedMediaHandler

 * - Conditionally load ogvjs by Derk-Jan Hartman
 * - Updates for TMH readme by Derk-Jan Hartman
 * - Remove unused oggThumb by Derk-Jan Hartman
 * - Allow OgvJsSupport to check a specific element by Derk-Jan Hartman
 * - Add loop and muted attributes to the player by Derk-Jan Hartman

Translate

 * - Add PageDeleteLogger by Abijeet
 * - Reword messages to reduce translation ambuguity by Wangombe
 * - Exclude word 'days' from translation by Wangombe
 * - Add a check to ensure no division by zero by Wangombe
 * - Rename TranslateDeleteJob to TranslatableBundleDeleteJob by Abijeet
 * - Use SubpageListBuilder when deleting translatable pages by Abijeet
 * - Add SubpageListBuilder by Abijeet
 * - Rename PageTranslationLogFormatter to TranslatableBundleLogFormatter by Abijeet
 * - Add support to move Message bundles by Abijeet
 * - Add RevTagStore by Abijeet
 * - Add method to fetch subpages grouped by type by Abijeet
 * - Add interface TranslatableBundleStore and TranslatablePageStore by Abijeet

UploadWizard

 * - FlickrChecker,UploadWizardLicenseInput: Minor clean up of code and test files by Timo Tijhof
 * - tests: Remove use of QUnit 1.x setup/teardown by Timo Tijhof
 * - Revert "Consistent spelling of "username"" by Jforrester
 * - Consistent spelling of "username" by Amir E. Aharoni

VisualEditor

 * - Extract MWExpandableContentElement.onButtonClick method by Thiemo Kreuz
 * - ApiParsoidTrait: Log trace as 'exception.trace' instead of 'trace' by Timo Tijhof
 * - Update VE core submodule to master (f07b7e2cf)  by Bartosz Dziewoński
 * - Upstream teardown of saveDialog from DesktopArticleTarget to ArticleTarget by Ed Sanders
 * - Upstream isViewPage from DesktopArticleTarget to ArticleTarget by Ed Sanders
 * - Hide the floating help button on small screens by Andrew Kostka
 * - Follow-up I420bfcac8: Fix typo in loop by Ed Sanders
 * - Update VE core submodule to master (af608e441) by Bartosz Dziewoński
 * - [doc only] Update comment in ApiParsoidTrait which mentions renamed file by C. Scott Ananian
 * - Restore global context fiddling to fix FlaggedRevs edit notices and checkboxes by Bartosz Dziewoński
 * - Filter tags during parse, instead of save by Ed Sanders
 * - Rephrase messages about changes that will be lost by Amir E. Aharoni
 * - Update CSS to force word wrap in unused parameters button by Thiemo Kreuz

Wikibase

 * - REST: Create RequestBuilder by Jakob Warkotsch
 * - Update message "unconnectedpages-summary" by Stang
 * - eslint: Fix some jsdoc/ warnings by Ed Sanders
 * - eslint: Fix no-shadow warnings by Ed Sanders
 * - tests: Remove use of QUnit 1.x setup/teardown by Timo Tijhof
 * - REST: Add schema tests for GetItemStatement by Ollie Shotton
 * - REST: Extract shared schema test setup by Jakob Warkotsch
 * - REST: Respond with 404 if Statement not found by Ollie Shotton
 * - REST: Add validation to GetItemStatement use case by Ollie Shotton
 * - REST: Add schema tests for GetItemStatements by Jakob Warkotsch
 * - REST: Use createRedirectForItem in GetItemTest by Jakob Warkotsch
 * - REST: Extract createRedirectForItem helper by Jakob Warkotsch
 * - REST: Extract shared ItemRedirectResponse class by Jakob Warkotsch
 * - REST: Handle redirects in GetItemStatementsRouteHandler by Jakob Warkotsch
 * - Consistent spelling of "username" by Amir E. Aharoni
 * - phan: Remove stubs in favor of cloning dependencies in CI by Kosta Harlan
 * - FakeLoadBalancer: Override getConnectionInternal by Jakob Warkotsch
 * - REST: Handle redirects in GetItemStatements use case by Jakob Warkotsch
 * - REST: Check for PSR-4 violations with phpcs by Jakob Warkotsch
 * - REST: Fix namespace in DataAccess tests by Ollie Shotton
 * - REST: Handle unexpected errors in GetStatement by Jakob Warkotsch
 * - REST: Fix GetItemStatement use case factory name by Jakob Warkotsch
 * - REST: Create GetStatementRouteHandler by Ollie Shotton
 * - REST: Check item existence in GetItemStatements by sihe
 * - REST: Handle unexpected errors in GetItemStatements by Jakob Warkotsch
 * - REST: Add ADR 2 - Don't serialize in use cases by Jakob Warkotsch
 * - Assert that parser output without HTML has no text by Lucas Werkmeister

WikibaseCirrusSearch

 * - Remove reference to Elastica\Type by David Causse
 * - Update .phan/config.php for Wikibase stub changes by Lucas Werkmeister

WikibaseLexeme

 * - Use placeholders with example data in JS Special:NewLexemeAlpha  by Lucas Werkmeister
 * - Update messages for new lexeme placeholders  by Noa wmde
 * - Pass URL params into Special:NewLexemeAlpha app by Lucas Werkmeister
 * - tests: Remove use of QUnit 1.x setup/teardown by Timo Tijhof
 * - Extract helper function by Lucas Werkmeister
 * - Add language code also for non-value snaks on Special:NewLexeme by Michael Große
 * - Parse all url params on server by Michael Große
 * - Update .phan/config.php for Wikibase stub changes by Lucas Werkmeister
 * - Show suggested lexical category item IDs by Lucas Werkmeister
 * - Add lexical category suggestions to Special:NewLexemeAlpha by Lucas Werkmeister

WikibaseLexemeCirrusSearch

 * - Update .phan/config.php for Wikibase stub changes by Lucas Werkmeister

WikiEditor

 * - Realtime preview: Visual adjustments on handlebars by samtar

WikiLambda

 * - Add maintenance script to transform canonical lists into typed lists by gengh
 * - Move API request proccessing into ApiFunctionCall::makeRequest by James D. Forrester
 * - Replace SDAutocompleteSearchInput with Codex Lookup by Julia Kieserman
 * - switch 'show labels' box to CdxToggleButton by jkieserman
 * - Follow-up 252a1c8: Inject NamespaceInfo into Language constructors by James D. Forrester

WikimediaEvents

 * - DesktopUIActions/MobileUIActions: add pageToken field by David Lynch
 * - Add pageNamespace to Mobile & Desktop WebUIActions by jsn
 * - PageSplitter: Fix underlying bug in PageRandomGenerate by Timo Tijhof

WikimediaMessages

 * - wikimediaprojectnames: Don't call any wiki '… Wiki' by James D. Forrester
 * - wikibase-otherprojects: Add outreachwiki for Wikidata client listing by Stang
 * - Consistent spelling of "username" by Amir E. Aharoni
 * - Override IPInfo Legal Disclaimer by AnaïsGueyte
 * - Correction of project-localized-name-foundationwiki by Stang

Wikistories

 * - Remove unused 'repo' field by Stephane Bisson
 * - Add plural in message by Stephane Bisson
 * - Keep search results by Stephane Bisson
 * - Max text length by Stephane Bisson
 * - Restrict story creation to logged in users by Stephane Bisson
 * - Add image attribution info to story viewer by Eduardo
 * - Update npm and composer dependencies by Stephane Bisson
 * - Filter images from article based on size by Stephane Bisson
 * - Test: invalid story: file not found by Stephane Bisson
 * - Register image links by Stephane Bisson
 * - Validate that files used in story exist by Stephane Bisson

MinervaNeue

 * - tests: Minor clean up of in TitleUtil/UriUtil tests by Timo Tijhof
 * - tests: Remove use of QUnit 1.x setup/teardown by Timo Tijhof
 * - Minerva should respect reduces motion setting by Jon Robson
 * - Add block button to user namespace overflow by jsn
 * - Move dd scroll hack to .content scope by Ed Sanders

Vector

 * - styles: Replace deprecated Less `.transform` mixin with standard CSS by Volker E
 * - Move a max-width Less variable up into variables.less by Sam Wilson
 * - styles: Replace deprecated Less `.transition` mixin with standard CSS by Volker E
 * - Add message for the desktop improvements project's talk page by Nicholas Ray
 * - [Grid preparation] Add feature flag for grid by Jon Robson
 * - styles: Replace deprecated Less `.box-sizing` mixin with standard CSS by Volker E
 * - [Grid preparation] Use variables for selectors with state by Jon Robson
 * - Omit ArticleToolbar in Navigation when title above tabs by Jon Robson
 * - Add snapshot class to sticky header tests by bwang
 * - Hide gadget in beta cluster, update reporter by bwang
 * - Update package-lock, move peer deps into dev deps by bwang
 * - Fix personal tools navigation landmark label by bwang
 * - Create feature flag for VectorTitleAboveTabs feature by Jan Drewniak
 * - Simplify TOC spacing styles/logic by reusing the visible sticky header class by bwang

WikimediaApiPortal

 * - footer: Fix broken link by apaskulin

VisualEditor/VisualEditor

 * - Ensure mobile context appears above toolbar on mobile by Ed Sanders
 * - WindowManager: Simplify teardown by Ed Sanders
 * - Use equivalent colours at 50% opacity for block level backgrounds by Ed Sanders

No changes

 * 3D
 * ActiveAbstract
 * AdvancedSearch
 * AntiSpoof
 * ApiFeatureUsage
 * ArticleCreationWorkflow
 * BounceHandler
 * Calendar
 * Campaigns
 * Capiunto
 * CategoryTree
 * CharInsert
 * ChessBrowser
 * CiteThisPage
 * Citoid
 * CodeEditor
 * CodeMirror
 * CodeReview
 * Cognate
 * Collection
 * CologneBlue
 * CommonsMetadata
 * CongressLookup
 * ContactPage
 * CreditsSource
 * Dashiki
 * Disambiguator
 * DismissableSiteNotice
 * DoubleWiki
 * Elastica
 * ElectronPdfService
 * EntitySchema
 * EventBus
 * EventStreamConfig
 * ExternalGuidance
 * FeaturedFeeds
 * FileExporter
 * FundraiserLandingPage
 * FundraisingTranslateWorkflow
 * GWToolset
 * Gadgets
 * GeoCrumbs
 * GlobalCssJs
 * GlobalPreferences
 * GlobalUsage
 * GlobalUserPage
 * GlobalWatchlist
 * GoogleNewsSitemap
 * Graph
 * GuidedTour
 * ImageMap
 * InputBox
 * Insider
 * Interwiki
 * InterwikiSorting
 * Josa
 * JsonConfig
 * LabeledSectionTransclusion
 * LandingCheck
 * LdapAuthentication
 * LiquidThreads
 * Listings
 * LocalisationUpdate
 * LoginNotify
 * MachineVision
 * MapSources
 * MassMessage
 * Math
 * MediaModeration
 * MediaSearch
 * MobileApp
 * Modern
 * MonoBook
 * NavigationTiming
 * NearbyPages
 * NewUserMessage
 * Newsletter
 * Nostalgia
 * Nuke
 * OATHAuth
 * OAuth
 * OAuthRateLimiter
 * ORES
 * OpenStackManager
 * PageAssessments
 * PageImages
 * PageNotice
 * PageViewInfo
 * PagedTiffHandler
 * ParserFunctions
 * PdfHandler
 * Poem
 * PoolCounter
 * PropertySuggester
 * QuickSurveys
 * Quiz
 * RSS
 * ReadingLists
 * RevisionSlider
 * SandboxLink
 * Score
 * SearchExtraNS
 * SecureLinkFixer
 * ShortUrl
 * SiteMatrix
 * StopForumSpam
 * SubPageList3
 * SubpageSortkey
 * SyntaxHighlight_GeSHi
 * TemplateSandbox
 * TemplateStyles
 * TemplateWizard
 * TextExtracts
 * Thanks
 * TheWikipediaLibrary
 * Timeless
 * TitleBlacklist
 * TocTree
 * TorBlock
 * TranslationNotifications
 * TrustedXFF
 * TwoColConflict
 * UniversalLanguageSelector
 * UploadsLink
 * UrlShortener
 * VipsScaler
 * WebAuthn
 * WikiLove
 * WikibaseMediaInfo
 * WikibaseQualityConstraints
 * Wikidata.org
 * WikidataPageBanner
 * WikimediaApiPortalOAuth
 * WikimediaBadges
 * WikimediaEditorTasks
 * WikimediaIncubator
 * WikimediaMaintenance
 * Wikisource
 * XAnalytics
 * intersection
 * timeline
 * wikihiero

Total changes
345 Changes in 57 repos by 77 authors