chore(deps): update all dependencies #18

Open
renovate-forgejo wants to merge 1 commit from renovate/all into main
Collaborator

This PR contains the following updates:

Package Type Update Change
black (changelog) dependency-groups minor 26.5.1 → 26.10.1
https://code.forgejo.org/actions/checkout action digest fbc6f39 → de0fac2
mypy (changelog) project.optional-dependencies minor 2.3.1 → 2.4.0
numpy (changelog) project.dependencies patch 2.5.3 → 2.5.4
python (source) minor 3.14 → 3.15
python tools minor 3.14 → 3.15.0
ruff (source, changelog) project.optional-dependencies minor 0.16.9 → 0.17.0
ruff (source, changelog) dependency-groups minor 0.16.9 → 0.17.0
ty (changelog) dependency-groups patch 0.0.84 → 0.0.87
typer (changelog) project.dependencies patch 0.27.2 → 0.27.3
uv_build (source, changelog) build-system.requires minor >=0.12.0,<0.13.0 → >=0.13.0,<0.14.0

Release Notes

psf/black (black)

v26.10.1

Compare Source

Highlights

This release fixes a security issue in Black's bundled GitHub Action. Repositories that
use the action are encouraged to update to the latest version of Black immediately. This
update is received automatically when using psf/black@stable, and is independent of
the version of Black installed by the action.

When the GitHub Action reads version specifiers from tool.black.required-version, it
now only accepts released versions of Black, as it already did for black requirements
in dependency lists. Other values, such as URL references, are now rejected. This issue
has been registered as GHSA-cg8m-r9f2-5wm2; a CVE identifier is pending.

