jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1345968?usp=email )

Change subject: release: Prepare next release 11.9.0
......................................................................

release: Prepare next release 11.9.0

Change-Id: I7d29eec1242ff9e91b877b113140d9930ab642bb
---
M .github/workflows/doctest.yml
M .github/workflows/graalpy_tests.yml
M .github/workflows/login_tests-ci.yml
M .github/workflows/oauth_tests-ci.yml
M .github/workflows/pre-commit.yml
M .github/workflows/pywikibot-ci.yml
M .github/workflows/sysop_write_tests-ci.yml
M .github/workflows/windows_tests.yml
M .pre-commit-config.yaml
M HISTORY.rst
M ROADMAP.rst
M dev-requirements.txt
M pywikibot/__metadata__.py
M scripts/__init__.py
M scripts/commonscat.py
M scripts/pyproject.toml
16 files changed, 105 insertions(+), 97 deletions(-)

Approvals:
  jenkins-bot: Verified
  Xqt: Looks good to me, approved




diff --git a/.github/workflows/doctest.yml b/.github/workflows/doctest.yml
index e5b3104..e15a12d 100644
--- a/.github/workflows/doctest.yml
+++ b/.github/workflows/doctest.yml
@@ -20,7 +20,7 @@
 jobs:
   build:
     runs-on: ${{ matrix.os || 'ubuntu-latest' }}
-    timeout-minutes: 12
+    timeout-minutes: 16
     strategy:
       fail-fast: false
       matrix:
diff --git a/.github/workflows/graalpy_tests.yml 
b/.github/workflows/graalpy_tests.yml
index 30eeba5..412b628 100644
--- a/.github/workflows/graalpy_tests.yml
+++ b/.github/workflows/graalpy_tests.yml
@@ -21,7 +21,7 @@
   build:
     runs-on: ${{ matrix.os || 'ubuntu-latest' }}
     continue-on-error: ${{ matrix.experimental || false }}
-    timeout-minutes: 55
+    timeout-minutes: 40
     strategy:
       fail-fast: false
       matrix:
diff --git a/.github/workflows/login_tests-ci.yml 
b/.github/workflows/login_tests-ci.yml
index fc21905..1f14029 100644
--- a/.github/workflows/login_tests-ci.yml
+++ b/.github/workflows/login_tests-ci.yml
@@ -39,7 +39,7 @@
     name: Run Login/Logout Tests
     runs-on: ${{ matrix.os || 'ubuntu-latest' }}
     needs: wait_for_all
-    timeout-minutes: 40
+    timeout-minutes: 45
     strategy:
       fail-fast: false
       max-parallel: 1
diff --git a/.github/workflows/oauth_tests-ci.yml 
b/.github/workflows/oauth_tests-ci.yml
index 76671e0..aa14b95 100644
--- a/.github/workflows/oauth_tests-ci.yml
+++ b/.github/workflows/oauth_tests-ci.yml
@@ -21,7 +21,7 @@
   build:
     runs-on: ${{ matrix.os || 'ubuntu-latest' }}
     continue-on-error: ${{ matrix.experimental || false }}
-    timeout-minutes: 7
+    timeout-minutes: 6
     strategy:
       fail-fast: false
       matrix:
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 8ba3c80..96a423a 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -20,7 +20,7 @@
   pre-commit:
     runs-on: ${{ matrix.os || 'ubuntu-latest' }}
     continue-on-error: ${{ matrix.experimental || false }}
-    timeout-minutes: 7
+    timeout-minutes: 8
     strategy:
       fail-fast: false
       matrix:
diff --git a/.github/workflows/pywikibot-ci.yml 
b/.github/workflows/pywikibot-ci.yml
index e2fc925..1bc3e97 100644
--- a/.github/workflows/pywikibot-ci.yml
+++ b/.github/workflows/pywikibot-ci.yml
@@ -23,7 +23,7 @@
   build:
     runs-on: ${{ matrix.os || 'ubuntu-latest' }}
     continue-on-error: ${{ matrix.experimental || false }}
-    timeout-minutes: 65
+    timeout-minutes: 55
     strategy:
       fail-fast: false
       matrix:
diff --git a/.github/workflows/sysop_write_tests-ci.yml 
b/.github/workflows/sysop_write_tests-ci.yml
index fa421c5..2e0c85f 100644
--- a/.github/workflows/sysop_write_tests-ci.yml
+++ b/.github/workflows/sysop_write_tests-ci.yml
@@ -21,7 +21,7 @@
   build:
     runs-on: ubuntu-latest
     continue-on-error: ${{ matrix.experimental || false }}
