diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 78aa34d6bb..0000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: ''
-assignees: ''
-
----
-
-> Note: This repo is for the Python devguide. If you are requesting an
-enhancement for the Python language or CPython interpreter,
-then the CPython issue tracker is better
-suited for this report: https://github.com/python/cpython/issues
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots**
-If applicable, add screenshots to help explain your problem.
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 0000000000..b160c6ea11
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,39 @@
+name: "Bug report"
+description: Create a report to help us improve the Python devguide
+title: "Bug: <title>"
+labels: ["bug"]
+assignees: []
+
+body:
+  - type: markdown
+    attributes:
+      value: |
+        > [!NOTE]
+        > This repo is for the [Python developer's guide](https://devguide.python.org/).
+        > If you are reporting a bug for the Python language or
+        > CPython interpreter, then use the
+        > [CPython issue tracker](https://github.com/python/cpython/issues) instead.
+
+  - type: textarea
+    id: bug_description
+    attributes:
+      label: "Describe the bug"
+      description: A clear and concise description of what the bug is and, optionally, what you expected to happen.
+    validations:
+      required: true
+
+  - type: textarea
+    id: screenshots
+    attributes:
+      label: "Screenshots"
+      description: If applicable, add screenshots to help explain your problem.
+    validations:
+      required: false
+
+  - type: textarea
+    id: additional_context
+    attributes:
+      label: "Additional context"
+      description: Add any other context about the problem here.
+    validations:
+      required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000000..cd8c31d2a9
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,14 @@
+blank_issues_enabled: false
+contact_links:
+  - name: CPython Documentation
+    url: https://docs.python.org/
+    about: Official CPython documentation - please check here before opening an issue.
+  - name: Python Website
+    url: https://python.org/
+    about: For all things Python
+  - name: PyPI Issues / Support
+    url: https://github.com/pypi/support
+    about: For issues with PyPI itself, PyPI accounts, or with packages hosted on PyPI.
+  - name: CPython Issues
+    url: https://github.com/python/cpython/issues
+    about: For issues with the CPython interpreter itself.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index eff8cb8f7a..0000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: ''
-labels: ''
-assignees: ''
-
----
-
-> Note: This repo is for the Python devguide. If you are requesting an
-enhancement for the Python language or CPython interpreter,
-then the CPython issue tracker is better
-suited for this report: https://github.com/python/cpython/issues
-
-**Describe the enhancement or feature you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 0000000000..a4413c137a
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,39 @@
+name: "Feature request"
+description: Suggest an idea for the Python devguide
+title: "Feature: <title>"
+labels: ["enhancement"]
+assignees: []
+
+body:
+  - type: markdown
+    attributes:
+      value: |
+        > [!NOTE]
+        > This repo is for the [Python developer's guide](https://devguide.python.org/).
+        > If you are requesting an enhancement for the Python language or
+        > CPython interpreter, then use the
+        > [CPython issue tracker](https://github.com/python/cpython/issues) instead.
+
+  - type: textarea
+    id: feature_description
+    attributes:
+      label: "Describe the enhancement or feature you would like"
+      description: A clear and concise description of what you want to happen.
+    validations:
+      required: true
+
+  - type: textarea
+    id: alternatives
+    attributes:
+      label: "Describe alternatives you have considered"
+      description: A clear and concise description of any alternative solutions or features you have considered.
+    validations:
+      required: false
+
+  - type: textarea
+    id: additional_context
+    attributes:
+      label: "Additional context"
+      description: Add any other context or screenshots about the feature request here.
+    validations:
+      required: false
diff --git a/.ruff.toml b/.ruff.toml
index 550f27e614..af448e5b6e 100644
--- a/.ruff.toml
+++ b/.ruff.toml
@@ -1,4 +1,4 @@
-target-version = "py311"
+target-version = "py310"
 fix = true
 output-format = "full"
 line-length = 88
diff --git a/_tools/generate_release_cycle.py b/_tools/generate_release_cycle.py
index ed27424ddb..3a8fefec02 100644
--- a/_tools/generate_release_cycle.py
+++ b/_tools/generate_release_cycle.py
@@ -45,7 +45,7 @@ def __init__(self) -> None:
 
     def write_csv(self) -> None:
         """Output CSV files."""
-        now_str = str(dt.datetime.now(dt.UTC))
+        now_str = str(dt.datetime.now(dt.timezone.utc))
 
         versions_by_category = {"branches": {}, "end-of-life": {}}
         headers = None
diff --git a/conf.py b/conf.py
index 64d7c68b90..aed6592c38 100644
--- a/conf.py
+++ b/conf.py
@@ -67,6 +67,7 @@
     # Login page
     r"https://github.com/python/buildmaster-config/issues/new.*": r"https://github.com/login.*",  # noqa: E501
     r"https://github.com/python/core-workflow/issues/new.*": r"https://github.com/login.*",  # noqa: E501
+    r"https://github.com/orgs/python/teams.*": r"https://github.com/login.*",  # noqa: E501
     # Archive redirect
     r"https://github.com/python/cpython/archive/main.zip": r"https://codeload.github.com/python/cpython/zip/refs/heads/main",  # noqa: E501
     # Blob to tree
@@ -89,6 +90,13 @@
     r'\/.*',
 ]
 
+# Check the link itself, but ignore anchors that are added by JS
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-linkcheck_anchors_ignore_for_url
+linkcheck_anchors_ignore_for_url = [
+    # GitHub
+    r'https://github.com/.*',
+]
+
 linkcheck_ignore = [
     # The voters repo is private and appears as a 404
     'https://github.com/python/voters',
@@ -98,17 +106,14 @@
     'https://discuss.python.org/groups/staff',
     'https://discuss.python.org/groups/moderators',
     'https://discuss.python.org/groups/admins',
-    # The crawler gets "Anchor not found" for GitHub anchors
-    r'https://github.com.+?#L\d+',
-    r'https://github.com/cli/cli#installation',
-    r'https://github.com/github/renaming#renaming-existing-branches',
-    r'https://github.com/python/bedevere/#pr-state-machine',
     # "Anchor not found":
     r'https://packaging.python.org/.*#',
     # "-rate limited-", causing a timeout
     r'https://stackoverflow.com/.*',
     # Discord doesn't allow robot crawlers: "403 Client Error: Forbidden"
-    'https://support.discord.com/hc/en-us/articles/219070107-Server-Nicknames',
+    r'https://support.discord.com/hc/en-us/articles/219070107-Server-Nicknames',
+    # Patreon also gives 403 to the GHA linkcheck runner
+    r'https://www.patreon.com/.*',
 ]
 
 rediraffe_redirects = {
diff --git a/core-developers/developers.csv b/core-developers/developers.csv
index 3808e76c92..52bbf00dd0 100644
--- a/core-developers/developers.csv
+++ b/core-developers/developers.csv
@@ -1,3 +1,4 @@
+Matt Page,mpage,2024-10-10,,
 Kirill Podoprigora,Eclips4,2024-09-20,,
 Ned Batchelder,nedbat,2024-07-16,,
 Tian Gao,gaogaotiantian,2024-06-06,,
diff --git a/core-developers/motivations.rst b/core-developers/motivations.rst
index dfe41d5aeb..b805a7c67f 100644
--- a/core-developers/motivations.rst
+++ b/core-developers/motivations.rst
@@ -261,7 +261,7 @@ participating in the CPython core development process:
 
 .. topic:: Carol Willing (United States)
 
-   * Noteable: `<https://noteable.io/about-us/>`__ (VP Engineering)
+   * Noteable (VP Engineering)
    * Personal site: `Willing Consulting <https://www.willingconsulting.com/>`_
    * `Extended bio <https://www.willingconsulting.com/about/>`__
    * Project Jupyter (Software Council, Core Team for JupyterHub/Binder)
diff --git a/developer-workflow/communication-channels.rst b/developer-workflow/communication-channels.rst
index 60ba90339b..499ca9b964 100644
--- a/developer-workflow/communication-channels.rst
+++ b/developer-workflow/communication-channels.rst
@@ -263,7 +263,7 @@ Other core workflow tools are:
 * `blurb_it`_
 * `miss-islington`_
 * `cla-bot`_
-* `cpython-emailer-webhook`_
+* `webhook-mailer`_
 
 Python `Performance Benchmark`_ project is intended to be an authoritative
 source of benchmarks for all Python implementations.
@@ -274,5 +274,5 @@ source of benchmarks for all Python implementations.
 .. _blurb_it: https://github.com/python/blurb_it
 .. _miss-islington: https://github.com/python/miss-islington
 .. _cla-bot: https://github.com/ambv/cla-bot
-.. _cpython-emailer-webhook: https://github.com/berkerpeksag/cpython-emailer-webhook
+.. _webhook-mailer: https://github.com/python/webhook-mailer
 .. _Performance Benchmark: https://github.com/python/pyperformance
diff --git a/developer-workflow/development-cycle.rst b/developer-workflow/development-cycle.rst
index 9c156abbd5..c7cf6a8b2b 100644
--- a/developer-workflow/development-cycle.rst
+++ b/developer-workflow/development-cycle.rst
@@ -37,7 +37,7 @@ Branches
 --------
 
 There is a branch for each *feature version*, whether released or not (for
-example, 3.7, 3.8).
+example, 3.12, 3.13).
 
 
 .. _indevbranch:
@@ -51,13 +51,11 @@ changes, performance improvements, bug fixes.
 
 At some point during the life-cycle of a release, a
 new :ref:`maintenance branch <maintbranch>` is created to host all bug fixing
-activity for further micro versions in a feature version (3.8.1, 3.8.2, etc.).
+activity for further micro versions in a feature version (3.12.1, 3.12.2, and so
+on).
 
-For versions 3.4 and before, this was conventionally done when the final
-release was cut (for example, 3.4.0 final).
-
-Starting with the 3.5 release, we create the release maintenance branch
-(``3.5``) at the time we enter beta (3.5.0 beta 1).  This allows
+We create the release maintenance branch
+(``3.14``) at the time we enter beta (3.14.0 beta 1).  This allows
 feature development for the release 3.n+1 to occur within the main
 branch alongside the beta and release candidate stabilization periods
 for release 3.n.
@@ -79,7 +77,7 @@ releases; the terms are used interchangeably. These releases have a
 The only changes allowed to occur in a maintenance branch without debate are
 bug fixes, test improvements, and edits to the documentation.
 Also, a general rule for maintenance branches is that compatibility
-must not be broken at any point between sibling micro releases (3.5.1, 3.5.2,
+must not be broken at any point between sibling micro releases (3.12.1, 3.12.2,
 etc.).  For both rules, only rare exceptions are accepted and **must** be
 discussed first.
 
@@ -97,9 +95,9 @@ that maintenance branch.
 Sometime following the final release (3.x.0), the maintenance branch for
 the previous minor version will go into :ref:`security mode <secbranch>`,
 usually after at least one more bugfix release at the discretion of the
-release manager.  For example, the 3.4 maintenance branch was put into
-:ref:`security mode <secbranch>` after the 3.4.4 bugfix release
-which followed the release of 3.5.1.
+release manager.  For example, the 3.11 maintenance branch was put into
+:ref:`security mode <secbranch>` after the 3.11.9 bugfix release
+which followed the release of 3.12.2.
 
 .. _secbranch:
 
@@ -131,7 +129,7 @@ End-of-life branches
 The code base for a release cycle which has reached end-of-life status
 is frozen and no longer has a branch in the repo.  The final state of
 the end-of-lifed branch is recorded as a tag with the same name as the
-former branch, for example, ``3.3`` or ``2.6``.
+former branch, for example, ``3.8`` or ``2.7``.
 
 The :ref:`versions` page contains list of active and end-of-life branches.
 
@@ -347,7 +345,7 @@ Current administrators
 | Pablo Galindo     | Python 3.10 and 3.11 Release Manager,                    | pablogsal       |
 |                   | Maintainer of buildbot.python.org                        |                 |
 +-------------------+----------------------------------------------------------+-----------------+
-| Łukasz Langa      | Python 3.8 and 3.9 Release Manager,                      | ambv            |
+| Łukasz Langa      | Python 3.9 Release Manager,                              | ambv            |
 |                   | PSF CPython Developer in Residence 2021-present          |                 |
 +-------------------+----------------------------------------------------------+-----------------+
 | Brett Cannon      |                                                          | brettcannon     |
diff --git a/developer-workflow/extension-modules.rst b/developer-workflow/extension-modules.rst
index 118fe02d23..7e32283c2e 100644
--- a/developer-workflow/extension-modules.rst
+++ b/developer-workflow/extension-modules.rst
@@ -31,7 +31,7 @@ Extension modules can be classified into two categories:
 
 * A *built-in* extension module is a module built and shipped with
   the Python interpreter. A built-in module is *statically* linked
-  into the interpreter, thereby lacking a :attr:`__file__` attribute.
+  into the interpreter, thereby lacking a :attr:`!__file__` attribute.
 
   .. seealso:: :data:`sys.builtin_module_names` --- names of built-in modules.
 
@@ -41,7 +41,7 @@ Extension modules can be classified into two categories:
 * A *shared* (or *dynamic*) extension module is built as a shared library
   (``.so`` or ``.dll`` file) and is *dynamically* linked into the interpreter.
 
-  In particular, the module's :attr:`__file__` attribute contains the path
+  In particular, the module's :attr:`!__file__` attribute contains the path
   to the ``.so`` or ``.dll`` file.
 
   Shared modules are built with the :c:macro:`!Py_BUILD_CORE_MODULE`
@@ -75,7 +75,7 @@ with the following :func:`!foo.greet` function:
 
 Instead of using the Python implementation of :func:`!foo.greet`, we want to
 use its corresponding C extension implementation exposed in the :mod:`!_foo`
-module. Ideally, we want to modify :cpy-file:`!Lib/foo.py` as follows:
+module. Ideally, we want to modify ``Lib/foo.py`` as follows:
 
 .. code-block:: python
    :caption: Lib/foo.py
diff --git a/developer-workflow/lang-changes.rst b/developer-workflow/lang-changes.rst
index 70ecd679d9..52aabb15dd 100644
--- a/developer-workflow/lang-changes.rst
+++ b/developer-workflow/lang-changes.rst
@@ -45,7 +45,7 @@ The `Ideas Discourse category`_
 is specifically intended for discussion of new features and language changes.
 Please don't be disappointed if your idea isn't met with universal approval:
 as the :pep:`long list of Withdrawn and Rejected PEPs
-<0#abandoned-withdrawn-and-rejected-peps>`
+<0#rejected-superseded-and-withdrawn-peps>`
 in the :pep:`PEP Index <0>` attests,
 and as befits a reasonably mature programming language,
 getting significant changes into Python isn't a simple task.
diff --git a/getting-started/git-boot-camp.rst b/getting-started/git-boot-camp.rst
index f28ebefbce..15952d6bd2 100644
--- a/getting-started/git-boot-camp.rst
+++ b/getting-started/git-boot-camp.rst
@@ -341,7 +341,7 @@ example, backports to other branches), so this features is only useful if
 you know for sure that a single PR is enough to address and close the issue.
 
 .. _bedevere: https://github.com/python/bedevere
-.. _special keywords: https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword
+.. _special keywords: https://docs.github.com/en/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword
 
 Updating your CPython fork
 --------------------------
diff --git a/getting-started/setup-building.rst b/getting-started/setup-building.rst
index 4f7478dbce..8c55bc625a 100644
--- a/getting-started/setup-building.rst
+++ b/getting-started/setup-building.rst
@@ -47,7 +47,7 @@ itself. Git is easily available for all common operating systems.
   or the `Git project instructions <https://git-scm.com>`_ for step-by-step
   installation directions. You may also want to consider a graphical client
   such as `TortoiseGit <https://tortoisegit.org/>`_ or
-  `GitHub Desktop <https://desktop.github.com/>`_.
+  `GitHub Desktop <https://github.com/apps/desktop>`_.
 
 - **Configure**
 
@@ -116,8 +116,8 @@ in the ``cpython`` directory and two remotes that refer to your own GitHub fork
 
 If you want a working copy of an already-released version of Python,
 that is, a version in :ref:`maintenance mode <maintbranch>`, you can checkout
-a release branch. For instance, to checkout a working copy of Python 3.8,
-do ``git switch 3.8``.
+a release branch. For instance, to checkout a working copy of Python 3.13,
+do ``git switch 3.13``.
 
 You will need to re-compile CPython when you do such an update.
 
@@ -730,9 +730,9 @@ some of CPython's modules (for example, ``zlib``).
                ./configure --with-pydebug \
                            --with-openssl="$(brew --prefix openssl@3)"
 
-      .. tab:: Python 3.8-3.10
+      .. tab:: Python 3.9-3.10
 
-         For Python 3.8, 3.9, and 3.10::
+         For Python 3.9 and 3.10::
 
             $ CPPFLAGS="-I$(brew --prefix gdbm)/include -I$(brew --prefix xz)/include" \
                LDFLAGS="-L$(brew --prefix gdbm)/lib -L$(brew --prefix xz)/lib" \
diff --git a/internals/garbage-collector.rst b/internals/garbage-collector.rst
index 166a4eb5ab..acbcedf0e8 100644
--- a/internals/garbage-collector.rst
+++ b/internals/garbage-collector.rst
@@ -10,4 +10,3 @@ Garbage collector design
 
 This document is now part of the
 `CPython Internals Docs <https://github.com/python/cpython/blob/main/InternalDocs/garbage_collector.md>`_.
-
diff --git a/testing/buildbots.rst b/testing/buildbots.rst
index 38e6063647..22962faaf6 100644
--- a/testing/buildbots.rst
+++ b/testing/buildbots.rst
@@ -223,37 +223,5 @@ and unpredictable, the issue should be reported on the bug tracker; even
 better if it can be diagnosed and suppressed by fixing the test's
 implementation, or by making its parameters - such as a timeout - more robust.
 
-
-Custom builders
-===============
-
-.. highlight:: console
-
-When working on a platform-specific issue, you may want to test your changes on
-the buildbot fleet rather than just on GitHub Actions and Azure Pipelines.  To do so, you can
-make use of the `custom builders
-<https://buildbot.python.org/all/#/builders?tags=%2Bcustom>`_.
-These builders track the ``buildbot-custom`` short-lived branch of the
-``python/cpython`` repository, which is only accessible to core developers.
-
-To start a build on the custom builders, push the commit you want to test to
-the ``buildbot-custom`` branch::
-
-   $ git push upstream <local_branch_name>:buildbot-custom
-
-You may run into conflicts if another developer is currently using the custom
-builders or forgot to delete the branch when they finished.  In that case, make
-sure the other developer is finished and either delete the branch or force-push
-(add the ``-f`` option) over it.
-
-When you have gotten the results of your tests, delete the branch::
-
-   $ git push upstream :buildbot-custom     # or use the GitHub UI
-
-If you are interested in the results of a specific test file only, we
-recommend you change (temporarily, of course) the contents of the
-``buildbottest`` clause in ``Makefile.pre.in``; or, for Windows builders,
-the ``Tools/buildbot/test.bat`` script.
-
 .. seealso::
    :ref:`buildworker`
diff --git a/triage/issue-tracker.rst b/triage/issue-tracker.rst
index a38e8d9e01..63076e7a19 100644
--- a/triage/issue-tracker.rst
+++ b/triage/issue-tracker.rst
@@ -159,6 +159,6 @@ reason either as ``complete`` or ``not planned``.
 .. _Python Discourse: https://discuss.python.org/
 .. _autolinks: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/autolinked-references-and-urls
 .. _checklists: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/about-task-lists
-.. _duplicates: https://docs.github.com/en/issues/tracking-your-work-with-issues/marking-issues-or-pull-requests-as-a-duplicate
+.. _duplicates: https://docs.github.com/en/issues/tracking-your-work-with-issues/administering-issues/marking-issues-or-pull-requests-as-a-duplicate
 .. _Core Development Discourse category: https://discuss.python.org/c/core-dev/23
 .. _old bug tracker: https://bugs.python.org/
diff --git a/triage/labels.rst b/triage/labels.rst
index b75f757213..c2981f666d 100644
--- a/triage/labels.rst
+++ b/triage/labels.rst
@@ -147,9 +147,10 @@ to trigger specific bot behaviors.
   by these labels.
   See also :ref:`the status of the Python branches <branchstatus>` for a list
   of branches and the type of PRs that can be backported to them.
-* :gh-label:`skip issue`: for trivial changes (such as typo fixes, comment
+* :gh-label:`skip issue <skip%20issue>`: for trivial changes (such as
+  typo fixes, comment
   changes, and section rephrases) that don't require a corresponding issue.
-* :gh-label:`skip news`: for PRs that don't need a NEWS entry.
+* :gh-label:`skip news <skip%20news>`: for PRs that don't need a NEWS entry.
   The :ref:`news-entry` section covers in details in which cases the NEWS entry
   can be skipped.
 * :gh-label:`test-with-buildbots`: used to test the latest commit with