See :ref:`sqlite3-howto-row-factory` for more details.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Deleting the ``row_factory`` attribute is no longer allowed.
.. attribute:: text_factory
See :ref:`sqlite3-howto-encoding` for more details.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Deleting the ``text_factory`` attribute is no longer allowed.
.. attribute:: total_changes
See :ref:`sqlite3-howto-row-factory` for more details.
- .. versionchanged:: next
+ .. versionchanged:: 3.15
Deleting the ``row_factory`` attribute is no longer allowed.
#define PY_MINOR_VERSION 15
#define PY_MICRO_VERSION 0
#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_BETA
-#define PY_RELEASE_SERIAL 1
+#define PY_RELEASE_SERIAL 2
/* Version as a string */
-#define PY_VERSION "3.15.0b1+"
+#define PY_VERSION "3.15.0b2"
/*--end constants--*/
-# Autogenerated by Sphinx on Thu May 7 16:26:23 2026
+# Autogenerated by Sphinx on Tue Jun 2 18:28:34 2026
# as part of the release process.
module_docs = {
-# Autogenerated by Sphinx on Thu May 7 16:26:23 2026
+# Autogenerated by Sphinx on Tue Jun 2 18:28:34 2026
# as part of the release process.
topics = {
The match statement is used for pattern matching. Syntax:
match_stmt: 'match' subject_expr ":" NEWLINE INDENT case_block+ DEDENT
- subject_expr: `!star_named_expression` "," `!star_named_expressions`?
- | `!named_expression`
- case_block: 'case' patterns [guard] ":" `!block`
+ subject_expr: flexible_expression "," [flexible_expression_list [',']]
+ | assignment_expression
+ case_block: 'case' patterns [guard] ":" suite
Note:
Guards
------
- guard: "if" `!named_expression`
+ guard: "if" assignment_expression
A "guard" (which is part of the "case") must succeed for code inside
the "case" block to execute. It takes the form: "if" followed by an
'dict': r'''Dictionary displays
*******************
-A dictionary display is a possibly empty series of dict items
-(key/value pairs) enclosed in curly braces:
-
- dict_display: "{" [dict_item_list | dict_comprehension] "}"
- dict_item_list: dict_item ("," dict_item)* [","]
- dict_comprehension: dict_item comp_for
- dict_item: expression ":" expression | "**" or_expr
-
-A dictionary display yields a new dictionary object.
-
-If a comma-separated sequence of dict items is given, they are
-evaluated from left to right to define the entries of the dictionary:
-each key object is used as a key into the dictionary to store the
-corresponding value. This means that you can specify the same key
-multiple times in the dict item list, and the final dictionary’s value
-for that key will be the last one given.
-
-A double asterisk "**" denotes *dictionary unpacking*. Its operand
-must be a *mapping*. Each mapping item is added to the new
-dictionary. Later values replace values already set by earlier dict
-items and earlier dictionary unpackings.
+A *dictionary display* is a possibly empty series of *dict items*
+enclosed in curly braces. Each dict item is a colon-separated pair of
+expressions: the *key* and its associated *value*. For example:
+
+ >>> {1: 'one', 2: 'two'}
+ {1: 'one', 2: 'two'}
+
+At runtime, when a dictionary comprehension is evaluated, the
+expressions are evaluated from left to right. Each key object is used
+as a key into the dictionary to store the corresponding value. This
+means that you can specify the same key multiple times in the
+comprehension, and the final dictionary’s value for a given key will
+be the last one given. For example:
+
+ >>> {
+ ... 1: 'this will be overridden',
+ ... 2: 'two',
+ ... 1: 'also overridden',
+ ... 1: 'one',
+ ... }
+ {1: 'one', 2: 'two'}
+
+Instead of a key-value pair, a dict item may be an expression prefixed
+by a double asterisk "**". This denotes *dictionary unpacking*. At
+runtime, the expression must evaluate to a *mapping*; each item of the
+mapping is added to the new dictionary. As with key-value pairs, later
+values replace values already set by earlier items and unpackings.
+This may be used to override a set of defaults:
+
+ >>> defaults = {'color': 'blue', 'count': 8}
+ >>> overrides = {'color': 'yellow'}
+ >>> {**defaults, **overrides}
+ {'color': 'yellow', 'count': 8}
Added in version 3.5: Unpacking into dictionary displays, originally
proposed by **PEP 448**.
-A dict comprehension may take one of two forms:
-
-* The first form uses two expressions separated with a colon followed
- by the usual “for” and “if” clauses. When the comprehension is run,
- the resulting key and value elements are inserted in the new
- dictionary in the order they are produced.
-
-* The second form uses a single expression prefixed by the "**"
- dictionary unpacking operator followed by the usual “for” and “if”
- clauses. When the comprehension is evaluated, the expression is
- evaluated and then unpacked, inserting zero or more key/value pairs
- into the new dictionary.
-
-Both forms of dictionary comprehension retain the property that if the
-same key is specified multiple times, the associated value in the
-resulting dictionary will be the last one specified.
-
-Restrictions on the types of the key values are listed earlier in
-section The standard type hierarchy. (To summarize, the key type
-should be *hashable*, which excludes all mutable objects.) Clashes
-between duplicate keys are not detected; the last value (textually
-rightmost in the display) stored for a given key value prevails.
+The formal grammar for dict displays is:
-Changed in version 3.8: Prior to Python 3.8, in dict comprehensions,
-the evaluation order of key and value was not well-defined. In
-CPython, the value was evaluated before the key. Starting with 3.8,
-the key is evaluated before the value, as proposed by **PEP 572**.
-
-Changed in version 3.15: Unpacking with the "**" operator is now
-allowed in dictionary comprehensions.
+ dict: '{' [double_starred_kvpairs] '}'
+ double_starred_kvpairs: ','.double_starred_kvpair+ [',']
+ double_starred_kvpair: '**' or_expr | kvpair
+ kvpair: expression ':' expression
''',
'dynamic-features': r'''Interaction with dynamic features
*********************************
is the number of expressions in the list. The expressions are
evaluated from left to right.
-An asterisk "*" denotes *iterable unpacking*. Its operand must be an
-*iterable*. The iterable is expanded into a sequence of items, which
+A trailing comma is required only to create a one-item tuple, such as
+"1,"; it is optional in all other cases. A single expression without a
+trailing comma doesn’t create a tuple, but rather yields the value of
+that expression. (To create an empty tuple, use an empty pair of
+parentheses: "()".)
+
+
+Iterable unpacking
+==================
+
+In an expression list or tuple, list or set display, any expression
+may be prefixed with an asterisk ("*"). This denotes *iterable
+unpacking*.
+
+At runtime, the asterisk-prefixed expression must evaluate to an
+*iterable*. The iterable is expanded into a sequence of items, which
are included in the new tuple, list, or set, at the site of the
unpacking.
Added in version 3.11: Any item in an expression list may be starred.
See **PEP 646**.
-
-A trailing comma is required only to create a one-item tuple, such as
-"1,"; it is optional in all other cases. A single expression without a
-trailing comma doesn’t create a tuple, but rather yields the value of
-that expression. (To create an empty tuple, use an empty pair of
-parentheses: "()".)
''',
'floating': r'''Floating-point literals
***********************
| | is not supported. |
+-----------+------------------------------------------------------------+
-For a locale aware separator, use the "'n'" presentation type instead.
+For a locale-aware separator, use the "'n'" float presentation type or
+integer presentation type instead.
Changed in version 3.1: Added the "','" option (see also **PEP 378**).
+-----------+------------------------------------------------------------+
| "'n'" | Number. This is the same as "'d'", except that it uses the |
| | current locale setting to insert the appropriate digit |
- | | group separators. |
+ | | group separators. Note that the default locale is not the |
+ | | system locale. Depending on your use case, you may wish to |
+ | | set "LC_NUMERIC" with "locale.setlocale()" before using |
+ | | "'n'". |
+-----------+------------------------------------------------------------+
| None | The same as "'d'". |
+-----------+------------------------------------------------------------+
+-----------+------------------------------------------------------------+
| "'n'" | Number. This is the same as "'g'", except that it uses the |
| | current locale setting to insert the appropriate digit |
- | | group separators for the integral part of a number. |
+ | | group separators for the integral part of a number. Note |
+ | | that the default locale is not the system locale. |
+ | | Depending on your use case, you may wish to set |
+ | | "LC_NUMERIC" with "locale.setlocale()" before using "'n'". |
+-----------+------------------------------------------------------------+
| "'%'" | Percentage. Multiplies the number by 100 and displays in |
| | fixed ("'f'") format, followed by a percent sign. |
See section Function definitions for the syntax of parameter lists.
Note that functions created with lambda expressions cannot contain
statements or annotations.
+''',
+ 'lazy': r'''Lazy imports
+************
+
+The "lazy" keyword is a soft keyword that only has special meaning
+when it appears immediately before an "import" or "from" statement.
+When an import statement is preceded by the "lazy" keyword, the import
+becomes *lazy*: the module is not loaded immediately at the import
+statement. Instead, a lazy proxy object is created and bound to the
+name. The actual module is loaded on first use of that name.
+
+Lazy imports are only permitted at module scope. Using "lazy" inside a
+function, class body, or "try"/"except"/"finally" block raises a
+"SyntaxError". Star imports cannot be lazy ("lazy from module import
+*" is a syntax error), and future statements cannot be lazy.
+
+When using "lazy from ... import", each imported name is bound to a
+lazy proxy object. The first access to any of these names triggers
+loading of the entire module and resolves only that specific name to
+its actual value. Other names remain as lazy proxies until they are
+accessed.
+
+Example:
+
+ lazy import json
+ import sys
+
+ print('json' in sys.modules) # False - json module not yet loaded
+
+ # First use triggers loading
+ result = json.dumps({"hello": "world"})
+
+ print('json' in sys.modules) # True - now loaded
+
+If an error occurs during module loading (such as "ImportError" or
+"SyntaxError"), it is raised at the point where the lazy import is
+first used, not at the import statement itself.
+
+See **PEP 810** for the full specification of lazy imports.
+
+Added in version 3.15.
+
+
+Compatibility via "__lazy_modules__"
+====================================
+
+As an alternative to using the "lazy" keyword, a module can opt into
+lazy loading for specific imports by defining a module-level
+"__lazy_modules__" variable. When present, it must be a container of
+fully qualified module name strings. Any regular (non-"lazy")
+"import" statement at module scope whose target appears in
+"__lazy_modules__" is treated as a lazy import, exactly as if the
+"lazy" keyword had been used.
+
+This provides a way to enable lazy loading for specific dependencies
+without changing individual "import" statements. This is useful when
+supporting Python versions older than 3.15 while using lazy imports in
+3.15+:
+
+ __lazy_modules__ = ["json", "pathlib"]
+
+ import json # loaded lazily (name is in __lazy_modules__)
+ import os # loaded eagerly (name not in __lazy_modules__)
+
+ import pathlib # loaded lazily
+
+Relative imports are resolved to their absolute name before the
+lookup, so "__lazy_modules__" must always contain fully qualified
+module names.
+
+For "from"-style imports, the relevant name is the module following
+"from", not the names of its members:
+
+ # In mypackage/mymodule.py
+ __lazy_modules__ = ["mypackage", "mypackage.sub.utils"]
+
+ from . import helper # loaded lazily: . resolves to mypackage
+ from .sub.utils import func # loaded lazily: .sub.utils resolves to mypackage.sub.utils
+ import json # loaded eagerly (not in __lazy_modules__)
+
+Imports inside functions, class bodies, or "try"/"except"/"finally"
+blocks are always eager, regardless of "__lazy_modules__".
+
+Setting "-X lazy_imports=none" (or the "PYTHON_LAZY_IMPORTS"
+environment variable to "none") overrides "__lazy_modules__" and
+forces all imports to be eager.
+
+Added in version 3.15.
''',
'lists': r'''List displays
*************
-A list display is a possibly empty series of expressions enclosed in
-square brackets:
+A *list display* is a possibly empty series of expressions enclosed in
+square brackets. For example:
+
+ >>> ["one", "two", "three"]
+ ['one', 'two', 'three']
+ >>> ["one"] # One-element list
+ ['one']
+ >>> [] # empty list
+ []
- list_display: "[" [flexible_expression_list | comprehension] "]"
+See Container displays for general information on displays.
-A list display yields a new list object, the contents being specified
-by either a list of expressions or a comprehension. When a comma-
-separated list of expressions is supplied, its elements are evaluated
-from left to right and placed into the list object in that order.
-When a comprehension is supplied, the list is constructed from the
-elements resulting from the comprehension.
+The formal grammar for list displays is:
+
+ list: '[' [flexible_expression_list] ']'
''',
'naming': r'''Naming and binding
******************
not a prefix or suffix; rather, all combinations of its values are
stripped.
+ Whitespace characters are defined by "str.isspace()".
+
For example:
>>> ' spacious '.strip()
target of assignments or "del" statements. The built-in function
"len()" returns the number of items in a mapping.
-There is currently a single intrinsic mapping type:
+There are two intrinsic mapping types:
Dictionaries
rather than a language guarantee.
+Frozen dictionaries
+-------------------
+
+These represent an immutable dictionary. They are created by the
+built-in "frozendict()" constructor. A frozendict is *hashable* if
+all of its keys and values are hashable, in which case it can be used
+as an element of a set, or as a key in another mapping. "frozendict"
+is not a subclass of "dict"; it inherits directly from "object".
+
+Added in version 3.15.
+
+
Callable types
==============
--- /dev/null
+.. date: 2026-05-11-21-15-07
+.. gh-issue: 149698
+.. nonce: OudOcW
+.. release date: 2026-06-02
+.. section: Security
+
+Update bundled `libexpat <https://libexpat.github.io/>`_ to version 2.8.1
+for the fix for :cve:`2026-45186`.
+
+..
+
+.. date: 2026-05-10-18-05-32
+.. gh-issue: 87451
+.. nonce: XkKB6M
+.. section: Security
+
+The :mod:`ftplib` module's undocumented ``ftpcp`` function no longer trusts
+the IPv4 address value returned from the source server in response to the
+``PASV`` command by default, completing the fix for CVE-2021-4189. As with
+:class:`ftplib.FTP`, the former behavior can be re-enabled by setting the
+``trust_server_pasv_ipv4_address`` attribute on the source
+:class:`ftplib.FTP` instance to ``True``. Thanks to Qi Deng at Aurascape AI
+for the report.
+
+..
+
+.. date: 2026-05-08-02-18-54
+.. gh-issue: 149474
+.. nonce: ujQ-mu
+.. section: Security
+
+Fix the binary writer in :mod:`profiling.sampling` not firing the audit
+(:pep:`578`) when creating the output file. The writer and the reader now
+accept any path-like object. Patch by Maurycy Pawłowski-Wieroński.
+
+..
+
+.. date: 2026-05-03-21-00-00
+.. gh-issue: 149486
+.. nonce: tarflt
+.. section: Security
+
+:func:`tarfile.data_filter` now validates link targets using the same
+normalised value that is written to disk, strips trailing separators from
+the member name when resolving a symlink's directory, and rejects link
+members that would replace the destination directory itself. This closes
+several path-traversal bypasses of the ``data`` extraction filter.
+
+..
+
+.. date: 2026-04-27-16-36-11
+.. gh-issue: 149079
+.. nonce: vKl-LM
+.. section: Security
+
+Fix a potential denial of service in :func:`unicodedata.normalize`. The
+canonical ordering step of Unicode normalization used a quadratic-time
+insertion sort for reordering combining characters, which could be exploited
+with crafted input containing many combining characters in non-canonical
+order. Replaced with a linear-time counting sort for long runs.
+
+..
+
+.. date: 2026-04-26-19-30-45
+.. gh-issue: 149018
+.. nonce: a9SqWb
+.. section: Security
+
+Improved protection against XML hash-flooding attacks in
+:mod:`xml.parsers.expat` and :mod:`xml.etree.ElementTree` when Python is
+compiled with libExpat 2.8.0 or later.
+
+..
+
+.. date: 2026-05-25-16-00-22
+.. gh-issue: 150374
+.. nonce: Emu6d8
+.. section: Core and Builtins
+
+Fix double release of the import lock on lazy import reification errors.
+
+..
+
+.. date: 2026-05-24-14-45-00
+.. gh-issue: 149156
+.. nonce: NP73rB
+.. section: Core and Builtins
+
+Fix an intermittent crash after :func:`os.fork` when perf trampoline
+profiling is enabled and the child returns through trampoline frames
+inherited from the parent process.
+
+..
+
+.. date: 2026-05-23-22-08-01
+.. gh-issue: 149449
+.. nonce: 2lhQFF
+.. section: Core and Builtins
+
+Fix a use-after-free crash when the :mod:`unicodedata` module was removed
+from :data:`sys.modules` and garbage-collected between calls that decode
+``\N{...}`` escapes or use the ``namereplace`` codec error handler.
+
+..
+
+.. date: 2026-05-22-17-09-28
+.. gh-issue: 150107
+.. nonce: GD72-D
+.. section: Core and Builtins
+
+:mod:`asyncio`: ``sendfile()`` and ``sock_sendfile()`` event loop methods
+now call ``file.seek(offset)`` if *file* has a ``seek()`` method, even if
+*offset* is ``0`` (default value).
+
+..
+
+.. date: 2026-05-20-13-06-17
+.. gh-issue: 150146
+.. nonce: i5m_SL
+.. section: Core and Builtins
+
+Fix a crash on a complex type variable substitution.
+
+``from typing import TypeVar; memoryview[TypeVar("")][*typing.Mapping[...,
+...]]`` used to fail due to missing ``NULL`` check on ``_unpack_args`` C
+function call.
+
+..
+
+.. date: 2026-05-18-18-36-28
+.. gh-issue: 148587
+.. nonce: -RD3z5
+.. section: Core and Builtins
+
+``sys.lazy_modules`` is now a set instead of a dict as initially spelled out
+in PEP 810.
+
+..
+
+.. date: 2026-05-18-16-54-54
+.. gh-issue: 150042
+.. nonce: LSr5W8
+.. section: Core and Builtins
+
+Fix refleak in queue.SimpleQueue.put if memory allocation fails.
+
+..
+
+.. date: 2026-05-18-13-47-17
+.. gh-issue: 149590
+.. nonce: IPBeQx
+.. section: Core and Builtins
+
+Fix crash when faulthandler is imported more than once.
+
+..
+
+.. date: 2026-05-16-11-03-54
+.. gh-issue: 149816
+.. nonce: X_gqMT
+.. section: Core and Builtins
+
+Fix a race condition in ``_PyBytes_FromList`` in free-threading mode.
+
+..
+
+.. date: 2026-05-15-11-31-57
+.. gh-issue: 149816
+.. nonce: ugN2rx
+.. section: Core and Builtins
+
+Fix a race condition in :class:`memoryview` with free-threading.
+
+..
+
+.. date: 2026-05-14-19-41-03
+.. gh-issue: 149807
+.. nonce: IwGaCo
+.. section: Core and Builtins
+
+Fix ``hash(frozendict)``: compute the hash of each ``(key, value)`` pair
+correctly. Patch by Victor Stinner.
+
+..
+
+.. date: 2026-05-13-06-54-41
+.. gh-issue: 149738
+.. nonce: 4BLFoH
+.. section: Core and Builtins
+
+:mod:`sqlite3`: Disallow removing ``row_factory`` and ``text_factory``
+attributes of a connection to prevent a crash on a query.
+
+..
+
+.. date: 2026-05-12-16-47-23
+.. gh-issue: 139808
+.. nonce: iIs7_E
+.. section: Core and Builtins
+
+Add branch protections for AArch64 (BTI/PAC) in assembly code used by
+:option:`-X perf_jit <-X>` (Linux perf profiler integration).
+
+..
+
+.. date: 2026-05-11-14-48-56
+.. gh-issue: 149676
+.. nonce: 6aTrw1
+.. section: Core and Builtins
+
+Fix ``frozendict | frozendict`` hash.
+
+..
+
+.. date: 2026-05-10-16-43-50
+.. gh-issue: 148829
+.. nonce: gscS14
+.. section: Core and Builtins
+
+:class:`sentinel` objects now support a ``repr=`` argument and their
+:attr:`~sentinel.__module__` attribute is writable.
+
+..
+
+.. date: 2026-05-10-07-42-36
+.. gh-issue: 149642
+.. nonce: 6ZksML
+.. section: Core and Builtins
+
+Allow imports inside ``exec()`` calls within functions under
+``PYTHON_LAZY_IMPORTS=all``.
+
+..
+
+.. date: 2026-05-09-15-22-32
+.. gh-issue: 144957
+.. nonce: u1F2aQ
+.. section: Core and Builtins
+
+Fix lazy ``from`` imports of module attributes provided by module-level
+``__getattr__``.
+
+..
+
+.. date: 2026-05-07-03-18-59
+.. gh-issue: 149459
+.. nonce: 5fhAqP
+.. section: Core and Builtins
+
+Fix a crash in the JIT optimizer when a specialized ``LOAD_SPECIAL`` guard
+deoptimized after inserting the synthetic ``NULL`` stack entry.
+
+..
+
+.. date: 2026-04-15-15-48-04
+.. gh-issue: 148450
+.. nonce: 2MEVqH
+.. section: Core and Builtins
+
+Fix ``abc.register()`` so it invalidates type version tags for registered
+classes.
+
+..
+
+.. date: 2026-05-31-17-47-30
+.. gh-issue: 150685
+.. nonce: EBB2mU
+.. section: Library
+
+Update bundled pip to 26.1.2
+
+..
+
+.. date: 2026-05-27-11-18-36
+.. gh-issue: 150228
+.. nonce: pNPiO-
+.. section: Library
+
+The new :class:`site.StartupState` class lets callers batch-process
+:pep:`829` startup configuration files across multiple site directories
+before any startup code runs, with public
+:meth:`~site.StartupState.addsitedir`,
+:meth:`~site.StartupState.addusersitepackages`,
+:meth:`~site.StartupState.addsitepackages`, and
+:meth:`~site.StartupState.process` methods. The signature of
+:func:`site.addsitedir` is unchanged from Python 3.14. The
+:data:`!defer_processing_start_files` argument and the
+``process_startup_files()`` function added earlier in the 3.15 cycle have
+been removed; use :class:`!site.StartupState` instead.
+
+..
+
+.. date: 2026-05-25-17-00-00
+.. gh-issue: 150406
+.. nonce: jF3g63
+.. section: Library
+
+Fix a possible crash occurring during :mod:`socket` module initialization
+when the system is out of memory on platforms without a reentrant
+``gethostbyname``.
+
+..
+
+.. date: 2026-05-25-07-22-05
+.. gh-issue: 150372
+.. nonce: 9hLqhe
+.. section: Library
+
+:mod:`readline`: Fix a potential crash during tab completion caused by an
+out-of-memory error during module initialization.
+
+..
+
+.. date: 2026-05-21-20-47-45
+.. gh-issue: 150157
+.. nonce: ZvmO-bQZ
+.. section: Library
+
+Fix a crash in free-threaded builds that occurs when pickling by name
+objects without a ``__module__`` attribute while :data:`sys.modules` is
+concurrently being modified.
+
+..
+
+.. date: 2026-05-21-11-25-58
+.. gh-issue: 150175
+.. nonce: 8H4Caz
+.. section: Library
+
+Fix race condition in :class:`unittest.mock.ThreadingMock` where concurrent
+calls could lose increments to ``call_count`` and other attributes due to a
+missing lock in ``_increment_mock_call``.
+
+..
+
+.. date: 2026-05-19-19-00-49
+.. gh-issue: 84353
+.. nonce: ZU5zaQ
+.. section: Library
+
+Preserve non-UTF-8 encoded filenames when appending to a
+:class:`zipfile.ZipFile`. Previously, non-ASCII names stored in a legacy
+encoding (without the UTF-8 flag bit set) could be corrupted when the
+central directory was rewritten: they were decoded as cp437 and then
+re-stored as UTF-8.
+
+..
+
+.. date: 2026-05-18-17-17-20
+.. gh-issue: 149189
+.. nonce: a8IooK
+.. section: Library
+
+Revert the changes to :mod:`pprint` defaults. Patch by Hugo van Kemenade.
+
+..
+
+.. date: 2026-05-18-07-44-46
+.. gh-issue: 149995
+.. nonce: vvtFHn
+.. section: Library
+
+Update various docstrings in :mod:`typing`.
+
+..
+
+.. date: 2026-05-17-22-37-02
+.. gh-issue: 88726
+.. nonce: BAoL6j
+.. section: Library
+
+The :mod:`email` package now uses standard MIME charset names "gb2312" and
+"big5" instead of non-standard names "eucgb2312_cn" and "big5_tw".
+
+..
+
+.. date: 2026-05-17-02-25-56
+.. gh-issue: 149571
+.. nonce: LNyuWJ
+.. section: Library
+
+Fix the C implementation of :meth:`xml.etree.ElementTree.Element.itertext`:
+it no longer emits text for comments and processing instructions.
+
+..
+
+.. date: 2026-05-16-21-08-33
+.. gh-issue: 149921
+.. nonce: I1yNML
+.. section: Library
+
+Fix reference leaks in error paths of the :mod:`!_interpchannels` and
+:mod:`!_interpqueues` extension modules.
+
+..
+
+.. date: 2026-05-15-18-44-20
+.. gh-issue: 142349
+.. nonce: fHK3v1
+.. section: Library
+
+Add :keyword:`lazy` to the list of support topic by :func:`help`.
+
+..
+
+.. date: 2026-05-15-16-28-00
+.. gh-issue: 149819
+.. nonce: fixpth
+.. section: Library
+
+Fix regression in :func:`site.addsitedir` where ``.pth`` files were no
+longer processed in Python subprocesses. This happened because
+:func:`site.main` seeded ``known_paths`` with entries inherited from the
+parent process, causing ``addsitedir`` to skip ``.pth`` processing.
+
+..
+
+.. date: 2026-05-14-15-55-28
+.. gh-issue: 149816
+.. nonce: ZaXQ0q
+.. section: Library
+
+Fix a race condition in ``_random.Random.__init__`` method in free-threading
+mode.
+
+..
+
+.. date: 2026-05-13-23-18-39
+.. gh-issue: 149801
+.. nonce: S_FfGr
+.. section: Library
+
+Add IANA registered names and aliases with leading zeros before number (like
+IBM00858, CP00858, IBM01140, CP01140) for corresponding codecs.
+
+..
+
+.. date: 2026-05-12-13-03-45
+.. gh-issue: 149718
+.. nonce: SaM1NJ
+.. section: Library
+
+Coalesce consecutive identical stack frames in Tachyon, so aggregating
+collectors (pstats, collapsed, flamegraph, gecko) receive one collect.
+Improves sample rate 3x, error rate and missed rate drop by 70%. Patch by
+Maurycy Pawłowski-Wieroński.
+
+..
+
+.. date: 2026-05-12-06-24-54
+.. gh-issue: 149701
+.. nonce: 8v9RTm
+.. section: Library
+
+Fix bad return code from Lib/venv/bin/activate if hashing is disabled
+
+..
+
+.. date: 2026-05-10-23-51-23
+.. gh-issue: 149504
+.. nonce: pDSCbn
+.. section: Library
+
+Fix :func:`site.addsitedir` to allow re-entrant calls from within startup
+files. Previously, a ``.pth`` file containing an ``import`` line that
+called :func:`site.addsitedir` (or a ``.start`` entry point doing the same)
+could crash with ``RuntimeError: dictionary changed size during iteration``
+during site initialization, breaking tools such as ``uv run --with``.
+
+..
+
+.. date: 2026-05-10-19-26-50
+.. gh-issue: 149584
+.. nonce: x7Qm9A
+.. section: Library
+
+Fix excessive overhead in the Tachyon profiler when inspecting a remote
+process by avoiding repeated remote page-cache scans, batching predicted
+remote reads, and reusing cached profiler result objects. Patch by Pablo
+Galindo and Maurycy Pawłowski-Wieroński.
+
+..
+
+.. date: 2026-05-10-07-21-51
+.. gh-issue: 139489
+.. nonce: rS7LTA
+.. section: Library
+
+Add :func:`xml.is_valid_text` to ``xml.__all__``.
+
+..
+
+.. date: 2026-05-09-21-02-08
+.. gh-issue: 149614
+.. nonce: U4snj3
+.. section: Library
+
+Fix a regression that broke the ability to deepcopy
+:class:`argparse.ArgumentParser` instances.
+
+..
+
+.. date: 2026-05-08-15-08-35
+.. gh-issue: 112821
+.. nonce: t9T1YD
+.. section: Library
+
+In the REPL, autocompletion might run arbitrary code in the getter of a
+descriptor. If that getter raised an exception, autocompletion would fail to
+present any options for the entire object. Autocompletion now works as
+expected for these objects.
+
+..
+
+.. date: 2026-05-08-09-11-48
+.. gh-issue: 149534
+.. nonce: Tw7eeY
+.. section: Library
+
+Fix merging of :class:`collections.defaultdict` and :class:`frozendict`.
+
+..
+
+.. date: 2026-05-07-21-58-17
+.. gh-issue: 149388
+.. nonce: DDBPeA
+.. section: Library
+
+Make :class:`!asyncio.windows_utils.PipeHandle` closing idempotent.
+
+..
+
+.. date: 2026-05-07-14-18-47
+.. gh-issue: 149489
+.. nonce: bX9iHe
+.. section: Library
+
+Fix :mod:`~xml.etree.ElementTree` serialization to HTML. The content of
+comments, processing instructions and elements "xmp", "iframe", "noembed",
+"noframes", and "plaintext" is no longer escaped. The "plaintext" element no
+longer have the closing tag. Add support of empty attributes (with value
+``None``).
+
+..
+
+.. date: 2026-04-29-08-10-17
+.. gh-issue: 149056
+.. nonce: jnaD4W
+.. section: Library
+
+Fix :func:`json.load` not forwarding the *array_hook* argument to
+:func:`json.loads`. Patch by Thomas Kowalski.
+
+..
+
+.. date: 2026-04-27-11-12-00
+.. gh-issue: 149046
+.. nonce: 74shDd
+.. section: Library
+
+:mod:`io`: Fix :class:`io.StringIO` serialization: no longer call
+``str(obj)`` on :class:`str` subclasses. Patch by Thomas Kowalski.
+
+..
+
+.. date: 2026-04-23-12-50-15
+.. gh-issue: 148441
+.. nonce: zvpCkR
+.. section: Library
+
+:mod:`xml.parsers.expat`: prevent a crash in
+:meth:`~xml.parsers.expat.xmlparser.CharacterDataHandler` when the character
+data size exceeds the parser's :attr:`buffer size
+<xml.parsers.expat.xmlparser.buffer_size>`.
+
+..
+
+.. date: 2026-03-26-09-30-00
+.. gh-issue: 146452
+.. nonce: Y2N6qZ8J
+.. section: Library
+
+Fix segfault in :mod:`pickle` when pickling a dictionary concurrently
+mutated by another thread in the free-threaded build.
+
+..
+
+.. date: 2025-08-30-07-44-30
+.. gh-issue: 86533
+.. nonce: pathlib
+.. section: Library
+
+The :func:`os.makedirs` function and :meth:`pathlib.Path.mkdir` method now
+have a *parent_mode* parameter to specify the mode for intermediate
+directories when creating parent directories. This allows one to match the
+behavior from Python 3.6 and earlier for :func:`os.makedirs`.
+
+..
+
+.. date: 2025-05-19-21-08-25
+.. gh-issue: 134261
+.. nonce: ravGYm
+.. section: Library
+
+zip: On reproducible builds, ZipFile uses UTC instead of the local time when
+writing file datetimes to avoid underflows.
+
+..
+
+.. date: 2025-05-19-20-29-35
+.. gh-issue: 133998
+.. nonce: KmElUw
+.. section: Library
+
+Fix :exc:`struct.error` exception when creating a file with
+:class:`gzip.GzipFile` or compressing data with :func:`gzip.compress` if the
+system time is outside the range 00:00:00 UTC, January 1, 1970 through
+06:28:15 UTC, February 7, 2106, or explicitly passed *mtime* argument is
+outside the range ``0`` to ``2**32-1``.
+
+..
+
+.. date: 2025-03-01-13-36-02
+.. gh-issue: 128110
+.. nonce: 9wx_G0
+.. section: Library
+
+Fix bug in the parsing of :mod:`email` address headers that could result in
+extraneous spaces in the decoded text when using a modern email policy.
+Space between pairs of adjacent :rfc:`2047` encoded-words is now ignored,
+per section 6.2 (and consistent with existing parsing of unstructured
+headers like *Subject*).
+
+..
+
+.. date: 2024-11-02-02-02-31
+.. gh-issue: 107398
+.. nonce: uUtA6Q
+.. section: Library
+
+Fix :mod:`tarfile` stream mode exception when process the file with the gzip
+extra field.
+
+..
+
+.. date: 2024-07-02-20-57-43
+.. gh-issue: 121109
+.. nonce: Tp6R2s
+.. section: Library
+
+Fix :mod:`tarfile` performance issue when reading archives in streaming mode
+(e.g. ``r|*``).
+
+..
+
+.. bpo: 45509
+.. date: 2021-10-18-13-46-55
+.. nonce: Upwb60
+.. section: Library
+
+Gzip headers are now checked for corrupted NAME, COMMENT and HCRC fields.
+
+..
+
+.. date: 2026-05-25-15-39-53
+.. gh-issue: 150387
+.. nonce: yzZ7jq
+.. section: Tests
+
+Fix hang in
+``test.test_profiling.test_sampling_profiler.test_live_collector_ui.TestLiveModeErrors.test_run_failed_script_live``
+on slow buildbots. The test now always queues a final ``q`` keystroke so the
+live TUI loop exits even when the profiler collects enough samples to enter
+the post-finished input loop.
+
+..
+
+.. date: 2026-05-13-14-53-23
+.. gh-issue: 149776
+.. nonce: orqgsn
+.. section: Tests
+
+Fix test_socket on Linux kernel 7.1 and newer: skip UDP Lite tests if it's
+not supported. Patch by Victor Stinner.
+
+..
+
+.. date: 2026-05-21-15-14-59
+.. gh-issue: 148294
+.. nonce: VtFaW4
+.. section: Build
+
+Corrected the use of ``AC_PATH_TOOL`` in ``configure.ac`` to allow a C++
+compiler to be found on :envvar:`!PATH`.
+
+..
+
+.. date: 2026-05-18-16-00-41
+.. gh-issue: 148260
+.. nonce: UwFiIX
+.. section: Build
+
+On Linux when Python is linked to the musl C library, use a thread stack
+size of at least 1 MiB instead of musl default which is 128 kiB. Patch by
+Victor Stinner.
+
+..
+
+.. date: 2026-05-14-22-09-46
+.. gh-issue: 149786
+.. nonce: UI-HZM
+.. section: Windows
+
+Fixes virtual environment launchers on Windows free-threaded builds.
+
+..
+
+.. date: 2026-05-06-21-36-53
+.. gh-issue: 124111
+.. nonce: m4OBX8
+.. section: Windows
+
+Updated Windows builds to use Tcl/Tk 9.0.3.
+
+..
+
+.. date: 2026-04-29-14-44-51
+.. gh-issue: 138489
+.. nonce: 234aj6
+.. section: Windows
+
+Windows distributions now include a :file:`build-details.json` file (see
+:pep:`739`). The legacy installer does not install it, but all other
+distributions from python.org and all preset configurations in the
+``PC\layout`` script will include one.
+
+..
+
+.. date: 2026-04-26-23-14-45
+.. gh-issue: 149029
+.. nonce: oPTXP4
+.. section: Windows
+
+Update Windows installer to ship with SQLite 3.53.1.
+
+..
+
+.. date: 2026-05-31-10-40-00
+.. gh-issue: 150644
+.. nonce: zLWyjj
+.. section: macOS
+
+When system logging is enabled (with ``config.use_system_logger``, messages
+are now tagged as public. This allows the macOS 26 system logger to view
+messages without special configuration.
+
+..
+
+.. date: 2026-04-26-23-15-09
+.. gh-issue: 149029
+.. nonce: Lsx--T
+.. section: macOS
+
+Update macOS installer to ship with SQLite version 3.53.1.
+
+..
+
+.. date: 2026-05-22-18-51-09
+.. gh-issue: 150258
+.. nonce: dh8GVK
+.. section: Tools/Demos
+
+Update the tooltip on the Tachyon flame graph to show both absolute and
+relative percentages.
+
+..
+
+.. date: 2026-05-12-16-47-21
+.. gh-issue: 149725
+.. nonce: HZLBTZ
+.. section: C API
+
+Add :c:func:`PySentinel_CheckExact` for exact :class:`sentinel` type tests
+to accompany the existing :c:func:`PySentinel_Check`.
+
+..
+
+.. date: 2026-02-25-13-37-10
+.. gh-issue: 145235
+.. nonce: -1ySNR
+.. section: C API
+
+Made :c:func:`PyDict_AddWatcher`, :c:func:`PyDict_ClearWatcher`,
+:c:func:`PyDict_Watch`, and :c:func:`PyDict_Unwatch` thread-safe on the
+:term:`free threaded <free threading>` build.
+++ /dev/null
-On Linux when Python is linked to the musl C library, use a thread stack
-size of at least 1 MiB instead of musl default which is 128 kiB. Patch by
-Victor Stinner.
+++ /dev/null
-Corrected the use of ``AC_PATH_TOOL`` in ``configure.ac`` to allow a C++
-compiler to be found on :envvar:`!PATH`.
+++ /dev/null
-Made :c:func:`PyDict_AddWatcher`, :c:func:`PyDict_ClearWatcher`,
-:c:func:`PyDict_Watch`, and :c:func:`PyDict_Unwatch` thread-safe on the
-:term:`free threaded <free threading>` build.
+++ /dev/null
-Add :c:func:`PySentinel_CheckExact` for exact :class:`sentinel` type tests
-to accompany the existing :c:func:`PySentinel_Check`.
+++ /dev/null
-Fix ``abc.register()`` so it invalidates type version tags for registered classes.
+++ /dev/null
-Fix a crash in the JIT optimizer when a specialized ``LOAD_SPECIAL`` guard deoptimized after inserting the synthetic ``NULL`` stack entry.
+++ /dev/null
-Fix lazy ``from`` imports of module attributes provided by module-level
-``__getattr__``.
+++ /dev/null
-Allow imports inside ``exec()`` calls within functions under
-``PYTHON_LAZY_IMPORTS=all``.
+++ /dev/null
-:class:`sentinel` objects now support a ``repr=`` argument and their
-:attr:`~sentinel.__module__` attribute is writable.
+++ /dev/null
-Fix ``frozendict | frozendict`` hash.
+++ /dev/null
-Add branch protections for AArch64 (BTI/PAC) in assembly code used by
-:option:`-X perf_jit <-X>` (Linux perf profiler integration).
+++ /dev/null
-:mod:`sqlite3`: Disallow removing ``row_factory`` and ``text_factory`` attributes
-of a connection to prevent a crash on a query.
+++ /dev/null
-Fix ``hash(frozendict)``: compute the hash of each ``(key, value)`` pair
-correctly. Patch by Victor Stinner.
+++ /dev/null
-Fix a race condition in :class:`memoryview` with free-threading.
+++ /dev/null
-Fix a race condition in ``_PyBytes_FromList`` in free-threading mode.
+++ /dev/null
-Fix crash when faulthandler is imported more than once.
+++ /dev/null
-Fix refleak in queue.SimpleQueue.put if memory allocation fails.
+++ /dev/null
-``sys.lazy_modules`` is now a set instead of a dict as initially spelled out in PEP 810.
+++ /dev/null
-Fix a crash on a complex type variable substitution.
-
-``from typing import TypeVar; memoryview[TypeVar("")][*typing.Mapping[...,
-...]]`` used to fail due to missing ``NULL`` check on ``_unpack_args`` C
-function call.
+++ /dev/null
-:mod:`asyncio`: ``sendfile()`` and ``sock_sendfile()`` event loop methods
-now call ``file.seek(offset)`` if *file* has a ``seek()`` method,
-even if *offset* is ``0`` (default value).
+++ /dev/null
-Fix a use-after-free crash when the :mod:`unicodedata` module was removed
-from :data:`sys.modules` and garbage-collected between calls that decode
-``\N{...}`` escapes or use the ``namereplace`` codec error handler.
+++ /dev/null
-Fix an intermittent crash after :func:`os.fork` when perf trampoline
-profiling is enabled and the child returns through trampoline frames
-inherited from the parent process.
+++ /dev/null
-Fix double release of the import lock on lazy import reification errors.
+++ /dev/null
-Gzip headers are now checked for corrupted NAME, COMMENT and HCRC fields.
+++ /dev/null
-Fix :mod:`tarfile` performance issue when reading archives in streaming mode
-(e.g. ``r|*``).
+++ /dev/null
-Fix :mod:`tarfile` stream mode exception when process the file with the gzip extra field.
+++ /dev/null
-Fix bug in the parsing of :mod:`email` address headers that could result in
-extraneous spaces in the decoded text when using a modern email policy.
-Space between pairs of adjacent :rfc:`2047` encoded-words is now ignored, per
-section 6.2 (and consistent with existing parsing of unstructured
-headers like *Subject*).
+++ /dev/null
-Fix :exc:`struct.error` exception when creating a file with
-:class:`gzip.GzipFile` or compressing data with :func:`gzip.compress`
-if the system time is outside the range 00:00:00 UTC, January 1, 1970
-through 06:28:15 UTC, February 7, 2106, or explicitly passed *mtime*
-argument is outside the range ``0`` to ``2**32-1``.
+++ /dev/null
-zip: On reproducible builds, ZipFile uses UTC instead of the local time when writing file datetimes to avoid underflows.
+++ /dev/null
-The :func:`os.makedirs` function and :meth:`pathlib.Path.mkdir` method now have
-a *parent_mode* parameter to specify the mode for intermediate directories when
-creating parent directories. This allows one to match the behavior from Python
-3.6 and earlier for :func:`os.makedirs`.
+++ /dev/null
-Fix segfault in :mod:`pickle` when pickling a dictionary concurrently
-mutated by another thread in the free-threaded build.
+++ /dev/null
-:mod:`xml.parsers.expat`: prevent a crash in
-:meth:`~xml.parsers.expat.xmlparser.CharacterDataHandler`
-when the character data size exceeds the parser's
-:attr:`buffer size <xml.parsers.expat.xmlparser.buffer_size>`.
+++ /dev/null
-:mod:`io`: Fix :class:`io.StringIO` serialization: no longer call ``str(obj)`` on :class:`str`
-subclasses. Patch by Thomas Kowalski.
+++ /dev/null
-Fix :func:`json.load` not forwarding the *array_hook* argument to
-:func:`json.loads`. Patch by Thomas Kowalski.
+++ /dev/null
-Fix :mod:`~xml.etree.ElementTree` serialization to HTML. The content of
-comments, processing instructions and elements "xmp", "iframe", "noembed",
-"noframes", and "plaintext" is no longer escaped. The "plaintext" element no
-longer have the closing tag. Add support of empty attributes (with value
-``None``).
+++ /dev/null
-Make :class:`!asyncio.windows_utils.PipeHandle` closing idempotent.
+++ /dev/null
-Fix merging of :class:`collections.defaultdict` and :class:`frozendict`.
+++ /dev/null
-In the REPL, autocompletion might run arbitrary code in the getter of a
-descriptor. If that getter raised an exception, autocompletion would fail to
-present any options for the entire object. Autocompletion now works as
-expected for these objects.
+++ /dev/null
-Fix a regression that broke the ability to deepcopy :class:`argparse.ArgumentParser` instances.
+++ /dev/null
-Add :func:`xml.is_valid_text` to ``xml.__all__``.
+++ /dev/null
-Fix excessive overhead in the Tachyon profiler when inspecting a remote
-process by avoiding repeated remote page-cache scans, batching predicted
-remote reads, and reusing cached profiler result objects. Patch by Pablo
-Galindo and Maurycy Pawłowski-Wieroński.
+++ /dev/null
-Fix :func:`site.addsitedir` to allow re-entrant calls from within startup
-files. Previously, a ``.pth`` file containing an ``import`` line that
-called :func:`site.addsitedir` (or a ``.start`` entry point doing the same)
-could crash with ``RuntimeError: dictionary changed size during iteration``
-during site initialization, breaking tools such as ``uv run --with``.
+++ /dev/null
-Fix bad return code from Lib/venv/bin/activate if hashing is disabled
+++ /dev/null
-Coalesce consecutive identical stack frames in Tachyon, so aggregating
-collectors (pstats, collapsed, flamegraph, gecko) receive one collect.
-Improves sample rate 3x, error rate and missed rate drop by 70%. Patch by
-Maurycy Pawłowski-Wieroński.
+++ /dev/null
-Add IANA registered names and aliases with leading zeros before number (like
-IBM00858, CP00858, IBM01140, CP01140) for corresponding codecs.
+++ /dev/null
-Fix a race condition in ``_random.Random.__init__`` method in free-threading
-mode.
+++ /dev/null
-Fix regression in :func:`site.addsitedir` where ``.pth`` files were no
-longer processed in Python subprocesses. This happened because
-:func:`site.main` seeded ``known_paths`` with entries inherited from
-the parent process, causing ``addsitedir`` to skip ``.pth`` processing.
+++ /dev/null
-Add :keyword:`lazy` to the list of support topic by :func:`help`.
+++ /dev/null
-Fix reference leaks in error paths of the :mod:`!_interpchannels` and
-:mod:`!_interpqueues` extension modules.
+++ /dev/null
-Fix the C implementation of :meth:`xml.etree.ElementTree.Element.itertext`:
-it no longer emits text for comments and processing instructions.
+++ /dev/null
-The :mod:`email` package now uses standard MIME charset names "gb2312" and
-"big5" instead of non-standard names "eucgb2312_cn" and "big5_tw".
+++ /dev/null
-Update various docstrings in :mod:`typing`.
+++ /dev/null
-Revert the changes to :mod:`pprint` defaults. Patch by Hugo van Kemenade.
+++ /dev/null
-Preserve non-UTF-8 encoded filenames when appending to a
-:class:`zipfile.ZipFile`. Previously, non-ASCII names stored in a legacy
-encoding (without the UTF-8 flag bit set) could be corrupted when the
-central directory was rewritten: they were decoded as cp437 and then
-re-stored as UTF-8.
+++ /dev/null
-Fix race condition in :class:`unittest.mock.ThreadingMock` where
-concurrent calls could lose increments to ``call_count`` and other
-attributes due to a missing lock in ``_increment_mock_call``.
+++ /dev/null
-Fix a crash in free-threaded builds that occurs when pickling by name
-objects without a ``__module__`` attribute while :data:`sys.modules`
-is concurrently being modified.
+++ /dev/null
-:mod:`readline`: Fix a potential crash during tab completion caused by an
-out-of-memory error during module initialization.
+++ /dev/null
-Fix a possible crash occurring during :mod:`socket` module initialization
-when the system is out of memory on platforms without a reentrant
-``gethostbyname``.
+++ /dev/null
-The new :class:`site.StartupState` class lets callers batch-process
-:pep:`829` startup configuration files across multiple site directories
-before any startup code runs, with public
-:meth:`~site.StartupState.addsitedir`,
-:meth:`~site.StartupState.addusersitepackages`,
-:meth:`~site.StartupState.addsitepackages`, and
-:meth:`~site.StartupState.process` methods. The signature of
-:func:`site.addsitedir` is unchanged from Python 3.14. The
-:data:`!defer_processing_start_files` argument and the
-``process_startup_files()`` function added earlier in the 3.15 cycle have
-been removed; use :class:`!site.StartupState` instead.
+++ /dev/null
-Update bundled pip to 26.1.2
+++ /dev/null
-Improved protection against XML hash-flooding attacks in
-:mod:`xml.parsers.expat` and :mod:`xml.etree.ElementTree` when Python is
-compiled with libExpat 2.8.0 or later.
+++ /dev/null
-Fix a potential denial of service in :func:`unicodedata.normalize`. The
-canonical ordering step of Unicode normalization used a quadratic-time insertion
-sort for reordering combining characters, which could be exploited with
-crafted input containing many combining characters in non-canonical order.
-Replaced with a linear-time counting sort for long runs.
+++ /dev/null
-:func:`tarfile.data_filter` now validates link targets using the same
-normalised value that is written to disk, strips trailing separators from
-the member name when resolving a symlink's directory, and rejects link
-members that would replace the destination directory itself. This closes
-several path-traversal bypasses of the ``data`` extraction filter.
+++ /dev/null
-Fix the binary writer in :mod:`profiling.sampling` not firing the audit
-(:pep:`578`) when creating the output file. The writer and the reader now
-accept any path-like object. Patch by Maurycy Pawłowski-Wieroński.
+++ /dev/null
-The :mod:`ftplib` module's undocumented ``ftpcp`` function no longer trusts
-the IPv4 address value returned from the source server in response to the
-``PASV`` command by default, completing the fix for CVE-2021-4189. As with
-:class:`ftplib.FTP`, the former behavior can be re-enabled by setting the
-``trust_server_pasv_ipv4_address`` attribute on the source :class:`ftplib.FTP`
-instance to ``True``. Thanks to Qi Deng at Aurascape AI for the report.
+++ /dev/null
-Update bundled `libexpat <https://libexpat.github.io/>`_ to version 2.8.1
-for the fix for :cve:`2026-45186`.
+++ /dev/null
-Fix test_socket on Linux kernel 7.1 and newer: skip UDP Lite tests if it's
-not supported. Patch by Victor Stinner.
+++ /dev/null
-Fix hang in
-``test.test_profiling.test_sampling_profiler.test_live_collector_ui.TestLiveModeErrors.test_run_failed_script_live``
-on slow buildbots. The test now always queues a final ``q`` keystroke so the
-live TUI loop exits even when the profiler collects enough samples to enter
-the post-finished input loop.
+++ /dev/null
-Update the tooltip on the Tachyon flame graph to show both absolute and relative percentages.
+++ /dev/null
-Update Windows installer to ship with SQLite 3.53.1.
+++ /dev/null
-Windows distributions now include a :file:`build-details.json` file (see
-:pep:`739`). The legacy installer does not install it, but all other
-distributions from python.org and all preset configurations in the
-``PC\layout`` script will include one.
+++ /dev/null
-Updated Windows builds to use Tcl/Tk 9.0.3.
+++ /dev/null
-Fixes virtual environment launchers on Windows free-threaded builds.
+++ /dev/null
-Update macOS installer to ship with SQLite version 3.53.1.
+++ /dev/null
-When system logging is enabled (with ``config.use_system_logger``, messages
-are now tagged as public. This allows the macOS 26 system logger to view
-messages without special configuration.
-This is Python version 3.15.0 beta 1
+This is Python version 3.15.0 beta 2
====================================
.. image:: https://github.com/python/cpython/actions/workflows/build.yml/badge.svg?branch=main&event=push