-    timeout-minutes: 20
+    timeout-minutes: 25
     strategy:
       fail-fast: false
       matrix:
diff --git a/.github/workflows/windows_tests.yml 
b/.github/workflows/windows_tests.yml
index 859eda3..8877b83 100644
--- a/.github/workflows/windows_tests.yml
+++ b/.github/workflows/windows_tests.yml
@@ -21,7 +21,7 @@
   build:
     runs-on: windows-latest
     continue-on-error: ${{ matrix.experimental || false }}
-    timeout-minutes: 60
+    timeout-minutes: 55
     strategy:
       fail-fast: false
       matrix:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 3626540..23999e1 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -64,7 +64,7 @@
     hooks:
       - id: yamlfix
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.16.4
+    rev: v0.16.9
     hooks:
       - id: ruff-check
         alias: ruff
@@ -75,7 +75,7 @@
       - id: pyupgrade
         args: [--py39-plus]
   - repo: https://github.com/PyCQA/autoflake
-    rev: v2.3.3
+    rev: v2.4.0
     hooks:
       - id: autoflake
         args:
@@ -86,7 +86,7 @@
           - --remove-unused-variables
         exclude: ^pywikibot/backports\.py$
   - repo: https://github.com/PyCQA/isort
-    rev: 9.0.0b5
+    rev: 9.0.2
     hooks:
       - id: isort
         name: isort
@@ -101,7 +101,7 @@
       - id: docsig
         exclude: ^(tests|scripts)
   - repo: https://github.com/PyCQA/flake8
-    rev: 7.3.0
+    rev: 7.4.1
     hooks:
       - id: flake8
         args:
diff --git a/HISTORY.rst b/HISTORY.rst
index fcd35a7..7f576f7 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -1,6 +1,90 @@
 Release History
 ===============

