## python/cpython — v3.15.0a7…v3.15.0a8

_384+ commits._

### Features
- **gh-112632: Add optional keyword-only argument `expand` to `pprint` (#136964)** (132abfd)
- **Add Stan to docs config reviewers (#148164)** (476fadc)
- **gh-69605: Add math.integer to PyREPL module completer hardcoded list (#144811)** (c64baff)
- **GH-139922: add interpreter types to InternalDocs/interpreter.md (GH-148035)** (668c572)
- **gh-130472: Integrate fancycompleter with the new repl, to get colored tab completions (#130473)** (1c4408a)
- **Add `permissions: {}` to all reusable workflows (#148114)** (1f36a51)
- **gh-73613: Support Base32 and Base64 without padding (GH-147974)** (8bf8bf9)
- **gh-146073: Revert "gh-146073: Add fitness/exit quality mechanism for JIT trace frontend (GH-147966)" (#148082)** (328da67)
- **gh-146073: Add fitness/exit quality mechanism for JIT trace frontend (GH-147966)** (198b04b)
- **gh-148022: Add threat model to remote debugging docs (#148024)** (edab686)
- **Move root user checks to test.support (#146195)** (86b8617)
- **gh-143050: Add helper _PyLong_InitTag() (#147956)** (b456cb2)
- **gh-146636: PEP 803: add Py_TARGET_ABI3T and .abi3t.so extension (GH-146637)** (2452324)
- **gh-146431: Add the wrapcol and ignorechars parameters for more Base XX codec (GH-146434)** (42825e6)
- **gh-141510: Support `frozendict` in `plistlib` (#145590)** (829e4d0)
- **gh-145563: Add thread-safety annotation for PyCapsule C-API (#146612)** (67354b2)
- **gh-146238: Support half-floats in the array module (#146242)** (e79fd60)
- **gh-145056: Add support for merging collections.UserDict and frozendict (GH-146465)** (ec2bc12)
- **gh-138122: Add differential flame graph (#145785)** (f4d3c61)
- **gh-138850: Add --disable-epoll to configure (GH-145768)** (7b2495e)
- **GH-146527: Add more data to GC statistics and add it to PyDebugOffsets (#146532)** (5bf3a31)
- **gh-146388: Add null check for `sym_new(ctx)` in `make_bottom` (GH-146389)** (c8ee196)
- **gh-85332: Support cross-compiling for GNU/Hurd (#146094)** (a209dd2)
- **gh-142518: add thread safety annotations for bytearray C-API (#146514)** (5466f57)
- **gh-142518: add thread safety docs on bytes C-API (#146415)** (6a94980)

### Fixes
- **GH-145762: Fix test_ci_fuzz_stdlib for source archive builds (#145778)** (a4d9d64)
- **gh-101178: Fix UB in `binascii.b2a_ascii85` (#148166)** (63d3c49)
- **gh-144319: Fix huge page leak in datastack chunk allocator (#147963)** (77fc2f5)
- **gh-148074: Fix `typeobject.c` missing error return (#148075)** (c398490)
- **gh-145883: Fix two heap-buffer-overflows in `_zoneinfo` (#145885)** (fe9befc)
- **gh-148067: Fix typo in asyncio event loop docs: 'signals' -> 'signal' (#148073)** (611d606)
- **gh-148078: Fix uses of sym_is_not_null in JIT optimizer (GH-148079)** (c50d6cd)
- **gh-148029: Fix error message for invalid number of Base32 characters (GH-148030)** (985216c)
- **GH-146210: Fix building the jit stencils on Windows when the interpreter is built with a different clang version (#146338)** (dea4083)
- **gh-125895: Fix static asset location for `sphinx-notfound-page` (#147984)** (80ab6d9)
- **gh-146613: Fix re-entrant use-after-free in `itertools._grouper` (#147962)** (fc7a188)
- **gh-147960: Fix memory leak in crossinterp _tuple_shared() on alloc failure (#147961)** (4810bed)
- **gh-146615: Fix format specifiers in Objects/ directory (GH-146620)** (bbf7fb2)
- **gh-146615: Fix format specifiers in Python/ directory (GH-146619)** (dcb260e)
- **gh-146615: Fix format specifiers in test cextensions (GH-146618)** (b705553)
- **gh-146615: Fix format specifiers in extension modules (GH-146617)** (1c396e1)
- **gh-146615: Fix crash in __get__() for METH_METHOD descriptors with invalid type argument (GH-146634)** (72d29ea)
- **gh-146442: Fix various bugs in compiler pipeline (#146443)** (ca95e97)
- **gh-145056: Fix merging of collections.OrderedDict and frozendict (GH-146466)** (7278904)
- **gh-126835: Fix _PY_IS_SMALL_INT() macro (#146631)** (adf2c47)
- **gh-146587: fix type slot assignment incase of multiple slots for same name (#146593)** (8e10bd7)
- **gh-138577: Fix keyboard shortcuts in getpass with echo_char (#141597)** (7f0c4f6)
- **gh-146556: Fix infinite loop in annotationlib.get_annotations() on circular __wrapped__ (#146557)** (2cf6a68)
- **gh-146579: _zstd: Fix decompression options dict error message (#146577)** (4d0e8ee)
- **gh-146080: fix a crash in SNI callbacks when the SSL object is gone (#146573)** (24db78c)
- **gh-146090: fix memory management of internal `sqlite3` callback contexts (#146569)** (aa66807)
- **gh-146004: fix test_args_from_interpreter_flags on windows (#146580)** (1af025d)
- **gh-146544: Fix `asyncio.Queue` docstring ambiguity (#146545)** (578d726)
- **gh-145057: Fix test names and comments to reflect `sys.lazy_modules` is a dict, not a set (#146084)** (69b08c3)
- **gh-146310: Fix ensurepip to treat empty WHEEL_PKG_DIR as unset (#146357)** (73cc1fd)
- **gh-146250: Fix memory leak in re-initialization of `SyntaxError` (#146251)** (0de4e08)

### Backend
- **Python 3.15.0a8** (55ea59e)
- **gh-146121: Clarify security model of pkgutil.getdata; revert checks (GH-148197)** (cf59bf7)
- **gh-146636: abi3t: Define Py_GIL_DISABLED but do not use it (GH-148142)** (fbc1a5b)
- **gh-144503: Pass sys.argv to forkserver as real argv elements (GH-148194)** (5e9d90b)
- **GH-146128: Remove the buggy AArch64 "33rx" relocation (#146263)** (6bb7b33)
- **Note out-of-date obmalloc comments (#148149)** (3df0c4d)
- **gh-145844: Update WASI SDK from 30 to 32 (#145859)** (8a73478)
- **gh-73613: clarify padding= docs in for base64 & binascii modules (GH-148183)** (bac4fee)
- **gh-148110: Resolve lazy import filter names for relative imports (#148111)** (ca960b6)
- **gh-137586: Open external osascript program with absolute path (GH-137584)** (a0c57a8)
- **gh-148072: Cache pickle.dumps/loads per interpreter in XIData (GH-148125)** (3d724dd)
- **gh-130472: Remove readline-only hacks from PyREPL completions (#148161)** (f8293fa)
- **gh-140279: Stale workflow needs 'actions: write' to update its own cache (#148165)** (36f15ba)
- **gh-100239: Propagate type info through _BINARY_OP_EXTEND in tier 2 (GH-148146)** (efda60e)
- **gh-148119: Refactor `get_type_attr_as_size` to improve error handling in `structseq.c` (#148120)** (69f5162)
- **gh-148157: Check for `_PyPegen_add_type_comment_to_arg` fail in `_PyPegen_name_default_pair` (#148158)** (1795fcc)
- **gh-148153: Do not use assert for parameter validation in base64 (GH-148154)** (d0e204f)
- **gh-144418: Increase Android testbed emulator RAM to 4 GB (#148054)** (a95ee3a)
- **gh-148144: Initialize visited on copied interpreter frames (#148143)** (fbfc6cc)
- **gh-145098: Use `macos-15-intel` instead of unstable `macos-26-intel` in `{jit,tail-call}.yml` (#148126)** (bce96a1)
- **gh-140870: PyREPL auto-complete module attributes in import statements  (#140871)** (b07becb)
- **Silence `unused-variable` warnings in `optimizer_cases.c.h` (#148127)** (d6e0445)
- **gh-94632: document the subprocess need for extra_groups=() with user= (GH-148129)** (a1cf443)
- **gh-142927: Show self time in flamegraph tooltip (#147706)** (4ff8b07)
- **gh-145000: Find correct merge base in `reusable-check-html-ids.yml` workflow (#147975)** (c43b490)
- **gh-146527: Heap-allocate gc_stats to avoid bloating PyInterpreterState (#148057)** (21fb9dc)
- **Regex HOWTO: invalid string literals result in `SyntaxWarning` (#148092)** (fbdbea9)
- **gh-148083: Prevent constant folding when lhs is container types (gh-148090)** (853dafe)
- **gh-148083: Constant-fold _CONTAINS_OP_SET for frozenset (gh-148084)** (289f19a)
- **gh-131798: split recursion check to _CHECK_RECURSION_LIMIT and combine checks (GH-148070)** (e7bf8ea)
- **gh-148016: Improve "Leading padding not allowed" error in Base32 and Base64 decoders (GH-148017)** (113038f)
- **gh-131798: relax GUARD_CALLABLE checks for self type checks (#148069)** (7bcc1c4)
- **gh-131798: JIT inline function addresses of builtin methods  (#146906)** (7e275d4)
- **gh-146450: Normalise feature set of Android build script with other platform build scripts (#146451)** (b8470de)
- **gh-146541: Allow building the Android testbed for 32-bit targets (#146542)** (848bbe9)
- **gh-126676: Expand argparse docs for type=bool with warning and alternatives (#146435)** (80d0a85)
- **gh-145098: Use `macos-15-intel` instead of unstable `macos-26-intel` (#148038)** (cb76ab3)
- **gh-143930: Tweak the exception message and increase test coverage (GH-146476)** (3681d47)
- **gh-146640: Optimize int operations by mutating uniquely-referenced operands in place (JIT only) (GH-146641)** (48317fe)
- **test_copy_dir_no_read_permission requires non root user (GH-148028)** (3908593)
- **gh-80642: timeit - make target time of autorange configurable (#140283)** (f3b74d6)
- **GH-147985: Use lock-free lookup in `PySet_Contains` (#147986)** (9d087d6)
- **gh-142533: Document CRLF injection vulnerabilities in http.server doc (#143395)** (617f4cc)
- **GH-145247: Use _PyTuple_FromPair in Modules (part 2) (#148003)** (c1b20a6)
- **GH-145247: Use _PyTuple_FromPair in Modules (part 1) (#148000)** (0c10066)
- **gh-139038: Update JIT results in preparation for 3.15a8 (GH-148018)** (74a82a2)
- **GH-126910: Revert "Make `_Py_get_machine_stack_pointer` return the stack pointer (#147945)" (GH-147994)** (9b08f8c)
- **gh-147988: Initialize digits in long_alloc() in debug mode (#147989)** (c1a4112)
- **gh-146636: Py_mod_abi mandatory for modules created from slots array (GH-146855)** (a86963b)
- **gh-143394: Skip pyrepl test_no_newline() basic REPL if readline is missing (#147973)** (97babb8)
- **gh-146444: Remove legacy iOS folder (#147993)** (7817651)
- **gh-146656: properly raise `NotImplementedError` instead of `NotImplemented` in `test_discover` (#146661)** (c32e264)
- **GH-126910: Make `_Py_get_machine_stack_pointer` return the stack pointer (#147945)** (255026d)
- **gh-146488: hash-pin check-html-ids action references (#147968)** (9e5b838)
- **gh-146907: Clarify ABI compatibility between debug and release builds (GH-146925)** (03f3b9a)
- **gh-145000: Run `check-html-ids.py` in CI (#145632)** (08c5d3d)
- **Increase dependabot interval to quarterly (#147959)** (07d5d72)
- **gh-146488: hash-pin all action references** (a504c0a)
- **gh-146479: Skip test_frame_pointer_unwind for gcc -O3 --enable-shared (#147947)** (b38cfb7)
- **gh-147944: Increase range of bytes_per_sep (GH-147946)** (473d2a3)
- **gh-147856: Allow the 'count' argument of `bytes.replace()` to be a keyword (#147943)** (62a6e89)
- **gh-139109: Document the trace recording interpreter in internaldocs (GH-146110)** (362145c)
- **gh-143050: Correct PyLong_FromString() to use _PyLong_Negate() (#145901)** (db5936c)
- **gh-145458: use `self.skip_idle` consistently in the tachyon profiler (#145459)** (b4fac15)
- **gh-146376: Reduce timeout in Emscripten GHA workflow (#146378)** (70d1b08)
- **gh-139633: Run netrc file permission check only once per parse (GH-139634)** (a25e097)
- **gh-144270: Make SubElement parent and tag positional-only (GH-144845)** (afd8113)
- **gh-146558: JIT optimize dict access for objects with known hash (#146559)** (8e9d21c)
- **gh-139922: always run MSVC 64-bit tail-calling CI (GH-146570)** (76c554b)
- **gh-146416: Emscripten: Improve standard stream handling in node_entry.mjs (#146417)** (6857de6)
- **gh-146444: Don't package as part of iOS 'build hosts' target (#146628)** (6420847)
- **gh-146444: Make Platforms/Apple/ compatible with Python 3.9 (#146624)** (382c043)
- **gh-146083: Upgrade bundled Expat to 2.7.5 (#146085)** (e39d84a)
- **gh-145876: Do not mask KeyErrors raised during dictionary unpacking in call (GH-146472)** (6932c3e)
- **gh-139003: Use frozenset for module level attributes in _pyrepl.utils (#139004)** (1fd66ea)
- **`_pyrepl/pager.py`: call `less` with `--clear-screen` (#146382)** (087a5f6)
- **gh-146004: propagate all -X options to multiprocessing child processes (GH-146005)** (1efe441)
- **gh-146381: Constant-fold frozendict subscript lookups via REPLACE_OPCODE_IF_EVALUATES_PURE (gh-146490)** (5992238)
- **GH-145247: Use _PyTuple_FromPair[Steal] in Objects (#145884)** (a933e9c)
- **gh-145059: Record lazy modules without submodules in `sys.lazy_modules` (#146081)** (a5b9d60)
- **gh-126910: Verify that JIT stencils preserve frame pointer (GH-146524)** (1384f02)
- **GH-126910: avoid reading the FP for getting the SP (GH-146521)** (b60b926)
- **GH-126910: reserve FP on AArch64 when generating JIT stencils (GH-146520)** (6763d26)
- **Mention _Float16 (type from Annex H of the C23) in the struct docs (#146243)** (f89fafe)
- **gh-145866: Convert `LIST_EXTEND` to leave its inputs on the stack to be cleaned up by `_POP_TOP` be cleaned up by `_POP_TOP` (GH-146383)** (a492d9f)
- **gh-146507: cache the buffer size for `SelectorTransport.get_write_buffer_size()`  (#146518)** (1417737)
- **gh-123471: Make `itertools.zip_longest` safe in the FT build (#146033)** (9214e3f)

### Docs
- **Docs: Update "Installing Python modules" (#146249)** (acf5229)
- **Docs: Standardize documentation authors (#148102)** (75be902)
- **Docs: Fix a typo in the 'Non-ASCII characters in names' section (#148043)** (b1d2d98)
- **Docs: Use !r in __repr__ example (gh-146273)** (021ee7f)
- **Docs: fill in descriptor C API docs (GH-146644)** (9e1f164)
- **Docs: don't rely on implicit 'above' directions in socket docs (#146426)** (3ff5822)

### Chore
- **build(deps): bump qs from 6.14.0 to 6.15.0 in /Platforms/emscripten/browser_test (#146048)** (4497cf3)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/python/cpython?utm_source=github-action)._