Stable style
  • Fix a long Jupyter notebook assignment magic (for example x = !ls -la) being wrapped
    in parentheses, which IPython can no longer run; such cells are now left unchanged
    (#​5481)
  • Keep repeated lines outside the selected --line-ranges unchanged (#​5436)
  • Fix --line-ranges formatting lines that follow a statement when formatting joins or
    re-indents that statement (#​5484)
  • Fix --line-ranges crashing with an internal error when an unselected statement has a
    # fmt: skip comment on the last line before a closing bracket (#​5477)
  • Prevent moving an encoding declaration (for example # -*- coding: latin-1 -*-) onto
    the first two lines of a file (#​5487)
  • Fix adding an extra trailing blank line inside a multi-line module docstring when its
    last line is near the line length limit (#​5494)
Preview style
  • Do not split short expressions on delimiters (such as binary operators, comparisons,
    or comprehensions) inside brackets when preceded by a standalone comment (#​5455)
  • Fix the unstable string_processing feature removing backslash-newline sequences from
    raw strings, which changed their value (#​5482)
  • Avoid adding unnecessary parentheses around unbreakable right-hand side expressions in
    assignments (such as annotated assignments or subscript targets) (#​5473)
  • Parenthesize expressions with parameter comments when they exceed the line length
    under --preview (#​5442)
  • Fix wrap_long_dict_values_in_parens dropping the parentheses around a right-hand
    side that contains a dictionary, leaving a line over the length limit (#​5492)
  • Fix the unstable string_processing feature adding a space after * or ** in a PEP
    695 type parameter (* Ts = ...) when it splits a string in the parameter's default
    (#​5504)
  • Avoid unnecessary line splits of trailers (such as indexing/subscripts) when an
    earlier bracket split exceeds the line length only due to a trailing comment (#​5498)
Configuration
  • Add --cache-dir to configure the cache directory from the command line (#​5433)
  • Don't cache a file as formatted after formatting or checking it with --line-ranges,
    which made a later full black --check pass and black skip the unformatted lines
    (#​5476)
  • Respect a .gitignore that starts with a UTF-8 byte order mark. The mark became part
    of the first pattern, so that pattern never matched and Black formatted files that git
    ignores (#​5497)
Performance
  • Avoid quadratic runtime when splitting very long lines with many trailing bracket
    pairs (such as consecutive subscripts) (#​5475)
Integrations
  • Fix the GitHub Action crashing on dependency-group includes when use_pyproject is
    enabled (#​5479)
  • When the GitHub Action reads version specifiers from tool.black.required-version, it
    now only accepts released versions of Black, as it already did for black
    requirements in dependency lists. Other values, such as URL references, are now
    rejected. (#​5510)

v26.10.0

Compare Source

Stable style
  • --line-ranges no longer inserts an empty line after a docstring when the range
    covers only the docstring itself (#​5312)
  • Fix # fmt: skip on a bracketed ternary turning the surrounding tuple into a call
    (#​5464)
  • Fix crash when # fmt: skip is placed on a one-line function or class with PEP 695
    type parameters (#​5429)
  • Fix an inline comment after the closing bracket of optional parentheses being moved
    inside the parentheses when the parenthesized expression contains own-line comments
    (#​5395)
  • Fix unparseable output when # fmt: skip is placed on a bracket of an if, while,
    for, or with header (#​5401, #​5405)
  • Fix crash when formatting parenthesized expressions with multiple inline comments and
    # fmt: skip (#​5414)
  • Fix parsing Jupyter notebook assignment magics when non-ASCII characters appear
    earlier on the line (#​5381)
  • Preserve blank lines that come immediately before a # fmt: on comment (#​5300)
  • Keep the parentheses around the target of an annotated assignment (e.g.
    (x): int = 5), which prevent CPython from including the name in __annotations__
    (#​5321)
  • Stop treating a t-string in docstring position as a docstring (e.g. t" spam " as
    the first statement of a module, class or function) (#​5287)
  • Fix unparseable output for a t-string whose replacement field contains a quote (e.g.
    t'\'{a["b"]}\'') (#​5265)
  • Fix unparseable output for a triple-quoted string whose body ends in an
    already-escaped double quote (e.g. '''\'''\"''') (#​5262)
  • Fix --skip-magic-trailing-comma dropping the trailing comma from a split
    single-element tuple used as a lambda parameter default (#​5246)
  • Fix unstable formatting when an inline comment sits on optional parentheses (e.g. a
    parenthesized assert message) (#​5241)
  • Fix --skip-magic-trailing-comma dropping the trailing comma of a one-element
    subscript (a[x,]) when the line is long enough to be split and contains a power
    operator (#​5272)
  • Fix crash when a standalone comment sits between tokens of a comprehension or lambda
    (#​5144)
  • Fix inline comments on a bracket inside a comprehension being dropped (#​5330)
  • Respect the magic trailing comma in a PEP 695 type parameter list containing a
    *TypeVarTuple or **ParamSpec (#​5244)
  • Fix crash when a comment-only # fmt: off/# fmt: on block is followed by a with
    statement after another standalone comment (#​5189)
  • Fix a crash when splitting case case if ... match patterns at very small line
    lengths (#​5147)
  • Fix multiline docstring indentation when leading tabs are used inside indented
    docstrings (#​5148)
  • Respect # fmt: skip on a line that opens a bracket (e.g.
    from x import ( # fmt: skip) when a standalone comment is among the bracket's
    contents (#​5161)
  • Fix an AST safety error when separate # type: ignore comments in a parenthesized
    attribute chain were merged onto one physical line (#​5297)
  • Preserve comments and blank lines outside requested ranges when formatting with
    --line-ranges (#​5175)
  • Fix crash when # fmt: skip is used on one-line async def, async with, and
    async for statements containing a semicolon (#​5311)
  • Stop converting form feeds or other similar characters in docstrings into newlines
    (#​5461)
  • Fix --skip-source-first-line turning the skipped line's CRLF ending into \r\r\n
    when reformatting a file with CRLF line endings (#​5438)
Preview style
New preview features
  • Add missing blank lines after classes whose last method has an ellipsis body (#​5439)
  • Split only the brackets holding a magic trailing comma when more trailers follow them
    (e.g. stop splitting inside the [2] of [1,][2](3)) (#​5448)
  • Keep dictionary keys containing operators together on one line when the value can be
    wrapped onto a new line instead (#​5435)
  • Remove redundant parentheses around individual variables in unpacking targets (e.g.
    for (x), (y) in points: becomes for x, y in points:) (#​5416)
  • Normalize uppercase T prefixes on t-strings to lowercase (#​5425)
  • Remove redundant parentheses around generator expressions (#​5304, #​5369)
  • Preserve two blank lines before a top-level class starting inside a # fmt: off block
    after an import (#​5238)
  • Fix unnecessary parentheses around short right-hand expressions in indexed assignments
    (e.g. x[key] = expr) (#​5095)
  • Parenthesize tuple expressions in yield statements for consistency with function
    calls and returns (#​5170)
  • Stop splitting between a variable and its operator (not in, ==, is, ...) when
    the right-hand side is a bracketed expression, and instead split inside the brackets
    (#​5135)
  • In .pyi stub files, enforce a blank line after a function or method that has a
    docstring-only body when another comment or statement follows it (#​5158)
Updates to existing preview features
  • Fix crash in stub files when # fmt: skip is placed on a function in a group of
    same-name decorated functions (e.g. @overloads or a property setter) (#​5430)
  • Keep the parentheses around a lambda used as the iterable of a comprehension (e.g.
    [x for x in (lambda: 0) if x]) (#​5176, #​5200)
Updates to existing unstable features
  • Do not treat multi-line expressions with merged strings and trailing # type: ignore
    comments as single-line unsplittable expressions (#​5466)
  • Fix duplicated inline comment when stripping the parentheses around a string or
    merging a backslash-continued string on the same line (#​5449)
  • Split long stringified return annotations even when the function has parameters
    (#​5427)
  • Don't hug brackets when doing so would join two # type: ignore comments onto one
    line (#​5271)
  • Fix a crash when # type: ignore is lost during formatting of a long parenthesized
    string (#​5329)
  • Fix only the first part of an implicitly concatenated unmergeable string (e.g.
    r"..." r"...") being wrapped in parentheses (#​5434)
Configuration
  • Add support for NO_COLOR environment variable to disable ANSI output (#​5129)
  • Remove spurious target version warning when runtime version is included in a
    --target-version flag (#​5167)
  • Fix --force-exclude not excluding files whose path contains .. (e.g.
    black ../generated/file.py run from a subdirectory) (#​5471)
  • Fall back to the default configuration, with a warning, when the given sources share
    no common project root (e.g. they are on different drives on Windows) instead of
    crashing (#​5386)
  • Fix loading a stale cached pyproject.toml path when --code is used from different
    working directories in the same process (#​5152)
  • Add validation for --line-ranges values (#​5107)
  • Ignore empty cache files instead of raising an EOFError (#​5192)
  • Reject non-string include and force-exclude values in pyproject.toml (#​5193)
  • Validate BLACK_NUM_WORKERS values and report invalid values as usage errors instead
    of crashing (#​5211)
  • Ignore permission errors when reading cache (#​5258)
Packaging
  • Reduce the size of Linux standalone binaries by stripping debug symbols during the
    PyInstaller release build (#​5223)
  • Black is now released using GitHub
    Immutable Releases
    (#​5296)
Performance
  • Fix superlinear runtime growth with the number of input files (#​5450)
  • Improve performance on strings containing many consecutive backslashes (#​5163)
  • Improve performance on files with many # fmt: skip/# fmt: off/# fmt: on comments
    (#​5169, #​5190, #​5232)
  • Improve performance on long calls and collections (#​5177)
  • Improve performance on multiline strings inside large collections (e.g. a dict literal
    with triple-quoted strings as values) (#​5188)
  • Improve performance on files with many soft keywords (e.g. match/case blocks)
    (#​5186)
  • Improve performance on long semicolon-separated statements (in the stable style) and
    large dict literals (in --preview) (#​5184)
  • Improve performance of --line-ranges on files with many sibling blocks (a long
    if/elif chain, a match with many cases, or many top-level definitions) (#​5213)
  • Improve performance on deeply nested bracketed expressions (#​5171, #​5242)
  • Improve performance on lists and subscripts holding one long expression without
    operators (e.g. a long run of implicitly concatenated strings inside []) (#​5239)
  • Improve performance on deeply chained operations (e.g. a long a ** b ** c ** ...
    chain) (#​5235)
  • Improve performance on long if/elif chains and other compound statements with many
    clauses (#​5322)
  • Improve performance of string_processing:
    • when merging implicitly concatenated f-strings containing long string literals
      (#​5165)
    • when merging long implicitly concatenated strings (#​5173, #​5194)
    • when rewriting large nodes (e.g. "%s ..." % (a, b, c, ...)) (#​5178, #​5199, #​5220)
    • when splitting long string literals (#​5183)
Output
  • Report parser failures using editor-friendly path:line:column locations (#​5237)
  • Fix crash when writing formatted code or diffs to a sys.stdout that has no buffer
    attribute (e.g. in Jupyter notebooks) (#​5411)
  • Report parse failures on Black's own output as internal errors (#​5383)
Blackd
  • Return HTTP 400 instead of 500 when the X-Python-Variant header is empty or has an
    empty entry (e.g. a trailing comma) (#​5428)
  • Allow optional whitespace around comma-separated versions and pyi in the
    X-Python-Variant header (#​5441)
Integrations
  • Remove unused migrate-black script (#​5319)
  • Support PEP 440 version specifiers in tool.black.required-version for the GitHub
    Action (#​5399)
  • Add outputs (is_formatted, change_count, same_count, failure_count) to GitHub
    Action runs (#​5408)
Documentation
  • Document vim-python-pep8-indent, which provides an indentexpr for Black-style
    insert-mode indentation (#​5288)
python/mypy (mypy)

v2.4.0

Compare Source

numpy/numpy (numpy)

v2.5.4: (Oct 10, 2026)

Compare Source

NumPy 2.5.4 Release Notes

Released on 2026-10-10.

NumPy 2.5.4 is a patch release that fixes bugs discovered after the 2.5.3
release. Highlights are:

  • Many typing fixes and improvements,
  • A workaround for the MSVC 19.51 bug, see below.

This release supports Python versions 3.12-3.15.

Improvements

  • numpy.linalg.svd and numpy.linalg.lstsq now raise for inputs containing
    infinities instead of returning garbage results.

  • Fixed hangs in numpy.linalg.svd and numpy.linalg.lstsq for certain inputs
    containing infinities for recent versions of some LAPACK implementations.

  • numpy.linalg.cond now handles non-finite inputs more consistently.

(gh-32593)

StringDType hashing with NaN sentinels

StringDType instances with equivalent floating-point NaN sentinels now
have equal hashes. Previously, distinct NaN objects could produce equal
dtype instances with different hashes, causing dictionary lookups and set
deduplication to fail.

(gh-32563)

Changes

MaskedArray resets a fill_value that cannot be represented in a new dtype

A fill_value copied from a source array is now reset to the default fill_value
for the new dtype when it cannot be represented in that dtype. Previously the
copied value could be stale: ufuncs that change dtype left the result holding a
fill_value typed for the old dtype, which raised a TypeError only when
something later validated it (such as .view()), and a floating point
fill_value that overflows an integer dtype was kept as an out-of-range value
together with a RuntimeWarning. Both now fall back to the default,
including when a masked array is passed to MaskedArray with a different
dtype. A fill_value given explicitly by the user is still validated and
raises as before. This can now raise a ComplexWarning if the fill_value is
complex and the new dtype is real.

(gh-32508)
(gh-32562)

Contributors

A total of 9 people contributed to this release. People with a "+" by their
names contributed a patch for the first time.

  • Aniket Singh Yadav
  • Bhuvansh Kataria +
  • Charles Harris
  • Iason Krommydas
  • Joren Hammudoglu
  • Lazizbek Ergashev +
  • Nathan Goldbaum
  • Sebastian Berg
  • Yeonho Kim

Pull requests merged

A total of 17 pull requests were merged for this release.

  • #​32520: MAINT: Prepare 2.5.x for further development
  • #​32557: BUG: Reset an unrepresentable fill_value on a dtype change (#​32508)
  • #​32565: BLD: work around MSVC 19.51 bug (#​32561)
  • #​32600: BUG: fix np.strings.replace truncating old/new to a's
  • #​32707: BUG: fix [ureduce]{#ureduce} reshape when a kept axis has size 0 (#​32536)
  • #​32709: BUG: fix two possible crashes in the ufunc.accumulate implementation...
  • #​32710: BUG: Reset an inherited fill_value in MaskedArray.__new__ as...
  • #​32711: ENH: Improvements and fixes for stringdtype hashing (#​32563)
  • #​32713: CI: increase ppc64le timeout to match other timeouts (#​32583)
  • #​32718: BUG: fix memory leak in legacy ArrayMethod wrapper code
  • #​32719: BUG: check for non-finite input before calling gesdd/gelsd and...
  • #​32738: BUG: fix segfault in as_arrays() on self-referencing pyscalars
  • #​32741: TYP: Various typing improvements.
  • #​32791: BUG: Fix canonicalization/promotion of nested subarray types...
  • #​32888: MAINT: Update vendored-meson to match main.
  • #​32904: TYP: Backport a number of typing updates.
  • #​32956: TYP: Various typing fixes and improvements.
python/cpython (python)

v3.15.0

Compare Source

astral-sh/ruff (ruff)

v0.17.0

Compare Source

Released on 2026-10-09.

The executables in our macOS and Windows release archives and ruff wheels are now code-signed.
macOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows
executables have timestamped Authenticode signatures from Azure Artifact Signing. This enables
verification of the release publisher and binary integrity, supports publisher-based allowlisting,
and should reduce security warnings and antivirus false positives.

Breaking changes
  • Update the default and latest Python versions for 3.15 (#​28792)

    Ruff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through
    target-version or
    requires-python. When
    checking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15
    instead of 3.14.

  • Update the default rule set (#​28786)

    Several of the flake8-datetimez rules
    (DTZ001,
    DTZ005,
    DTZ006,
    DTZ007,
    DTZ011,
    DTZ012, and
    DTZ901) are no longer enabled by default,
    while undefined-local-with-nested-import-star-usage
    (F406), which corresponds to a syntax error, is now enabled by default.

  • Update Rust crate quick-junit to 0.8.0 (#​27295)

    JUnit output now uses a skipped attribute instead of disabled on <testsuite> elements and
    includes a skipped attribute on the root <testsuites> element.

  • [flake8-import-conventions] Add datetime as dt as a conventional alias (ICN001) (#​28790)

  • Support Unicode dummy variable names (#​28722)

    The default lint.dummy-variable-rgx
    now recognizes underscore-prefixed Unicode names, such as _次, as dummy variables.

  • Update to Unicode 17 (#​21229, #​28784)

    Ruff now uses Unicode 17 data for identifier normalization and named character escapes ("\N{...}").

  • Always show unsafe and display-only fixes in the CLI (#​27810)

    The default full output format now shows unsafe fixes and suggestions requiring manual review,
    regardless of the unsafe-fixes setting.
    Actually applying unsafe fixes still requires explicit opt-in.

  • Remove the Python dependency from conda-forge builds (conda-forge/ruff-feedstock#361)

    The conda-forge build no longer depends on Python, now supports linux-riscv64, win-arm64, and
    linux-ppc64le platforms, and now includes shell completions. However, no longer depending on
    Python means that python -m ruff and import ruff will no longer work. Use ruff directly from
    PATH instead. PyPI installations and those from the standalone installer are unaffected.

  • Remove support for ruff-lsp (#​28750)

    Support for ruff-lsp, the legacy Python language server deprecated in Ruff
    v0.9.5
    , has been removed. The Ruff VS Code
    extension now always uses the native language server; ruff.nativeServer is deprecated and
    ignored. See the migration guide.

Stabilization

The following rules have been stabilized and are no longer in preview:

The following behaviors have been stabilized:

  • The formatter, unsorted-imports (I001),
    line-too-long (E501), and
    doc-line-too-long (W505) now
    consistently ignore trailing pragma comments when computing line length. This resolved several
    bugs involving interactions between these rules
    (#​27313) but may also cause existing imports to be
    reformatted and was thus classified as a breaking change.
Preview features
  • [flake8-bugbear] Report the method name and a more precise range (B005) (#​27050)
  • [refurb] Mark fix unsafe and move to suspicious (FURB152) (#​28405)
  • [ruff] Allow docstrings in strict mode (RUF067) (#​28679)
Bug fixes
  • [flake8-builtins] Expand checks in class scopes (A001) (#​29076)
  • [flake8-self] Allow private access on object.__new__(cls) instances (SLF001) (#​29001)
  • [flake8-tidy-imports] Skip lazy-import-mismatch in stubs (TID254) (#​29095)
  • [flake8-type-checking] Add the notion of runtime-ambiguous references (#​26508)
  • [flake8-type-checking] Never flag annotations in function scopes (#​29183)
  • [pyflakes] Mark the fix as unsafe when it creates a docstring (F541) (#​28258)
  • [pylint] Preserve trailing comments in useless-return fix (PLR1711) (#​29180)
  • [ruff] Avoid false positive when pytest.raises is used in a with statement (RUF061) (#​28186)
Rule changes
  • [pyupgrade] Suggest typing.TypeForm on Python 3.15 (UP035) (#​29084)
Contributors

v0.16.10

Compare Source

Release Notes

Released on 2026-10-01.

Preview features
  • Add a migration guide for categories (#​28087)
  • [pyupgrade] Add rule for context manager iterator annotations (UP052) (#​29000)
Performance
  • Reduce memory used by diagnostics (#​28951)
Server
  • Avoid running uv format in untrusted workspaces (#​28873)
Documentation
  • Fix links to moved changelog sections and renamed mdtests (#​28941)
  • Add Python 3.15 as a supported version (#​28907)
  • Add ty as a type checker example (#​28906)
Other changes
  • Update Rust toolchain to 1.99 and MSRV to 1.97 (#​29047)
Contributors
Install ruff 0.16.10
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-installer.ps1 | iex"
Download ruff 0.16.10
File Platform Checksum
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum
Verifying GitHub Artifact Attestations

The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:

gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff

You can also download the attestation from GitHub and verify against that directly:

gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
astral-sh/ty (ty)

v0.0.87

Compare Source

Released on 2026-10-13.

LSP server
  • Clamp notebook cell positions to the end of the cell (#​29307)
  • Fix deadlock when requests arrive before workspace configuration (#​29303)
  • Fix notebook cell lookups after cells with cell magics (#​29308)
  • Fix panic on completions past the end of a notebook's last cell (#​29306)
Diagnostic improvements
  • Add opt-in mismatched-sentinel-name rule (#​27206)
  • Deduplicate identical argument type diagnostics (#​29337)
  • Enable invalid-mutable-override by default (#​29335)
  • Improve display of distinct string literal types (#​29206)
  • Respect suppression of attribute override diagnostics (#​29327)
Core type checking
  • Check overrides of receiver attribute declarations (#​28557)
  • Infer the default for definitely absent keys in closed TypedDict.get calls (#​29136)
  • Leave room for later positional arguments when unpacking a variable-length argument (#​29293)
  • Preserve minimum lengths of unpacked tuple unions (#​29331)
  • Specialize bare generic class name with type[...] type context (#​29248)
Performance
  • Avoid constructing nominal complements (#​29292)
  • Optimize system path equality (#​29340)
Contributors

v0.0.86

Compare Source

Released on 2026-10-09.

The executables in our macOS and Windows release archives and ty wheels are now code-signed.
macOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows
executables have timestamped Authenticode signatures from Azure Artifact Signing. This enables
verification of the release publisher and binary integrity, supports publisher-based allowlisting,
and should reduce security warnings and antivirus false positives.

Bug fixes
  • Infer empty collection branches from nonempty literals (#​29131)
  • Invalidate dependency metadata when environments change (#​29126)
  • Preserve final attribute restrictions on composite types (#​29135)
  • Preserve recursive structure in Annotated values (#​29058)
  • Specialize inherited dataclass field converters (#​29192)
LSP server
  • Show documentation for annotation operators on hover (#​29185)
Core type checking
  • Check attribute and property override types (#​28556)
  • Narrow tuple unions through truthiness and type checks (#​29125)
  • Preserve literal types when consuming dictionary literals (#​29145)
  • Preserve non-boolean comparison results for intersections (#​28045)
  • Preserve receiver specializations when calling unions of bound methods (#​29015)
  • Represent uninhabited truthiness explicitly (#​28843)
  • Solve validity type context through constraint sets (#​28909)
Performance
  • Avoid recursion guards for non-generic nominal targets (#​29202)
  • Check exact exclusions before intersection positives (#​29195)
Memory usage improvements
  • Share constraints in retained sequent maps (#​28966)
Other changes
Contributors

v0.0.85

Compare Source

Released on 2026-10-06.

Preview features
  • Refresh uv project metadata when uv files change (#​28529)
Bug fixes
  • Avoid recursive lambda class decorator panics (#​28984)
  • Compare observable notebook state for equality (#​28874)
  • Detect recursive alias cycles through intersections (#​28916)
  • Fix anchoring of include and exclude patterns after the project's root changed (#​28995)
  • Fix stack overflow when inferring dynamic class metaclasses (#​28917)
  • Normalize recursive dataclass transform metadata (#​28920)
  • Normalize recursive TypedDicts during cycle recovery (#​28918)
  • Preserve cycle markers in ParamSpec specialization (#​29024)
CLI
  • Prefer existing @​ paths over response files in Ruff and ty (#​28877)
LSP server
  • Add namespace package support to import completions. (#​28202)
  • Avoid stale I/O diagnostics when closing deleted files (#​28988)
  • Contain rendered code within Markdown fences (#​28869)
  • Refresh Python settings when virtual environments change (#​28650)
Diagnostic improvements
  • Add opt-in truthiness-test-of-none-union rule (#​28889)
  • Avoid disjoint-cast diagnostics in situations where the value could have been inferred as being compatible with the casted type if it had only been inferred with the right type context (#​28851)
  • Bound nested callable signature display (#​29049)
  • Explain outdated uv versions in metadata errors (#​28959)
  • Improve display of string literal types that include unicode characters or double quotes (#​29089)
  • Improve uv metadata diagnostics (#​28990)
  • Preserve constrained type-variable failure diagnostics (#​28768)
  • Preserve generic inference errors during diagnostic recovery (#​28811)
  • Report deprecated overloads in decorator applications (#​28999)
Core type checking
  • Bound methods without a receiver are not callable (#​28981)
  • Fix member lookup on union-bounded type variables (#​29018)
  • Fix type variable inference for final class objects (#​29097)
  • Freshen ParamSpec identities consistently (#​28826)
  • Honor generic property setters in protocol compatibility (#​28562)
  • Infer nominal generic specializations from bounded type variables (#​28812)
  • Inherit annotations for unannotated subclass defaults (#​28575)
  • Keep unresolved TypeIs targets provisional (#​29066)
  • Limit wildcard exports using literal __all__ (#​28972)
  • Narrow later match cases after always-true guards (#​28960)
  • Pass generic context to call inference solver (#​29065)
  • Preserve captured variables in ParamSpec comparisons (#​28827)
  • Preserve intersection receivers in implicit dunder calls (#​28833)
  • Preserve literal unpacking during call analysis (#​28821)
  • Preserve recursive type context during constructor inference (#​28903)
  • Preserve tuple shapes when slicing NewTypes (#​29091)
  • Preserve tuple subclass identity during type expansion (#​29090)
  • Promote bounded type variables to declared constraints (#​28814)
  • Propagate outer type context through cast calls (#​28855)
  • Recognize bare TypeVarTuples in materialization checks (#​28815)
  • Retain individual overload argument expansion outcomes (#​28825)
  • Specialize instance members once (#​29043)
  • Specialize Self bounds through generic type aliases (#​28890)
  • Support slots_default in dataclass_transform (#​28885)
  • Sync vendored typeshed stubs (#​29032). Typeshed diff
  • Sync vendored typeshed stubs (#​29042). Typeshed diff
  • Validate call arguments once after inference (#​28824)
  • Validate union operands involving None (#​28931)
Performance
  • Avoid expanding recursive protocol materializations (#​29026)
  • Avoid repeated work in nested match patterns (#​28926)
  • Cache the flattened module list (#​28932)
  • Index nonlocal bindings when sweeping snapshots (#​28935)
  • Skip descendant searches for leaf modules (#​28845)
  • Skip independent constraint-pair derivation (#​28950)
  • Skip storing default definition states (#​28934)
Memory usage improvements
  • Avoid caching empty sequent maps (#​28949)
  • Avoid retaining docstring literal types (#​28944)
  • Compact bound-method receivers (#​28969)
  • Move ParamSpec signature metadata to extras (#​28970)
  • Release closed module ASTs synchronously during auto-import discovery (#​28714)
  • Skip caching trivially assignable types (#​28936)
Contributors
fastapi/typer (typer)

v0.27.3

Compare Source

Fixes
Internal
astral-sh/uv (uv_build)

v0.13.0

Compare Source

Released on 2026-10-09.

uv 0.13.0 makes Python 3.15 the default stable Python version. We've also included several breaking changes to improve correctness, performance, and compatibility, described below.

We expect most users to be able to upgrade without making changes.

While not a breaking change, this release also updates the format of many of uv's cache entries to improve performance. uv may download or rebuild dependencies after upgrading, because some cached entries from earlier versions cannot be reused. Multiple versions of uv can still safely share the same cache directory.

There are no breaking changes to the configuration of the uv build backend. If your [build-system] table includes an upper bound on uv_build, update it to allow uv_build 0.13, e.g., uv_build>=0.13.0,<0.14.

Breaking changes
  • Use Python 3.15 as the default stable version

    The default stable Python version has changed from 3.14 to 3.15. This affects Python downloads when no version is requested or pinned, e.g., when running uv python install.

    uv continues to use compatible Python installations that are already present. For example, uv venv can still use an installed Python 3.14. If no suitable interpreter is installed and automatic downloads are enabled, commands such as uv venv and uvx python can now download Python 3.15.

    You can opt out of this behavior by requesting Python 3.14 explicitly, e.g., uv venv --python 3.14. For projects, use uv python pin 3.14 to record the version in .python-version.

  • Honor --require-hashes in included constraints files (#​22275)

    Previously, uv ignored --require-hashes in constraints files included with -c from a requirements file. Now, uv honors the directive and requires hashes for all requirements in the installation. Installs that previously succeeded can now fail if a requirement is missing a hash.

    You cannot opt out while the directive is present. Add the missing hashes to your requirements, or remove the --require-hashes directive from the included constraints file if hash checking is not intended.

  • Prefer native Python on Windows ARM64 (#​22100)

    Previously, ARM64 builds of uv preferred emulated x86_64 Python installations because native wheel support was limited. Now, uv prefers native ARM64 (aarch64) interpreters across Python versions.

    This follows similar changes in CPython, the official Windows Python install manager, and GitHub's actions/setup-python.

    When a native interpreter is unavailable, uv continues to fall back to x86_64, then 32-bit x86.

    You can opt out of this behavior by setting UV_PYTHON_ARCH=x86_64 or requesting an explicit architecture, e.g., cpython-3.14-windows-x86_64. If you are using setup-uv, you can set python-arch: x86_64 instead.

  • Reject editable requirements in included constraints files (#​22282)

    Previously, uv silently ignored editable (-e) requirements in constraints files included with -c from a requirements file. Now, uv rejects these requirements with an error, matching pip's behavior.

    You cannot opt out of this behavior. Move editable requirements to a requirements file passed with -r, or pass them directly with --editable, instead of including them in a constraints file.

  • Omit the distutils startup patch on Python 3.10 and later (#​22096)

    Previously, uv installed _virtualenv.py and _virtualenv.pth into every new virtual environment to prevent distutils configuration from changing installation paths. Now, like virtualenv 21.6.0, uv omits these files on Python 3.10 and later, which already ignore the affected configuration keys. This reduces Python startup overhead. Python 3.9 and earlier retain the patch.

    You cannot opt out of this behavior. Existing virtual environments are not modified automatically. Recreate an environment with Python 3.10 or later to remove the patch.

    This stabilizes the no-distutils-patch preview feature.

  • Treat requirement-file option values as single paths (#​22290)

    Previously, uv split values passed to --constraint, --override, --exclude, and --build-constraint on spaces, even when quoted. Now, each value is treated as a single path, allowing file paths containing spaces.

    You cannot opt out of this behavior. Repeat the option to provide multiple files. For example, replace -c "a.txt b.txt" with -c a.txt -c b.txt.

    Space-separated lists in UV_CONSTRAINT, UV_OVERRIDE, UV_EXCLUDE, and UV_BUILD_CONSTRAINT remain supported.

  • Use tar-codec for tar archives by default (#​22094)

    Previously, uv used astral-tokio-tar to extract tar archives, build source distributions with uv_build, and read their metadata for uv publish. Now, uv uses tar-codec, which applies stricter validation when reading archives.

    uv may now reject archives containing hard links or unsupported tar extensions that previous versions accepted. Source distributions created by uv_build can also have different archive bytes and hashes.

    You can opt out of this behavior by setting UV_LEGACY_TAR_BACKEND=1.

    This stabilizes the tar-codec preview feature.

  • Reject uv build --clear output directories that contain a build source
    (#​22276)

    Previously, uv build --clear could delete a project or input source distribution when the
    output directory contained the source. Now, uv rejects these output directories, including
    equivalent paths reached through symlinks, before clearing any build output.

    Select an output directory that does not contain any build sources, or omit --clear.

Python
Preview features
  • Require hashes for build dependencies, including transitive dependencies, with --require-build-hashes (#​21411)
Performance
  • Speed up revalidation of cached HTTP responses by avoiding rewrites of unchanged payloads (#​22130)
  • Reduce allocations when reading cached HTTP responses (#​22136)
  • Reduce cache storage for HTTP policies and package records (#​22135, #​22133)
  • Reduce allocations for cached source distribution revisions (#​22131)
Bug fixes
  • Fix incorrect dependency resolution when reusing source metadata with different build settings (#​22404)
  • Avoid overlong wheel cache lock filenames on Windows (#​22134)

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [black](https://github.com/psf/black) ([changelog](https://github.com/psf/black/blob/main/CHANGES.md)) | dependency-groups | minor | `26.5.1` → `26.10.1` | | https://code.forgejo.org/actions/checkout | action | digest | `fbc6f39` → `de0fac2` | | [mypy](https://github.com/python/mypy) ([changelog](https://mypy.readthedocs.io/en/latest/changelog.html)) | project.optional-dependencies | minor | `2.3.1` → `2.4.0` | | [numpy](https://github.com/numpy/numpy) ([changelog](https://numpy.org/doc/stable/release)) | project.dependencies | patch | `2.5.3` → `2.5.4` | | [python](https://hub.docker.com/_/python) ([source](https://github.com/docker-library/python)) | | minor | `3.14` → `3.15` | | [python](https://github.com/python/cpython) | tools | minor | `3.14` → `3.15.0` | | [ruff](https://docs.astral.sh/ruff) ([source](https://github.com/astral-sh/ruff), [changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)) | project.optional-dependencies | minor | `0.16.9` → `0.17.0` | | [ruff](https://docs.astral.sh/ruff) ([source](https://github.com/astral-sh/ruff), [changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)) | dependency-groups | minor | `0.16.9` → `0.17.0` | | [ty](https://github.com/astral-sh/ty) ([changelog](https://github.com/astral-sh/ty/blob/main/CHANGELOG.md)) | dependency-groups | patch | `0.0.84` → `0.0.87` | | [typer](https://github.com/fastapi/typer) ([changelog](https://typer.tiangolo.com/release-notes/)) | project.dependencies | patch | `0.27.2` → `0.27.3` | | [uv_build](https://pypi.org/project/uv/) ([source](https://github.com/astral-sh/uv), [changelog](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md)) | build-system.requires | minor | `>=0.12.0,<0.13.0` → `>=0.13.0,<0.14.0` | --- ### Release Notes <details> <summary>psf/black (black)</summary> ### [`v26.10.1`](https://github.com/psf/black/blob/HEAD/CHANGES.md#Version-26101) [Compare Source](https://github.com/psf/black/compare/26.10.0...26.10.1) ##### Highlights This release fixes a security issue in Black's bundled GitHub Action. Repositories that use the action are encouraged to update to the latest version of Black immediately. This update is received automatically when using `psf/black@stable`, and is independent of the version of Black installed by the action. When the GitHub Action reads version specifiers from `tool.black.required-version`, it now only accepts released versions of Black, as it already did for `black` requirements in dependency lists. Other values, such as URL references, are now rejected. This issue has been registered as `GHSA-cg8m-r9f2-5wm2`; a CVE identifier is pending. ##### Stable style - Fix a long Jupyter notebook assignment magic (for example `x = !ls -la`) being wrapped in parentheses, which IPython can no longer run; such cells are now left unchanged ([#&#8203;5481](https://github.com/psf/black/issues/5481)) - Keep repeated lines outside the selected `--line-ranges` unchanged ([#&#8203;5436](https://github.com/psf/black/issues/5436)) - Fix `--line-ranges` formatting lines that follow a statement when formatting joins or re-indents that statement ([#&#8203;5484](https://github.com/psf/black/issues/5484)) - Fix `--line-ranges` crashing with an internal error when an unselected statement has a `# fmt: skip` comment on the last line before a closing bracket ([#&#8203;5477](https://github.com/psf/black/issues/5477)) - Prevent moving an encoding declaration (for example `# -*- coding: latin-1 -*-`) onto the first two lines of a file ([#&#8203;5487](https://github.com/psf/black/issues/5487)) - Fix adding an extra trailing blank line inside a multi-line module docstring when its last line is near the line length limit ([#&#8203;5494](https://github.com/psf/black/issues/5494)) ##### Preview style - Do not split short expressions on delimiters (such as binary operators, comparisons, or comprehensions) inside brackets when preceded by a standalone comment ([#&#8203;5455](https://github.com/psf/black/issues/5455)) - Fix the unstable `string_processing` feature removing backslash-newline sequences from raw strings, which changed their value ([#&#8203;5482](https://github.com/psf/black/issues/5482)) - Avoid adding unnecessary parentheses around unbreakable right-hand side expressions in assignments (such as annotated assignments or subscript targets) ([#&#8203;5473](https://github.com/psf/black/issues/5473)) - Parenthesize expressions with parameter comments when they exceed the line length under `--preview` ([#&#8203;5442](https://github.com/psf/black/issues/5442)) - Fix `wrap_long_dict_values_in_parens` dropping the parentheses around a right-hand side that contains a dictionary, leaving a line over the length limit ([#&#8203;5492](https://github.com/psf/black/issues/5492)) - Fix the unstable `string_processing` feature adding a space after `*` or `**` in a PEP 695 type parameter (`* Ts = ...`) when it splits a string in the parameter's default ([#&#8203;5504](https://github.com/psf/black/issues/5504)) - Avoid unnecessary line splits of trailers (such as indexing/subscripts) when an earlier bracket split exceeds the line length only due to a trailing comment ([#&#8203;5498](https://github.com/psf/black/issues/5498)) ##### Configuration - Add `--cache-dir` to configure the cache directory from the command line ([#&#8203;5433](https://github.com/psf/black/issues/5433)) - Don't cache a file as formatted after formatting or checking it with `--line-ranges`, which made a later full `black --check` pass and `black` skip the unformatted lines ([#&#8203;5476](https://github.com/psf/black/issues/5476)) - Respect a `.gitignore` that starts with a UTF-8 byte order mark. The mark became part of the first pattern, so that pattern never matched and Black formatted files that git ignores ([#&#8203;5497](https://github.com/psf/black/issues/5497)) ##### Performance - Avoid quadratic runtime when splitting very long lines with many trailing bracket pairs (such as consecutive subscripts) ([#&#8203;5475](https://github.com/psf/black/issues/5475)) ##### Integrations - Fix the GitHub Action crashing on dependency-group includes when `use_pyproject` is enabled ([#&#8203;5479](https://github.com/psf/black/issues/5479)) - When the GitHub Action reads version specifiers from `tool.black.required-version`, it now only accepts released versions of Black, as it already did for `black` requirements in dependency lists. Other values, such as URL references, are now rejected. ([#&#8203;5510](https://github.com/psf/black/issues/5510)) ### [`v26.10.0`](https://github.com/psf/black/blob/HEAD/CHANGES.md#Version-26100) [Compare Source](https://github.com/psf/black/compare/26.5.1...26.10.0) ##### Stable style - `--line-ranges` no longer inserts an empty line after a docstring when the range covers only the docstring itself ([#&#8203;5312](https://github.com/psf/black/issues/5312)) - Fix `# fmt: skip` on a bracketed ternary turning the surrounding tuple into a call ([#&#8203;5464](https://github.com/psf/black/issues/5464)) - Fix crash when `# fmt: skip` is placed on a one-line function or class with PEP 695 type parameters ([#&#8203;5429](https://github.com/psf/black/issues/5429)) - Fix an inline comment after the closing bracket of optional parentheses being moved inside the parentheses when the parenthesized expression contains own-line comments ([#&#8203;5395](https://github.com/psf/black/issues/5395)) - Fix unparseable output when `# fmt: skip` is placed on a bracket of an `if`, `while`, `for`, or `with` header ([#&#8203;5401](https://github.com/psf/black/issues/5401), [#&#8203;5405](https://github.com/psf/black/issues/5405)) - Fix crash when formatting parenthesized expressions with multiple inline comments and `# fmt: skip` ([#&#8203;5414](https://github.com/psf/black/issues/5414)) - Fix parsing Jupyter notebook assignment magics when non-ASCII characters appear earlier on the line ([#&#8203;5381](https://github.com/psf/black/issues/5381)) - Preserve blank lines that come immediately before a `# fmt: on` comment ([#&#8203;5300](https://github.com/psf/black/issues/5300)) - Keep the parentheses around the target of an annotated assignment (e.g. `(x): int = 5`), which prevent CPython from including the name in `__annotations__` ([#&#8203;5321](https://github.com/psf/black/issues/5321)) - Stop treating a t-string in docstring position as a docstring (e.g. `t" spam "` as the first statement of a module, class or function) ([#&#8203;5287](https://github.com/psf/black/issues/5287)) - Fix unparseable output for a t-string whose replacement field contains a quote (e.g. `t'\'{a["b"]}\''`) ([#&#8203;5265](https://github.com/psf/black/issues/5265)) - Fix unparseable output for a triple-quoted string whose body ends in an already-escaped double quote (e.g. `'''\'''\"'''`) ([#&#8203;5262](https://github.com/psf/black/issues/5262)) - Fix `--skip-magic-trailing-comma` dropping the trailing comma from a split single-element tuple used as a lambda parameter default ([#&#8203;5246](https://github.com/psf/black/issues/5246)) - Fix unstable formatting when an inline comment sits on optional parentheses (e.g. a parenthesized assert message) ([#&#8203;5241](https://github.com/psf/black/issues/5241)) - Fix `--skip-magic-trailing-comma` dropping the trailing comma of a one-element subscript (`a[x,]`) when the line is long enough to be split and contains a power operator ([#&#8203;5272](https://github.com/psf/black/issues/5272)) - Fix crash when a standalone comment sits between tokens of a comprehension or lambda ([#&#8203;5144](https://github.com/psf/black/issues/5144)) - Fix inline comments on a bracket inside a comprehension being dropped ([#&#8203;5330](https://github.com/psf/black/issues/5330)) - Respect the magic trailing comma in a PEP 695 type parameter list containing a `*TypeVarTuple` or `**ParamSpec` ([#&#8203;5244](https://github.com/psf/black/issues/5244)) - Fix crash when a comment-only `# fmt: off`/`# fmt: on` block is followed by a `with` statement after another standalone comment ([#&#8203;5189](https://github.com/psf/black/issues/5189)) - Fix a crash when splitting `case case if ...` match patterns at very small line lengths ([#&#8203;5147](https://github.com/psf/black/issues/5147)) - Fix multiline docstring indentation when leading tabs are used inside indented docstrings ([#&#8203;5148](https://github.com/psf/black/issues/5148)) - Respect `# fmt: skip` on a line that opens a bracket (e.g. `from x import ( # fmt: skip`) when a standalone comment is among the bracket's contents ([#&#8203;5161](https://github.com/psf/black/issues/5161)) - Fix an AST safety error when separate `# type: ignore` comments in a parenthesized attribute chain were merged onto one physical line ([#&#8203;5297](https://github.com/psf/black/issues/5297)) - Preserve comments and blank lines outside requested ranges when formatting with `--line-ranges` ([#&#8203;5175](https://github.com/psf/black/issues/5175)) - Fix crash when `# fmt: skip` is used on one-line `async def`, `async with`, and `async for` statements containing a semicolon ([#&#8203;5311](https://github.com/psf/black/issues/5311)) - Stop converting form feeds or other similar characters in docstrings into newlines ([#&#8203;5461](https://github.com/psf/black/issues/5461)) - Fix `--skip-source-first-line` turning the skipped line's CRLF ending into `\r\r\n` when reformatting a file with CRLF line endings ([#&#8203;5438](https://github.com/psf/black/issues/5438)) ##### Preview style ##### New preview features - Add missing blank lines after classes whose last method has an ellipsis body ([#&#8203;5439](https://github.com/psf/black/issues/5439)) - Split only the brackets holding a magic trailing comma when more trailers follow them (e.g. stop splitting inside the `[2]` of `[1,][2](3)`) ([#&#8203;5448](https://github.com/psf/black/issues/5448)) - Keep dictionary keys containing operators together on one line when the value can be wrapped onto a new line instead ([#&#8203;5435](https://github.com/psf/black/issues/5435)) - Remove redundant parentheses around individual variables in unpacking targets (e.g. `for (x), (y) in points:` becomes `for x, y in points:`) ([#&#8203;5416](https://github.com/psf/black/issues/5416)) - Normalize uppercase `T` prefixes on t-strings to lowercase ([#&#8203;5425](https://github.com/psf/black/issues/5425)) - Remove redundant parentheses around generator expressions ([#&#8203;5304](https://github.com/psf/black/issues/5304), [#&#8203;5369](https://github.com/psf/black/issues/5369)) - Preserve two blank lines before a top-level class starting inside a `# fmt: off` block after an import ([#&#8203;5238](https://github.com/psf/black/issues/5238)) - Fix unnecessary parentheses around short right-hand expressions in indexed assignments (e.g. `x[key] = expr`) ([#&#8203;5095](https://github.com/psf/black/issues/5095)) - Parenthesize tuple expressions in `yield` statements for consistency with function calls and returns ([#&#8203;5170](https://github.com/psf/black/issues/5170)) - Stop splitting between a variable and its operator (`not in`, `==`, `is`, ...) when the right-hand side is a bracketed expression, and instead split inside the brackets ([#&#8203;5135](https://github.com/psf/black/issues/5135)) - In `.pyi` stub files, enforce a blank line after a function or method that has a docstring-only body when another comment or statement follows it ([#&#8203;5158](https://github.com/psf/black/issues/5158)) ##### Updates to existing preview features - Fix crash in stub files when `# fmt: skip` is placed on a function in a group of same-name decorated functions (e.g. `@overload`s or a property setter) ([#&#8203;5430](https://github.com/psf/black/issues/5430)) - Keep the parentheses around a lambda used as the iterable of a comprehension (e.g. `[x for x in (lambda: 0) if x]`) ([#&#8203;5176](https://github.com/psf/black/issues/5176), [#&#8203;5200](https://github.com/psf/black/issues/5200)) ##### Updates to existing unstable features - Do not treat multi-line expressions with merged strings and trailing `# type: ignore` comments as single-line unsplittable expressions ([#&#8203;5466](https://github.com/psf/black/issues/5466)) - Fix duplicated inline comment when stripping the parentheses around a string or merging a backslash-continued string on the same line ([#&#8203;5449](https://github.com/psf/black/issues/5449)) - Split long stringified return annotations even when the function has parameters ([#&#8203;5427](https://github.com/psf/black/issues/5427)) - Don't hug brackets when doing so would join two `# type: ignore` comments onto one line ([#&#8203;5271](https://github.com/psf/black/issues/5271)) - Fix a crash when `# type: ignore` is lost during formatting of a long parenthesized string ([#&#8203;5329](https://github.com/psf/black/issues/5329)) - Fix only the first part of an implicitly concatenated unmergeable string (e.g. `r"..." r"..."`) being wrapped in parentheses ([#&#8203;5434](https://github.com/psf/black/issues/5434)) ##### Configuration - Add support for `NO_COLOR` environment variable to disable ANSI output ([#&#8203;5129](https://github.com/psf/black/issues/5129)) - Remove spurious target version warning when runtime version is included in a `--target-version` flag ([#&#8203;5167](https://github.com/psf/black/issues/5167)) - Fix `--force-exclude` not excluding files whose path contains `..` (e.g. `black ../generated/file.py` run from a subdirectory) ([#&#8203;5471](https://github.com/psf/black/issues/5471)) - Fall back to the default configuration, with a warning, when the given sources share no common project root (e.g. they are on different drives on Windows) instead of crashing ([#&#8203;5386](https://github.com/psf/black/issues/5386)) - Fix loading a stale cached `pyproject.toml` path when `--code` is used from different working directories in the same process ([#&#8203;5152](https://github.com/psf/black/issues/5152)) - Add validation for `--line-ranges` values ([#&#8203;5107](https://github.com/psf/black/issues/5107)) - Ignore empty cache files instead of raising an `EOFError` ([#&#8203;5192](https://github.com/psf/black/issues/5192)) - Reject non-string `include` and `force-exclude` values in `pyproject.toml` ([#&#8203;5193](https://github.com/psf/black/issues/5193)) - Validate `BLACK_NUM_WORKERS` values and report invalid values as usage errors instead of crashing ([#&#8203;5211](https://github.com/psf/black/issues/5211)) - Ignore permission errors when reading cache ([#&#8203;5258](https://github.com/psf/black/issues/5258)) ##### Packaging - Reduce the size of Linux standalone binaries by stripping debug symbols during the PyInstaller release build ([#&#8203;5223](https://github.com/psf/black/issues/5223)) - Black is now released using GitHub [Immutable Releases](https://docs.github.com/code-security/concepts/supply-chain-security/immutable-releases) ([#&#8203;5296](https://github.com/psf/black/issues/5296)) ##### Performance - Fix superlinear runtime growth with the number of input files ([#&#8203;5450](https://github.com/psf/black/issues/5450)) - Improve performance on strings containing many consecutive backslashes ([#&#8203;5163](https://github.com/psf/black/issues/5163)) - Improve performance on files with many `# fmt: skip`/`# fmt: off`/`# fmt: on` comments ([#&#8203;5169](https://github.com/psf/black/issues/5169), [#&#8203;5190](https://github.com/psf/black/issues/5190), [#&#8203;5232](https://github.com/psf/black/issues/5232)) - Improve performance on long calls and collections ([#&#8203;5177](https://github.com/psf/black/issues/5177)) - Improve performance on multiline strings inside large collections (e.g. a dict literal with triple-quoted strings as values) ([#&#8203;5188](https://github.com/psf/black/issues/5188)) - Improve performance on files with many soft keywords (e.g. `match`/`case` blocks) ([#&#8203;5186](https://github.com/psf/black/issues/5186)) - Improve performance on long semicolon-separated statements (in the stable style) and large dict literals (in `--preview`) ([#&#8203;5184](https://github.com/psf/black/issues/5184)) - Improve performance of `--line-ranges` on files with many sibling blocks (a long `if`/`elif` chain, a `match` with many cases, or many top-level definitions) ([#&#8203;5213](https://github.com/psf/black/issues/5213)) - Improve performance on deeply nested bracketed expressions ([#&#8203;5171](https://github.com/psf/black/issues/5171), [#&#8203;5242](https://github.com/psf/black/issues/5242)) - Improve performance on lists and subscripts holding one long expression without operators (e.g. a long run of implicitly concatenated strings inside `[]`) ([#&#8203;5239](https://github.com/psf/black/issues/5239)) - Improve performance on deeply chained operations (e.g. a long `a ** b ** c ** ...` chain) ([#&#8203;5235](https://github.com/psf/black/issues/5235)) - Improve performance on long `if`/`elif` chains and other compound statements with many clauses ([#&#8203;5322](https://github.com/psf/black/issues/5322)) - Improve performance of `string_processing`: - when merging implicitly concatenated f-strings containing long string literals ([#&#8203;5165](https://github.com/psf/black/issues/5165)) - when merging long implicitly concatenated strings ([#&#8203;5173](https://github.com/psf/black/issues/5173), [#&#8203;5194](https://github.com/psf/black/issues/5194)) - when rewriting large nodes (e.g. `"%s ..." % (a, b, c, ...)`) ([#&#8203;5178](https://github.com/psf/black/issues/5178), [#&#8203;5199](https://github.com/psf/black/issues/5199), [#&#8203;5220](https://github.com/psf/black/issues/5220)) - when splitting long string literals ([#&#8203;5183](https://github.com/psf/black/issues/5183)) ##### Output - Report parser failures using editor-friendly `path:line:column` locations ([#&#8203;5237](https://github.com/psf/black/issues/5237)) - Fix crash when writing formatted code or diffs to a `sys.stdout` that has no `buffer` attribute (e.g. in Jupyter notebooks) ([#&#8203;5411](https://github.com/psf/black/issues/5411)) - Report parse failures on Black's own output as internal errors ([#&#8203;5383](https://github.com/psf/black/issues/5383)) ##### *Blackd* - Return HTTP 400 instead of 500 when the `X-Python-Variant` header is empty or has an empty entry (e.g. a trailing comma) ([#&#8203;5428](https://github.com/psf/black/issues/5428)) - Allow optional whitespace around comma-separated versions and `pyi` in the `X-Python-Variant` header ([#&#8203;5441](https://github.com/psf/black/issues/5441)) ##### Integrations - Remove unused `migrate-black` script ([#&#8203;5319](https://github.com/psf/black/issues/5319)) - Support PEP 440 version specifiers in `tool.black.required-version` for the GitHub Action ([#&#8203;5399](https://github.com/psf/black/issues/5399)) - Add outputs (`is_formatted`, `change_count`, `same_count`, `failure_count`) to GitHub Action runs ([#&#8203;5408](https://github.com/psf/black/issues/5408)) ##### Documentation - Document `vim-python-pep8-indent`, which provides an `indentexpr` for Black-style insert-mode indentation ([#&#8203;5288](https://github.com/psf/black/issues/5288)) </details> <details> <summary>python/mypy (mypy)</summary> ### [`v2.4.0`](https://github.com/python/mypy/compare/v2.3.1...v2.4.0) [Compare Source](https://github.com/python/mypy/compare/v2.3.1...v2.4.0) </details> <details> <summary>numpy/numpy (numpy)</summary> ### [`v2.5.4`](https://github.com/numpy/numpy/releases/tag/v2.5.4): (Oct 10, 2026) [Compare Source](https://github.com/numpy/numpy/compare/v2.5.3...v2.5.4) ### NumPy 2.5.4 Release Notes *Released on 2026-10-10.* NumPy 2.5.4 is a patch release that fixes bugs discovered after the 2.5.3 release. Highlights are: - Many typing fixes and improvements, - A workaround for the MSVC 19.51 bug, see below. This release supports Python versions 3.12-3.15. #### Improvements - `numpy.linalg.svd` and `numpy.linalg.lstsq` now raise for inputs containing infinities instead of returning garbage results. - Fixed hangs in `numpy.linalg.svd` and `numpy.linalg.lstsq` for certain inputs containing infinities for recent versions of some LAPACK implementations. - `numpy.linalg.cond` now handles non-finite inputs more consistently. ([gh-32593](https://github.com/numpy/numpy/pull/32593)) ##### StringDType hashing with NaN sentinels `StringDType` instances with equivalent floating-point NaN sentinels now have equal hashes. Previously, distinct NaN objects could produce equal dtype instances with different hashes, causing dictionary lookups and set deduplication to fail. ([gh-32563](https://github.com/numpy/numpy/pull/32563)) #### Changes ##### `MaskedArray` resets a fill_value that cannot be represented in a new dtype A fill_value copied from a source array is now reset to the default fill_value for the new dtype when it cannot be represented in that dtype. Previously the copied value could be stale: ufuncs that change dtype left the result holding a fill_value typed for the old dtype, which raised a `TypeError` only when something later validated it (such as `.view()`), and a floating point fill_value that overflows an integer dtype was kept as an out-of-range value together with a `RuntimeWarning`. Both now fall back to the default, including when a masked array is passed to `MaskedArray` with a different `dtype`. A fill_value given explicitly by the user is still validated and raises as before. This can now raise a `ComplexWarning` if the fill_value is complex and the new dtype is real. ([gh-32508](https://github.com/numpy/numpy/pull/32508)) ([gh-32562](https://github.com/numpy/numpy/pull/32562)) #### Contributors A total of 9 people contributed to this release. People with a "+" by their names contributed a patch for the first time. - Aniket Singh Yadav - Bhuvansh Kataria + - Charles Harris - Iason Krommydas - Joren Hammudoglu - Lazizbek Ergashev + - Nathan Goldbaum - Sebastian Berg - Yeonho Kim #### Pull requests merged A total of 17 pull requests were merged for this release. - [#&#8203;32520](https://github.com/numpy/numpy/pull/32520): MAINT: Prepare 2.5.x for further development - [#&#8203;32557](https://github.com/numpy/numpy/pull/32557): BUG: Reset an unrepresentable fill_value on a dtype change ([#&#8203;32508](https://github.com/numpy/numpy/issues/32508)) - [#&#8203;32565](https://github.com/numpy/numpy/pull/32565): BLD: work around MSVC 19.51 bug ([#&#8203;32561](https://github.com/numpy/numpy/issues/32561)) - [#&#8203;32600](https://github.com/numpy/numpy/pull/32600): BUG: fix np.strings.replace truncating old/new to a's - [#&#8203;32707](https://github.com/numpy/numpy/pull/32707): BUG: fix \[ureduce]{#ureduce} reshape when a kept axis has size 0 ([#&#8203;32536](https://github.com/numpy/numpy/issues/32536)) - [#&#8203;32709](https://github.com/numpy/numpy/pull/32709): BUG: fix two possible crashes in the ufunc.accumulate implementation... - [#&#8203;32710](https://github.com/numpy/numpy/pull/32710): BUG: Reset an inherited fill_value in MaskedArray.\_\_new\_\_ as... - [#&#8203;32711](https://github.com/numpy/numpy/pull/32711): ENH: Improvements and fixes for stringdtype hashing ([#&#8203;32563](https://github.com/numpy/numpy/issues/32563)) - [#&#8203;32713](https://github.com/numpy/numpy/pull/32713): CI: increase ppc64le timeout to match other timeouts ([#&#8203;32583](https://github.com/numpy/numpy/issues/32583)) - [#&#8203;32718](https://github.com/numpy/numpy/pull/32718): BUG: fix memory leak in legacy ArrayMethod wrapper code - [#&#8203;32719](https://github.com/numpy/numpy/pull/32719): BUG: check for non-finite input before calling gesdd/gelsd and... - [#&#8203;32738](https://github.com/numpy/numpy/pull/32738): BUG: fix segfault in as_arrays() on self-referencing pyscalars - [#&#8203;32741](https://github.com/numpy/numpy/pull/32741): TYP: Various typing improvements. - [#&#8203;32791](https://github.com/numpy/numpy/pull/32791): BUG: Fix canonicalization/promotion of nested subarray types... - [#&#8203;32888](https://github.com/numpy/numpy/pull/32888): MAINT: Update vendored-meson to match main. - [#&#8203;32904](https://github.com/numpy/numpy/pull/32904): TYP: Backport a number of typing updates. - [#&#8203;32956](https://github.com/numpy/numpy/pull/32956): TYP: Various typing fixes and improvements. </details> <details> <summary>python/cpython (python)</summary> ### [`v3.15.0`](https://github.com/python/cpython/compare/v3.14.8...v3.15.0) [Compare Source](https://github.com/python/cpython/compare/v3.14.8...v3.15.0) </details> <details> <summary>astral-sh/ruff (ruff)</summary> ### [`v0.17.0`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0170) [Compare Source](https://github.com/astral-sh/ruff/compare/0.16.10...0.17.0) Released on 2026-10-09. The executables in our macOS and Windows release archives and `ruff` wheels are now code-signed. macOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows executables have timestamped Authenticode signatures from Azure Artifact Signing. This enables verification of the release publisher and binary integrity, supports publisher-based allowlisting, and should reduce security warnings and antivirus false positives. ##### Breaking changes - Update the default and latest Python versions for 3.15 ([#&#8203;28792](https://github.com/astral-sh/ruff/pull/28792)) Ruff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through [`target-version`](https://docs.astral.sh/ruff/settings/#target-version) or [`requires-python`](https://docs.astral.sh/ruff/configuration/#inferring-the-python-version). When checking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15 instead of 3.14. - Update the default rule set ([#&#8203;28786](https://github.com/astral-sh/ruff/pull/28786)) Several of the `flake8-datetimez` rules ([`DTZ001`](https://docs.astral.sh/ruff/rules/call-datetime-without-tzinfo/), [`DTZ005`](https://docs.astral.sh/ruff/rules/call-datetime-now-without-tzinfo/), [`DTZ006`](https://docs.astral.sh/ruff/rules/call-datetime-fromtimestamp/), [`DTZ007`](https://docs.astral.sh/ruff/rules/call-datetime-strptime-without-zone/), [`DTZ011`](https://docs.astral.sh/ruff/rules/call-date-today/), [`DTZ012`](https://docs.astral.sh/ruff/rules/call-date-fromtimestamp/), and [`DTZ901`](https://docs.astral.sh/ruff/rules/datetime-min-max/)) are no longer enabled by default, while [`undefined-local-with-nested-import-star-usage`](https://docs.astral.sh/ruff/rules/undefined-local-with-nested-import-star-usage/) (`F406`), which corresponds to a syntax error, is now enabled by default. - Update Rust crate quick-junit to 0.8.0 ([#&#8203;27295](https://github.com/astral-sh/ruff/pull/27295)) JUnit output now uses a `skipped` attribute instead of `disabled` on `<testsuite>` elements and includes a `skipped` attribute on the root `<testsuites>` element. - \[`flake8-import-conventions`] Add `datetime as dt` as a conventional alias (`ICN001`) ([#&#8203;28790](https://github.com/astral-sh/ruff/pull/28790)) - Support Unicode dummy variable names ([#&#8203;28722](https://github.com/astral-sh/ruff/pull/28722)) The default [`lint.dummy-variable-rgx`](https://docs.astral.sh/ruff/settings/#lint_dummy-variable-rgx) now recognizes underscore-prefixed Unicode names, such as `_次`, as dummy variables. - Update to Unicode 17 ([#&#8203;21229](https://github.com/astral-sh/ruff/pull/21229), [#&#8203;28784](https://github.com/astral-sh/ruff/pull/28784)) Ruff now uses Unicode 17 data for identifier normalization and named character escapes (`"\N{...}"`). - Always show unsafe and display-only fixes in the CLI ([#&#8203;27810](https://github.com/astral-sh/ruff/pull/27810)) The default `full` output format now shows unsafe fixes and suggestions requiring manual review, regardless of the [`unsafe-fixes`](https://docs.astral.sh/ruff/settings/#unsafe-fixes) setting. Actually applying unsafe fixes still requires explicit opt-in. - Remove the Python dependency from conda-forge builds ([conda-forge/ruff-feedstock#361](https://github.com/conda-forge/ruff-feedstock/pull/361)) The conda-forge build no longer depends on Python, now supports linux-riscv64, win-arm64, and linux-ppc64le platforms, and now includes shell completions. However, no longer depending on Python means that `python -m ruff` and `import ruff` will no longer work. Use `ruff` directly from `PATH` instead. PyPI installations and those from the standalone installer are unaffected. - Remove support for ruff-lsp ([#&#8203;28750](https://github.com/astral-sh/ruff/pull/28750)) Support for `ruff-lsp`, the legacy Python language server [deprecated in Ruff v0.9.5](https://github.com/astral-sh/ruff/releases/tag/0.9.5), has been removed. The Ruff VS Code extension now always uses the native language server; `ruff.nativeServer` is deprecated and ignored. See the [migration guide](https://docs.astral.sh/ruff/editors/migration/). ##### Stabilization The following rules have been stabilized and are no longer in preview: - [`lazy-import-mismatch`](https://docs.astral.sh/ruff/rules/lazy-import-mismatch) (`TID254`) - [`lazy-import-immediately-resolved`](https://docs.astral.sh/ruff/rules/lazy-import-immediately-resolved) (`TID255`) - [`os-path-commonprefix`](https://docs.astral.sh/ruff/rules/os-path-commonprefix) (`RUF071`) The following behaviors have been stabilized: - The formatter, [`unsorted-imports`](https://docs.astral.sh/ruff/rules/unsorted-imports/) (`I001`), [`line-too-long`](https://docs.astral.sh/ruff/rules/line-too-long/) (`E501`), and [`doc-line-too-long`](https://docs.astral.sh/ruff/rules/doc-line-too-long/) (`W505`) now consistently ignore trailing pragma comments when computing line length. This resolved several bugs involving interactions between these rules ([#&#8203;27313](https://github.com/astral-sh/ruff/pull/27313)) but may also cause existing imports to be reformatted and was thus classified as a breaking change. ##### Preview features - \[`flake8-bugbear`] Report the method name and a more precise range (`B005`) ([#&#8203;27050](https://github.com/astral-sh/ruff/pull/27050)) - \[`refurb`] Mark fix unsafe and move to `suspicious` (`FURB152`) ([#&#8203;28405](https://github.com/astral-sh/ruff/pull/28405)) - \[`ruff`] Allow docstrings in strict mode (`RUF067`) ([#&#8203;28679](https://github.com/astral-sh/ruff/pull/28679)) ##### Bug fixes - \[`flake8-builtins`] Expand checks in class scopes (`A001`) ([#&#8203;29076](https://github.com/astral-sh/ruff/pull/29076)) - \[`flake8-self`] Allow private access on `object.__new__(cls)` instances (`SLF001`) ([#&#8203;29001](https://github.com/astral-sh/ruff/pull/29001)) - \[`flake8-tidy-imports`] Skip `lazy-import-mismatch` in stubs (`TID254`) ([#&#8203;29095](https://github.com/astral-sh/ruff/pull/29095)) - \[`flake8-type-checking`] Add the notion of runtime-ambiguous references ([#&#8203;26508](https://github.com/astral-sh/ruff/pull/26508)) - \[`flake8-type-checking`] Never flag annotations in function scopes ([#&#8203;29183](https://github.com/astral-sh/ruff/pull/29183)) - \[`pyflakes`] Mark the fix as unsafe when it creates a docstring (`F541`) ([#&#8203;28258](https://github.com/astral-sh/ruff/pull/28258)) - \[`pylint`] Preserve trailing comments in `useless-return` fix (`PLR1711`) ([#&#8203;29180](https://github.com/astral-sh/ruff/pull/29180)) - \[`ruff`] Avoid false positive when `pytest.raises` is used in a `with` statement (`RUF061`) ([#&#8203;28186](https://github.com/astral-sh/ruff/pull/28186)) ##### Rule changes - \[`pyupgrade`] Suggest `typing.TypeForm` on Python 3.15 (`UP035`) ([#&#8203;29084](https://github.com/astral-sh/ruff/pull/29084)) ##### Contributors - [@&#8203;DeviousCardi](https://github.com/DeviousCardi) - [@&#8203;hugehoo](https://github.com/hugehoo) - [@&#8203;nekomario28](https://github.com/nekomario28) - [@&#8203;Daverball](https://github.com/Daverball) - [@&#8203;Viicos](https://github.com/Viicos) - [@&#8203;DebadityaHait](https://github.com/DebadityaHait) - [@&#8203;saberoueslati](https://github.com/saberoueslati) - [@&#8203;baltasarblanco](https://github.com/baltasarblanco) - [@&#8203;yxshee](https://github.com/yxshee) - [@&#8203;lognd](https://github.com/lognd) - [@&#8203;dor-sr](https://github.com/dor-sr) ### [`v0.16.10`](https://github.com/astral-sh/ruff/releases/tag/0.16.10) [Compare Source](https://github.com/astral-sh/ruff/compare/0.16.9...0.16.10) ##### Release Notes Released on 2026-10-01. ##### Preview features - Add a migration guide for categories ([#&#8203;28087](https://github.com/astral-sh/ruff/pull/28087)) - \[`pyupgrade`] Add rule for context manager iterator annotations (`UP052`) ([#&#8203;29000](https://github.com/astral-sh/ruff/pull/29000)) ##### Performance - Reduce memory used by diagnostics ([#&#8203;28951](https://github.com/astral-sh/ruff/pull/28951)) ##### Server - Avoid running `uv format` in untrusted workspaces ([#&#8203;28873](https://github.com/astral-sh/ruff/pull/28873)) ##### Documentation - Fix links to moved changelog sections and renamed mdtests ([#&#8203;28941](https://github.com/astral-sh/ruff/pull/28941)) - Add Python 3.15 as a supported version ([#&#8203;28907](https://github.com/astral-sh/ruff/pull/28907)) - Add ty as a type checker example ([#&#8203;28906](https://github.com/astral-sh/ruff/pull/28906)) ##### Other changes - Update Rust toolchain to 1.99 and MSRV to 1.97 ([#&#8203;29047](https://github.com/astral-sh/ruff/pull/29047)) ##### Contributors - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;spaceone](https://github.com/spaceone) - [@&#8203;HardMax71](https://github.com/HardMax71) - [@&#8203;charliermarsh](https://github.com/charliermarsh) ##### Install ruff 0.16.10 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-installer.sh | sh ``` ##### Install prebuilt binaries via powershell script ```sh powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-installer.ps1 | iex" ``` ##### Download ruff 0.16.10 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | ##### Verifying GitHub Artifact Attestations The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify): ```sh gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff ``` You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly: ```sh gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation> ``` </details> <details> <summary>astral-sh/ty (ty)</summary> ### [`v0.0.87`](https://github.com/astral-sh/ty/blob/HEAD/CHANGELOG.md#0087) [Compare Source](https://github.com/astral-sh/ty/compare/0.0.86...0.0.87) Released on 2026-10-13. ##### LSP server - Clamp notebook cell positions to the end of the cell ([#&#8203;29307](https://github.com/astral-sh/ruff/pull/29307)) - Fix deadlock when requests arrive before workspace configuration ([#&#8203;29303](https://github.com/astral-sh/ruff/pull/29303)) - Fix notebook cell lookups after cells with cell magics ([#&#8203;29308](https://github.com/astral-sh/ruff/pull/29308)) - Fix panic on completions past the end of a notebook's last cell ([#&#8203;29306](https://github.com/astral-sh/ruff/pull/29306)) ##### Diagnostic improvements - Add opt-in `mismatched-sentinel-name` rule ([#&#8203;27206](https://github.com/astral-sh/ruff/pull/27206)) - Deduplicate identical argument type diagnostics ([#&#8203;29337](https://github.com/astral-sh/ruff/pull/29337)) - Enable `invalid-mutable-override` by default ([#&#8203;29335](https://github.com/astral-sh/ruff/pull/29335)) - Improve display of distinct string literal types ([#&#8203;29206](https://github.com/astral-sh/ruff/pull/29206)) - Respect suppression of attribute override diagnostics ([#&#8203;29327](https://github.com/astral-sh/ruff/pull/29327)) ##### Core type checking - Check overrides of receiver attribute declarations ([#&#8203;28557](https://github.com/astral-sh/ruff/pull/28557)) - Infer the default for definitely absent keys in closed `TypedDict.get` calls ([#&#8203;29136](https://github.com/astral-sh/ruff/pull/29136)) - Leave room for later positional arguments when unpacking a variable-length argument ([#&#8203;29293](https://github.com/astral-sh/ruff/pull/29293)) - Preserve minimum lengths of unpacked tuple unions ([#&#8203;29331](https://github.com/astral-sh/ruff/pull/29331)) - Specialize bare generic class name with `type[...]` type context ([#&#8203;29248](https://github.com/astral-sh/ruff/pull/29248)) ##### Performance - Avoid constructing nominal complements ([#&#8203;29292](https://github.com/astral-sh/ruff/pull/29292)) - Optimize system path equality ([#&#8203;29340](https://github.com/astral-sh/ruff/pull/29340)) ##### Contributors - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;zsol](https://github.com/zsol) - [@&#8203;Amirshox](https://github.com/Amirshox) - [@&#8203;carljm](https://github.com/carljm) ### [`v0.0.86`](https://github.com/astral-sh/ty/blob/HEAD/CHANGELOG.md#0086) [Compare Source](https://github.com/astral-sh/ty/compare/0.0.85...0.0.86) Released on 2026-10-09. The executables in our macOS and Windows release archives and `ty` wheels are now code-signed. macOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows executables have timestamped Authenticode signatures from Azure Artifact Signing. This enables verification of the release publisher and binary integrity, supports publisher-based allowlisting, and should reduce security warnings and antivirus false positives. ##### Bug fixes - Infer empty collection branches from nonempty literals ([#&#8203;29131](https://github.com/astral-sh/ruff/pull/29131)) - Invalidate dependency metadata when environments change ([#&#8203;29126](https://github.com/astral-sh/ruff/pull/29126)) - Preserve final attribute restrictions on composite types ([#&#8203;29135](https://github.com/astral-sh/ruff/pull/29135)) - Preserve recursive structure in `Annotated` values ([#&#8203;29058](https://github.com/astral-sh/ruff/pull/29058)) - Specialize inherited dataclass field converters ([#&#8203;29192](https://github.com/astral-sh/ruff/pull/29192)) ##### LSP server - Show documentation for annotation operators on hover ([#&#8203;29185](https://github.com/astral-sh/ruff/pull/29185)) ##### Core type checking - Check attribute and property override types ([#&#8203;28556](https://github.com/astral-sh/ruff/pull/28556)) - Narrow tuple unions through truthiness and type checks ([#&#8203;29125](https://github.com/astral-sh/ruff/pull/29125)) - Preserve literal types when consuming dictionary literals ([#&#8203;29145](https://github.com/astral-sh/ruff/pull/29145)) - Preserve non-boolean comparison results for intersections ([#&#8203;28045](https://github.com/astral-sh/ruff/pull/28045)) - Preserve receiver specializations when calling unions of bound methods ([#&#8203;29015](https://github.com/astral-sh/ruff/pull/29015)) - Represent uninhabited truthiness explicitly ([#&#8203;28843](https://github.com/astral-sh/ruff/pull/28843)) - Solve validity type context through constraint sets ([#&#8203;28909](https://github.com/astral-sh/ruff/pull/28909)) ##### Performance - Avoid recursion guards for non-generic nominal targets ([#&#8203;29202](https://github.com/astral-sh/ruff/pull/29202)) - Check exact exclusions before intersection positives ([#&#8203;29195](https://github.com/astral-sh/ruff/pull/29195)) ##### Memory usage improvements - Share constraints in retained sequent maps ([#&#8203;28966](https://github.com/astral-sh/ruff/pull/28966)) ##### Other changes - Update the default Python version to 3.15 ([#&#8203;28792](https://github.com/astral-sh/ruff/pull/28792)) - Update to Unicode 17 ([#&#8203;21229](https://github.com/astral-sh/ruff/pull/21229), [#&#8203;28784](https://github.com/astral-sh/ruff/pull/28784)) - Always show fixes in the CLI ([#&#8203;27810](https://github.com/astral-sh/ruff/pull/27810)) ##### Contributors - [@&#8203;gorewilliams](https://github.com/gorewilliams) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;zsol](https://github.com/zsol) - [@&#8203;charliermarsh](https://github.com/charliermarsh) ### [`v0.0.85`](https://github.com/astral-sh/ty/blob/HEAD/CHANGELOG.md#0085) [Compare Source](https://github.com/astral-sh/ty/compare/0.0.84...0.0.85) Released on 2026-10-06. ##### Preview features - Refresh uv project metadata when uv files change ([#&#8203;28529](https://github.com/astral-sh/ruff/pull/28529)) ##### Bug fixes - Avoid recursive lambda class decorator panics ([#&#8203;28984](https://github.com/astral-sh/ruff/pull/28984)) - Compare observable notebook state for equality ([#&#8203;28874](https://github.com/astral-sh/ruff/pull/28874)) - Detect recursive alias cycles through intersections ([#&#8203;28916](https://github.com/astral-sh/ruff/pull/28916)) - Fix anchoring of include and exclude patterns after the project's root changed ([#&#8203;28995](https://github.com/astral-sh/ruff/pull/28995)) - Fix stack overflow when inferring dynamic class metaclasses ([#&#8203;28917](https://github.com/astral-sh/ruff/pull/28917)) - Normalize recursive dataclass transform metadata ([#&#8203;28920](https://github.com/astral-sh/ruff/pull/28920)) - Normalize recursive TypedDicts during cycle recovery ([#&#8203;28918](https://github.com/astral-sh/ruff/pull/28918)) - Preserve cycle markers in ParamSpec specialization ([#&#8203;29024](https://github.com/astral-sh/ruff/pull/29024)) ##### CLI - Prefer existing @&#8203; paths over response files in Ruff and ty ([#&#8203;28877](https://github.com/astral-sh/ruff/pull/28877)) ##### LSP server - Add namespace package support to import completions. ([#&#8203;28202](https://github.com/astral-sh/ruff/pull/28202)) - Avoid stale I/O diagnostics when closing deleted files ([#&#8203;28988](https://github.com/astral-sh/ruff/pull/28988)) - Contain rendered code within Markdown fences ([#&#8203;28869](https://github.com/astral-sh/ruff/pull/28869)) - Refresh Python settings when virtual environments change ([#&#8203;28650](https://github.com/astral-sh/ruff/pull/28650)) ##### Diagnostic improvements - Add opt-in `truthiness-test-of-none-union` rule ([#&#8203;28889](https://github.com/astral-sh/ruff/pull/28889)) - Avoid `disjoint-cast` diagnostics in situations where the value could have been inferred as being compatible with the casted type if it had only been inferred with the right type context ([#&#8203;28851](https://github.com/astral-sh/ruff/pull/28851)) - Bound nested callable signature display ([#&#8203;29049](https://github.com/astral-sh/ruff/pull/29049)) - Explain outdated uv versions in metadata errors ([#&#8203;28959](https://github.com/astral-sh/ruff/pull/28959)) - Improve display of string literal types that include unicode characters or double quotes ([#&#8203;29089](https://github.com/astral-sh/ruff/pull/29089)) - Improve uv metadata diagnostics ([#&#8203;28990](https://github.com/astral-sh/ruff/pull/28990)) - Preserve constrained type-variable failure diagnostics ([#&#8203;28768](https://github.com/astral-sh/ruff/pull/28768)) - Preserve generic inference errors during diagnostic recovery ([#&#8203;28811](https://github.com/astral-sh/ruff/pull/28811)) - Report deprecated overloads in decorator applications ([#&#8203;28999](https://github.com/astral-sh/ruff/pull/28999)) ##### Core type checking - Bound methods without a receiver are not callable ([#&#8203;28981](https://github.com/astral-sh/ruff/pull/28981)) - Fix member lookup on union-bounded type variables ([#&#8203;29018](https://github.com/astral-sh/ruff/pull/29018)) - Fix type variable inference for final class objects ([#&#8203;29097](https://github.com/astral-sh/ruff/pull/29097)) - Freshen ParamSpec identities consistently ([#&#8203;28826](https://github.com/astral-sh/ruff/pull/28826)) - Honor generic property setters in protocol compatibility ([#&#8203;28562](https://github.com/astral-sh/ruff/pull/28562)) - Infer nominal generic specializations from bounded type variables ([#&#8203;28812](https://github.com/astral-sh/ruff/pull/28812)) - Inherit annotations for unannotated subclass defaults ([#&#8203;28575](https://github.com/astral-sh/ruff/pull/28575)) - Keep unresolved TypeIs targets provisional ([#&#8203;29066](https://github.com/astral-sh/ruff/pull/29066)) - Limit wildcard exports using literal `__all__` ([#&#8203;28972](https://github.com/astral-sh/ruff/pull/28972)) - Narrow later match cases after always-true guards ([#&#8203;28960](https://github.com/astral-sh/ruff/pull/28960)) - Pass generic context to call inference solver ([#&#8203;29065](https://github.com/astral-sh/ruff/pull/29065)) - Preserve captured variables in ParamSpec comparisons ([#&#8203;28827](https://github.com/astral-sh/ruff/pull/28827)) - Preserve intersection receivers in implicit dunder calls ([#&#8203;28833](https://github.com/astral-sh/ruff/pull/28833)) - Preserve literal unpacking during call analysis ([#&#8203;28821](https://github.com/astral-sh/ruff/pull/28821)) - Preserve recursive type context during constructor inference ([#&#8203;28903](https://github.com/astral-sh/ruff/pull/28903)) - Preserve tuple shapes when slicing NewTypes ([#&#8203;29091](https://github.com/astral-sh/ruff/pull/29091)) - Preserve tuple subclass identity during type expansion ([#&#8203;29090](https://github.com/astral-sh/ruff/pull/29090)) - Promote bounded type variables to declared constraints ([#&#8203;28814](https://github.com/astral-sh/ruff/pull/28814)) - Propagate outer type context through cast calls ([#&#8203;28855](https://github.com/astral-sh/ruff/pull/28855)) - Recognize bare `TypeVarTuple`s in materialization checks ([#&#8203;28815](https://github.com/astral-sh/ruff/pull/28815)) - Retain individual overload argument expansion outcomes ([#&#8203;28825](https://github.com/astral-sh/ruff/pull/28825)) - Specialize instance members once ([#&#8203;29043](https://github.com/astral-sh/ruff/pull/29043)) - Specialize Self bounds through generic type aliases ([#&#8203;28890](https://github.com/astral-sh/ruff/pull/28890)) - Support slots_default in dataclass_transform ([#&#8203;28885](https://github.com/astral-sh/ruff/pull/28885)) - Sync vendored typeshed stubs ([#&#8203;29032](https://github.com/astral-sh/ruff/pull/29032)). [Typeshed diff](https://github.com/python/typeshed/compare/76b8c9f83b8bb876e841248b638f3728da3f86fe...b932d8ce0f893d7d9ef167f0379dcaf9f48bf70b) - Sync vendored typeshed stubs ([#&#8203;29042](https://github.com/astral-sh/ruff/pull/29042)). [Typeshed diff](https://github.com/python/typeshed/compare/76b8c9f83b8bb876e841248b638f3728da3f86fe...b932d8ce0f893d7d9ef167f0379dcaf9f48bf70b) - Validate call arguments once after inference ([#&#8203;28824](https://github.com/astral-sh/ruff/pull/28824)) - Validate union operands involving None ([#&#8203;28931](https://github.com/astral-sh/ruff/pull/28931)) ##### Performance - Avoid expanding recursive protocol materializations ([#&#8203;29026](https://github.com/astral-sh/ruff/pull/29026)) - Avoid repeated work in nested match patterns ([#&#8203;28926](https://github.com/astral-sh/ruff/pull/28926)) - Cache the flattened module list ([#&#8203;28932](https://github.com/astral-sh/ruff/pull/28932)) - Index nonlocal bindings when sweeping snapshots ([#&#8203;28935](https://github.com/astral-sh/ruff/pull/28935)) - Skip descendant searches for leaf modules ([#&#8203;28845](https://github.com/astral-sh/ruff/pull/28845)) - Skip independent constraint-pair derivation ([#&#8203;28950](https://github.com/astral-sh/ruff/pull/28950)) - Skip storing default definition states ([#&#8203;28934](https://github.com/astral-sh/ruff/pull/28934)) ##### Memory usage improvements - Avoid caching empty sequent maps ([#&#8203;28949](https://github.com/astral-sh/ruff/pull/28949)) - Avoid retaining docstring literal types ([#&#8203;28944](https://github.com/astral-sh/ruff/pull/28944)) - Compact bound-method receivers ([#&#8203;28969](https://github.com/astral-sh/ruff/pull/28969)) - Move ParamSpec signature metadata to extras ([#&#8203;28970](https://github.com/astral-sh/ruff/pull/28970)) - Release closed module ASTs synchronously during auto-import discovery ([#&#8203;28714](https://github.com/astral-sh/ruff/pull/28714)) - Skip caching trivially assignable types ([#&#8203;28936](https://github.com/astral-sh/ruff/pull/28936)) ##### Contributors - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;gorewilliams](https://github.com/gorewilliams) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;ibraheemdev](https://github.com/ibraheemdev) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;zsol](https://github.com/zsol) - [@&#8203;lerebear](https://github.com/lerebear) </details> <details> <summary>fastapi/typer (typer)</summary> ### [`v0.27.3`](https://github.com/fastapi/typer/releases/tag/0.27.3) [Compare Source](https://github.com/fastapi/typer/compare/0.27.2...0.27.3) ##### Fixes - 🐛 Escape terminal control characters in error messages. PR [#&#8203;1972](https://github.com/fastapi/typer/pull/1972) by [@&#8203;tiangolo](https://github.com/tiangolo). ##### Internal - ⬆ Bump pyjwt from 2.13.0 to 2.15.0. PR [#&#8203;1969](https://github.com/fastapi/typer/pull/1969) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump urllib3 from 2.7.0 to 2.8.0. PR [#&#8203;1968](https://github.com/fastapi/typer/pull/1968) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pymdown-extensions from 11.0 to 11.0.1. PR [#&#8203;1924](https://github.com/fastapi/typer/pull/1924) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump the python-packages group across 1 directory with 7 updates. PR [#&#8203;1966](https://github.com/fastapi/typer/pull/1966) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump cryptography from 48.0.1 to 50.0.2. PR [#&#8203;1920](https://github.com/fastapi/typer/pull/1920) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pre-commit hooks. PR [#&#8203;1967](https://github.com/fastapi/typer/pull/1967) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - ⬆ Bump the github-actions group with 3 updates. PR [#&#8203;1965](https://github.com/fastapi/typer/pull/1965) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump anyio from 4.12.0 to 4.14.2. PR [#&#8203;1959](https://github.com/fastapi/typer/pull/1959) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ✅ Fix flaky `app_dir` and `launch` tutorial tests under `xdist`. PR [#&#8203;1951](https://github.com/fastapi/typer/pull/1951) by [@&#8203;YuriiMotov](https://github.com/YuriiMotov). - ⬆ Bump the python-packages group across 1 directory with 8 updates. PR [#&#8203;1948](https://github.com/fastapi/typer/pull/1948) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump annotated-doc from 0.0.4 to 0.0.5. PR [#&#8203;1949](https://github.com/fastapi/typer/pull/1949) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). - ⬆ Bump pre-commit hooks. PR [#&#8203;1950](https://github.com/fastapi/typer/pull/1950) by [@&#8203;pr-submit\[bot\]](https://github.com/apps/pr-submit). - ⬆ Bump the github-actions group with 4 updates. PR [#&#8203;1947](https://github.com/fastapi/typer/pull/1947) by [@&#8203;dependabot\[bot\]](https://github.com/apps/dependabot). </details> <details> <summary>astral-sh/uv (uv_build)</summary> ### [`v0.13.0`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0130) [Compare Source](https://github.com/astral-sh/uv/compare/0.12.24...0.13.0) Released on 2026-10-09. uv 0.13.0 makes Python 3.15 the default stable Python version. We've also included several breaking changes to improve correctness, performance, and compatibility, described below. **We expect most users to be able to upgrade without making changes.** While not a breaking change, this release also updates the format of many of uv's cache entries to improve performance. **uv may download or rebuild dependencies after upgrading**, because some cached entries from earlier versions cannot be reused. Multiple versions of uv can still safely share the same cache directory. There are no breaking changes to the configuration of the [uv build backend](https://docs.astral.sh/uv/concepts/build-backend/). If your `[build-system]` table includes an upper bound on `uv_build`, update it to allow `uv_build` 0.13, e.g., `uv_build>=0.13.0,<0.14`. ##### Breaking changes - **Use Python 3.15 as the default stable version** The default stable Python version has changed from 3.14 to 3.15. This affects Python downloads when no version is requested or pinned, e.g., when running `uv python install`. uv continues to use compatible Python installations that are already present. For example, `uv venv` can still use an installed Python 3.14. If no suitable interpreter is installed and automatic downloads are enabled, commands such as `uv venv` and `uvx python` can now download Python 3.15. You can opt out of this behavior by requesting Python 3.14 explicitly, e.g., `uv venv --python 3.14`. For projects, use `uv python pin 3.14` to record the version in `.python-version`. - **Honor `--require-hashes` in included constraints files** ([#&#8203;22275](https://github.com/astral-sh/uv/pull/22275)) Previously, uv ignored `--require-hashes` in constraints files included with `-c` from a requirements file. Now, uv honors the directive and requires hashes for all requirements in the installation. Installs that previously succeeded can now fail if a requirement is missing a hash. You cannot opt out while the directive is present. Add the missing hashes to your requirements, or remove the `--require-hashes` directive from the included constraints file if hash checking is not intended. - **Prefer native Python on Windows ARM64** ([#&#8203;22100](https://github.com/astral-sh/uv/pull/22100)) Previously, ARM64 builds of uv preferred emulated `x86_64` Python installations because native wheel support was limited. Now, uv prefers native ARM64 (`aarch64`) interpreters across Python versions. This follows similar changes in [CPython](https://discuss.python.org/t/python-on-windows-arm64/104524), the official Windows [Python install manager](https://discuss.python.org/t/python-install-manager-26-4/108846), and GitHub's [actions/setup-python](https://github.com/actions/setup-python#supported-architectures). When a native interpreter is unavailable, uv continues to fall back to `x86_64`, then 32-bit `x86`. You can opt out of this behavior by setting `UV_PYTHON_ARCH=x86_64` or requesting an explicit architecture, e.g., `cpython-3.14-windows-x86_64`. If you are using `setup-uv`, you can set [`python-arch: x86_64`](https://github.com/astral-sh/setup-uv#python-architecture) instead. - **Reject editable requirements in included constraints files** ([#&#8203;22282](https://github.com/astral-sh/uv/pull/22282)) Previously, uv silently ignored editable (`-e`) requirements in constraints files included with `-c` from a requirements file. Now, uv rejects these requirements with an error, matching [pip's behavior](https://pip.pypa.io/en/stable/user_guide/#constraints-files). You cannot opt out of this behavior. Move editable requirements to a requirements file passed with `-r`, or pass them directly with `--editable`, instead of including them in a constraints file. - **Omit the distutils startup patch on Python 3.10 and later** ([#&#8203;22096](https://github.com/astral-sh/uv/pull/22096)) Previously, uv installed `_virtualenv.py` and `_virtualenv.pth` into every new virtual environment to prevent distutils configuration from changing installation paths. Now, like [`virtualenv` 21.6.0](https://github.com/pypa/virtualenv/releases/tag/21.6.0), uv omits these files on Python 3.10 and later, which already ignore the affected configuration keys. This reduces Python startup overhead. Python 3.9 and earlier retain the patch. You cannot opt out of this behavior. Existing virtual environments are not modified automatically. Recreate an environment with Python 3.10 or later to remove the patch. This stabilizes the `no-distutils-patch` preview feature. - **Treat requirement-file option values as single paths** ([#&#8203;22290](https://github.com/astral-sh/uv/pull/22290)) Previously, uv split values passed to `--constraint`, `--override`, `--exclude`, and `--build-constraint` on spaces, even when quoted. Now, each value is treated as a single path, allowing file paths containing spaces. You cannot opt out of this behavior. Repeat the option to provide multiple files. For example, replace `-c "a.txt b.txt"` with `-c a.txt -c b.txt`. Space-separated lists in `UV_CONSTRAINT`, `UV_OVERRIDE`, `UV_EXCLUDE`, and `UV_BUILD_CONSTRAINT` remain supported. - **Use `tar-codec` for tar archives by default** ([#&#8203;22094](https://github.com/astral-sh/uv/pull/22094)) Previously, uv used `astral-tokio-tar` to extract tar archives, build source distributions with `uv_build`, and read their metadata for `uv publish`. Now, uv uses `tar-codec`, which applies stricter validation when reading archives. uv may now reject archives containing hard links or unsupported tar extensions that previous versions accepted. Source distributions created by `uv_build` can also have different archive bytes and hashes. You can opt out of this behavior by setting `UV_LEGACY_TAR_BACKEND=1`. This stabilizes the `tar-codec` preview feature. - **Reject `uv build --clear` output directories that contain a build source** ([#&#8203;22276](https://github.com/astral-sh/uv/pull/22276)) Previously, `uv build --clear` could delete a project or input source distribution when the output directory contained the source. Now, uv rejects these output directories, including equivalent paths reached through symlinks, before clearing any build output. Select an output directory that does not contain any build sources, or omit `--clear`. ##### Python - Add CPython 3.15.0 ([#&#8203;22400](https://github.com/astral-sh/uv/pull/22400)) ##### Preview features - Require hashes for build dependencies, including transitive dependencies, with `--require-build-hashes` ([#&#8203;21411](https://github.com/astral-sh/uv/pull/21411)) ##### Performance - Speed up revalidation of cached HTTP responses by avoiding rewrites of unchanged payloads ([#&#8203;22130](https://github.com/astral-sh/uv/pull/22130)) - Reduce allocations when reading cached HTTP responses ([#&#8203;22136](https://github.com/astral-sh/uv/pull/22136)) - Reduce cache storage for HTTP policies and package records ([#&#8203;22135](https://github.com/astral-sh/uv/pull/22135), [#&#8203;22133](https://github.com/astral-sh/uv/pull/22133)) - Reduce allocations for cached source distribution revisions ([#&#8203;22131](https://github.com/astral-sh/uv/pull/22131)) ##### Bug fixes - Fix incorrect dependency resolution when reusing source metadata with different build settings ([#&#8203;22404](https://github.com/astral-sh/uv/pull/22404)) - Avoid overlong wheel cache lock filenames on Windows ([#&#8203;22134](https://github.com/astral-sh/uv/pull/22134)) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMzIuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjE1NS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
chore(deps): update all dependencies
Some checks failed
/ Get release information (pull_request) Failing after 20s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
591b074501

📋 Changelog

📦 Version Information

  • Current version: 0.2.15
  • Previous version: 0.2.15

Unreleased (a00ca19..a00ca19)

Miscellaneous Chores

  • (deps) update all dependencies - (a00ca19) - Renovate Bot

Generated by cocogitto

## 📋 Changelog **📦 Version Information** - Current version: `0.2.15` - Previous version: `0.2.15` ## Unreleased ([a00ca19..a00ca19](https://git.h.oluflorenzen.de/finkregh/zfs-estimator/compare/a00ca19..a00ca19)) #### Miscellaneous Chores - (**deps**) update all dependencies - ([a00ca19](https://git.h.oluflorenzen.de/finkregh/zfs-estimator/commit/a00ca1936c63d197c6d625ae9a935a40fefb517d)) - Renovate Bot *Generated by [cocogitto](https://github.com/cocogitto/cocogitto)*
renovate-forgejo force-pushed renovate/all from f8fe3611ce to a17693b890
Some checks failed
/ Get release information (pull_request) Failing after 22s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
2026-10-09 20:06:45 +00:00
Compare
renovate-forgejo force-pushed renovate/all from a17693b890
Some checks failed
/ Get release information (pull_request) Failing after 22s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
to 9cfb9a2629
Some checks failed
/ Get release information (pull_request) Failing after 21s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
2026-10-10 00:07:26 +00:00
Compare
renovate-forgejo force-pushed renovate/all from 9cfb9a2629
Some checks failed
/ Get release information (pull_request) Failing after 21s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
to 3a7e0d2a8e
Some checks failed
/ Get release information (pull_request) Failing after 21s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
2026-10-10 08:07:00 +00:00
Compare
renovate-forgejo force-pushed renovate/all from 3a7e0d2a8e
Some checks failed
/ Get release information (pull_request) Failing after 21s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
to 2ada5ab9b1
Some checks failed
/ Get release information (pull_request) Failing after 24s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
2026-10-10 16:08:03 +00:00
Compare
renovate-forgejo force-pushed renovate/all from 2ada5ab9b1
Some checks failed
/ Get release information (pull_request) Failing after 24s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
to 437914854d
Some checks failed
/ Get release information (pull_request) Failing after 23s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
2026-10-10 20:06:20 +00:00
Compare
renovate-forgejo force-pushed renovate/all from 437914854d
Some checks failed
/ Get release information (pull_request) Failing after 23s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
to 4e661acba0
Some checks failed
/ Get release information (pull_request) Failing after 21s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
2026-10-13 00:07:31 +00:00
Compare
renovate-forgejo force-pushed renovate/all from 4e661acba0
Some checks failed
/ Get release information (pull_request) Failing after 21s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
to a00ca1936c
Some checks failed
/ Get release information (pull_request) Failing after 21s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
2026-10-14 00:07:47 +00:00
Compare
Some checks failed
/ Get release information (pull_request) Failing after 21s
/ Unittests and try build -- Python 3.14 (pull_request) Has been skipped
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/all:renovate/all
git switch renovate/all

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff renovate/all
git switch renovate/all
git rebase main
git switch main
git merge --ff-only renovate/all
git switch renovate/all
git rebase main
git switch main
git merge --no-ff renovate/all
git switch main
git merge --squash renovate/all
git switch main
git merge --ff-only renovate/all
git switch main
git merge renovate/all
git push origin main
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
finkregh/zfs-estimator!18
No description provided.