+11.8.0
+------
+
+*29 September 2026*
+
+* Various performance, stability, and code quality improvements.
+* Raise ServerError instead of AssertionError for invalid 
:meth:`APISite.userinfo()
+  <pywikibot.site._apisite.APISite.userinfo>` API response. (:phab:`T423061`)
+* Load only current revision ID with :attr:`page.BasePage.latest_revision_id`.
+* Return non-option defaults with :func:`bot.input_list_choice`. 
(:phab:`T305937`)
+* Add 
:meth:`APISite.geosearch()<pywikibot.site._extensions.GeoDataMixin.geosearch>`
+  method. (:phab:`T438772`)
+* Preserve labels with different prefixes in :func:`textlib.replace_links`. 
(:phab:`T396719`)
+* Resolve :func:`i18n.bundles` paths from package.
+* Add :meth:`pywikibot.User.is_globally_blocked` and 
:meth:`APISite.is_globally_blocked()
+  <pywikibot.site._extensions.GlobalBlockingMixin.is_globally_blocked>` to 
support
+  :ext:`GlobalBlocking extension<GlobalBlocking/API#list=globalblocks_(bg)>`. 
(:phab:`T394628`)
+* Initialize the wrapped generator once per lifecycle with
+  :class:`tools.collections.GeneratorWrapper`.
+* Use ``functools.cache`` for :func:`date.escapePattern2`.
+* Avoid mutating request inputs in :func:`comms.http.fetch`.
+* Buffer :class:`textlib.GetDataHTML` output in 
:attr:`textlib.GetDataHTML.textdata`.
+* Short-circuit intersection cache checks in 
:func:`tools.itertools.intersect_generators`.
+* Add :ext:`PageViewInfo` extension support with 
:meth:`page.BasePage.pageviews`
+  and 
:class:`site.PageViewInfoMixin<pywikibot.site._extensions.PageViewInfoMixin>`.
+  (:phab:`T325473`)
+* Use plain dictionaries for Wikibase :class:`pywikibot.Claim` mappings.
+* Add :attr:`page.BasePage.flagged_state` and :meth:`APSite.flagged_state()
+  <pywikibot.site._extensions.FlaggedRevsMixin.flagged_state>` site method
+  for :ext:`FlaggedRevs` info. (:phab:`T410893`)
+* Disable ``maxlag`` for meta queries, paraminfo and help. (:phab:`T421642`)
+* Added Ukrainian Vikidia and updated testing subdomains for that family.
+* Correctly propagate reference group hashes after
+  :meth:`page.WikibaseEntity.editEntity`. (:phab:`T367324`)
+* Prevent recursive logging :func:`handler initialization<bot.init_handlers>`. 
(:phab:`T436130`)
+* Avoid duplicate revision updates and avoid constructing cached file revisions
+  again in :class:`FilePage<page.FilePage>`.
+* Stop pre-encoding API titles because :class:`data.api.Request` normalizes
+  byte parameters back to strings before serialization.
+* Isolate cached tables by server URL in :mod:`data.wikistats` module.
+* Exceptions from the :meth:`tools.threading.ThreadedGenerator.run` producer
+  are re-raised during iteration after yielding any queued results.
+* Release bounded capacity in 
:meth:`tools.threading.BoundedPoolExecutor.submit`
+  when submission fails with any Exception.
+* Avoid duplicate key evaluation in :func:`tools.itertools.filter_unique`.
+* Replace :func:`tools.strtobool` value checks with constant mapping.
+* Avoid unnecessary request if *total* is 0 in 
:meth:`Category.articles()<page.Category.articles>`.
+* Reject invalid :class:`tools.threading.ThreadList` limits.
+* Public *reason* and *comment* parameters used for page-action and upload
+  summaries were renamed to *summary*. The old parameter names remain
+  available as deprecated aliases. (:phab:`T62442`)
+* Cache valid site codes in :func:`titletranslate.translate`.
+* Normalize family aliases in :meth:`data.wikistats.WikiStats.get` before 
cache lookup.
+* Preserve Windows commands without a file placeholder in 
:class:`editor.TextEditor`.
+* Preserve existing endpoint query parameters in 
:meth:`data.sparql.SparqlQuery.query`.
+* Reset the retry counter for each query in :class:`data.sparql.SparqlQuery`.
+* Deduplicate intersections with a single input in 
:func:`tools.itertools.intersect_generators`.
+* Accept path-like filenames and detect suffixes case-insensitively in 
:func:`tools.open_archive`.
+* Add support for all existing Beta Cluster wikis. (:phab:`T225892`)
+* Support selective page preloading of :meth:`APISite.preloadpages
+  <pywikibot.site._generators.GeneratorsMixin.preloadpages>` with
+  :func:`pagegenerators.PreloadingGenerator` and 
:func:`pagegenerators.DequePreloadingGenerator`.
+* Apply title filters first in 
:meth:`pagegenerators.GeneratorFactory.getCombinedGenerator`
+  and avoid loading page data for titles rejected by title filters.
+* Support immutable sequences in :func:`data.api.encode_url`.
+* Clear bundle cache when switching packages with 
:func:`i18n.set_messages_package`.
+* Use pathlib for path containment in :func:`config.shortpath` and
+  :func:`version.get_module_filename`.
+* Add *depth* parameter to :func:`pagegenerators.PetScanPageGenerator`.
+* The :class:`specialbots.UploadRobot` class now cleans up temporary download 
files
+  after upload completion or failure, while preserving caller-provided local 
files.
+* Fix 
:meth:`APISite.loadrevisions<pywikibot.site._generators.GeneratorsMixin.loadrevisions>`
+  *step* handling.
+* Keep preload *groupsize* per site in 
:func:`pagegenerators.PreloadingGenerator`.
+* Preserve colliding intersection items without ``hash()`` in
+  :func:`tools.itertools.intersect_generators`.
+* :meth:`page.BasePage.get` no longer validates section fragments or raises
+  :exc:`exceptions.SectionError` for them, as the method always retrieves the 
complete
+  page text (:phab:`T422856`, :phab:`T422859`).
+* Update translations (i18n).
+* Add new :class:`family.WikimediaSubdomainFamily`.
+* Update documentation for :meth:`page.BasePage.exists`. (:phab:`T334341`)
+
+
 11.7.0
 ------
 *22 August 2026*
diff --git a/ROADMAP.rst b/ROADMAP.rst
index 012e334..0a674f2 100644
--- a/ROADMAP.rst
+++ b/ROADMAP.rst
@@ -1,83 +1,7 @@
-Release 11.8
+Release 11.9
 ============

-* Various performance, stability, and code quality improvements.
-* Raise ServerError instead of AssertionError for invalid 
:meth:`APISite.userinfo()
-  <pywikibot.site._apisite.APISite.userinfo>` API response. (:phab:`T423061`)
-* Load only current revision ID with :attr:`page.BasePage.latest_revision_id`.
-* Return non-option defaults with :func:`bot.input_list_choice`. 
(:phab:`T305937`)
-* Add 
:meth:`APISite.geosearch()<pywikibot.site._extensions.GeoDataMixin.geosearch>`
-  method. (:phab:`T438772`)
-* Preserve labels with different prefixes in :func:`textlib.replace_links`. 
(:phab:`T396719`)
-* Resolve :func:`i18n.bundles` paths from package.
-* Add :meth:`pywikibot.User.is_globally_blocked` and 
:meth:`APISite.is_globally_blocked()
-  <pywikibot.site._extensions.GlobalBlockingMixin.is_globally_blocked>` to 
support
-  :ext:`GlobalBlocking extension<GlobalBlocking/API#list=globalblocks_(bg)>`. 
(:phab:`T394628`)
-* Initialize the wrapped generator once per lifecycle with
-  :class:`tools.collections.GeneratorWrapper`.
-* Use ``functools.cache`` for :func:`date.escapePattern2`.
-* Avoid mutating request inputs in :func:`comms.http.fetch`.
-* Buffer :class:`textlib.GetDataHTML` output in 
:attr:`textlib.GetDataHTML.textdata`.
-* Short-circuit intersection cache checks in 
:func:`tools.itertools.intersect_generators`.
-* Add :ext:`PageViewInfo` extension support with 
:meth:`page.BasePage.pageviews`
-  and 
:class:`site.PageViewInfoMixin<pywikibot.site._extensions.PageViewInfoMixin>`.
-  (:phab:`T325473`)
-* Use plain dictionaries for Wikibase :class:`pywikibot.Claim` mappings.
-* Add :attr:`page.BasePage.flagged_state` and :meth:`APSite.flagged_state()
-  <pywikibot.site._extensions.FlaggedRevsMixin.flagged_state>` site method
-  for :ext:`FlaggedRevs` info. (:phab:`T410893`)
-* Disable ``maxlag`` for meta queries, paraminfo and help. (:phab:`T421642`)
-* Added Ukrainian Vikidia and updated testing subdomains for that family.
-* Correctly propagate reference group hashes after
-  :meth:`page.WikibaseEntity.editEntity`. (:phab:`T367324`)
-* Prevent recursive logging :func:`handler initialization<bot.init_handlers>`. 
(:phab:`T436130`)
-* Avoid duplicate revision updates and avoid constructing cached file revisions
-  again in :class:`FilePage<page.FilePage>`.
-* Stop pre-encoding API titles because :class:`data.api.Request` normalizes
-  byte parameters back to strings before serialization.
-* Isolate cached tables by server URL in :mod:`data.wikistats` module.
-* Exceptions from the :meth:`tools.threading.ThreadedGenerator.run` producer
-  are re-raised during iteration after yielding any queued results.
-* Release bounded capacity in 
:meth:`tools.threading.BoundedPoolExecutor.submit`
-  when submission fails with any Exception.
-* Avoid duplicate key evaluation in :func:`tools.itertools.filter_unique`.
-* Replace :func:`tools.strtobool` value checks with constant mapping.
-* Avoid unnecessary request if *total* is 0 in 
:meth:`Category.articles()<page.Category.articles>`.
-* Reject invalid :class:`tools.threading.ThreadList` limits.
-* Public *reason* and *comment* parameters used for page-action and upload
-  summaries were renamed to *summary*. The old parameter names remain
-  available as deprecated aliases. (:phab:`T62442`)
-* Cache valid site codes in :func:`titletranslate.translate`.
-* Normalize family aliases in :meth:`data.wikistats.WikiStats.get` before 
cache lookup.
-* Preserve Windows commands without a file placeholder in 
:class:`editor.TextEditor`.
-* Preserve existing endpoint query parameters in 
:meth:`data.sparql.SparqlQuery.query`.
-* Reset the retry counter for each query in :class:`data.sparql.SparqlQuery`.
-* Deduplicate intersections with a single input in 
:func:`tools.itertools.intersect_generators`.
-* Accept path-like filenames and detect suffixes case-insensitively in 
:func:`tools.open_archive`.
-* Add support for all existing Beta Cluster wikis. (:phab:`T225892`)
-* Support selective page preloading of :meth:`APISite.preloadpages
-  <pywikibot.site._generators.GeneratorsMixin.preloadpages>` with
-  :func:`pagegenerators.PreloadingGenerator` and 
:func:`pagegenerators.DequePreloadingGenerator`.
-* Apply title filters first in 
:meth:`pagegenerators.GeneratorFactory.getCombinedGenerator`
-  and avoid loading page data for titles rejected by title filters.
-* Support immutable sequences in :func:`data.api.encode_url`.
-* Clear bundle cache when switching packages with 
:func:`i18n.set_messages_package`.
-* Use pathlib for path containment in :func:`config.shortpath` and
-  :func:`version.get_module_filename`.
-* Add *depth* parameter to :func:`pagegenerators.PetScanPageGenerator`.
-* The :class:`specialbots.UploadRobot` class now cleans up temporary download 
files
-  after upload completion or failure, while preserving caller-provided local 
files.
-* Fix 
:meth:`APISite.loadrevisions<pywikibot.site._generators.GeneratorsMixin.loadrevisions>`
-  *step* handling.
-* Keep preload *groupsize* per site in 
:func:`pagegenerators.PreloadingGenerator`.
-* Preserve colliding intersection items without ``hash()`` in
-  :func:`tools.itertools.intersect_generators`.
-* :meth:`page.BasePage.get` no longer validates section fragments or raises
-  :exc:`exceptions.SectionError` for them, as the method always retrieves the 
complete
-  page text (:phab:`T422856`, :phab:`T422859`).
-* Update translations (i18n).
-* Add new :class:`family.WikimediaSubdomainFamily`.
-* Update documentation for :meth:`page.BasePage.exists`. (:phab:`T334341`)
+* (no changes yet)


 Deprecations
diff --git a/dev-requirements.txt b/dev-requirements.txt
index b3a7755..c68f0b1 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -6,7 +6,7 @@
 pytest-xvfb >= 3.1.1

 pre-commit >= 4.6.2; python_version > "3.9"
-coverage >= 7.15.4; python_version > "3.9"
+coverage >= 7.16.2; python_version > "3.9"
 coverage==7.10.7; python_version == "3.9"
 # required for coverage (T380697)
 tomli >= 2.4.1; python_version < "3.11"
diff --git a/pywikibot/__metadata__.py b/pywikibot/__metadata__.py
index 31fb95e..fdbd1c8 100644
--- a/pywikibot/__metadata__.py
+++ b/pywikibot/__metadata__.py
@@ -12,6 +12,6 @@
 from time import strftime


-__version__ = '11.8.0'
+__version__ = '11.9.0.dev0'
 __url__ = 'https://www.mediawiki.org/wiki/Manual:Pywikibot'
 __copyright__ = f'2003-{strftime("%Y")}, Pywikibot team'
diff --git a/scripts/__init__.py b/scripts/__init__.py
index ba81280..0e1a927 100644
--- a/scripts/__init__.py
+++ b/scripts/__init__.py
@@ -34,7 +34,7 @@
 from pathlib import Path


-__version__ = '11.8.0'
+__version__ = '11.9.0'

 #: defines the entry point for pywikibot-scripts package
 base_dir = Path(__file__).parent
diff --git a/scripts/commonscat.py b/scripts/commonscat.py
index 39f529f..87c0de6 100755
--- a/scripts/commonscat.py
+++ b/scripts/commonscat.py
@@ -469,8 +469,8 @@
         commonsSite = self.current_page.site.image_repository()
         commonsPage = pywikibot.Page(commonsSite, 'Category:' + name)

-        try:  # parse title (T26742)
-            str(commonsPage)
+        try:  # parse title (T267742)
+            str(commonsPage)  # noqa: B018
         except InvalidTitleError:
             return ''

diff --git a/scripts/pyproject.toml b/scripts/pyproject.toml
index a9bd93d..26f3deb 100644
--- a/scripts/pyproject.toml
+++ b/scripts/pyproject.toml
@@ -7,7 +7,7 @@

 [project]
 name = "pywikibot-scripts"
-version = "11.8.0"
+version = "11.9.0"

 authors = [
     {name = "xqt", email = "[email protected]"},
@@ -19,7 +19,7 @@
 readme = "scripts/README.rst"
 requires-python = ">=3.9.0"
 dependencies = [
-    "pywikibot >= 11.8.0",
+    "pywikibot >= 11.9.0",
     "langdetect",
     "mwparserfromhell",
     "pydot",

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1345968?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I7d29eec1242ff9e91b877b113140d9930ab642bb
Gerrit-Change-Number: 1345968
Gerrit-PatchSet: 1
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to