This patch release fixes two CLI regressions introduced in 2.16.0.
Bug fixes
CLI
Fixed-length tuple positionals such as CliPositionalArg[tuple[int, int]] and NamedTuples are single-valued again (#1069). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a SettingsError or put the wrong argument into the tuple. Variable-length tuples (tuple[int, ...] and bare Tuple) are still variadic.
A field typed as an alias of a list of dicts, e.g. type ListOfDict = list[dict[str, int]], accepts a JSON list again (#1049). Since 2.16.0, --xx '[{"a":1},{"b":2}]' was merged into the single dict {"a": 1, "b": 2} and failed validation.
All changes (including dependency bumps and internal maintenance)
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [pydantic-settings](https://github.com/pydantic/pydantic-settings) ([changelog](https://github.com/pydantic/pydantic-settings/releases)) | `2.16.0` → `2.16.1` |  |  |
| [ty](https://github.com/astral-sh/ty) ([changelog](https://github.com/astral-sh/ty/blob/main/CHANGELOG.md)) | `0.0.89` → `0.0.90` |  |  |
---
### Release Notes
<details>
<summary>pydantic/pydantic-settings (pydantic-settings)</summary>
### [`v2.16.1`](https://github.com/pydantic/pydantic-settings/releases/tag/v2.16.1)
[Compare Source](https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1)
#### Highlights
This patch release fixes two CLI regressions introduced in 2.16.0.
##### Bug fixes
**CLI**
- Fixed-length tuple positionals such as `CliPositionalArg[tuple[int, int]]` and `NamedTuple`s are single-valued again ([#​1069](https://github.com/pydantic/pydantic-settings/pull/1069)). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with a `SettingsError` or put the wrong argument into the tuple. Variable-length tuples (`tuple[int, ...]` and bare `Tuple`) are still variadic.
- A field typed as an alias of a list of dicts, e.g. `type ListOfDict = list[dict[str, int]]`, accepts a JSON list again ([#​1049](https://github.com/pydantic/pydantic-settings/pull/1049)). Since 2.16.0, `--xx '[{"a":1},{"b":2}]'` was merged into the single dict `{"a": 1, "b": 2}` and failed validation.
<details>
<summary><b>All changes</b> (including dependency bumps and internal maintenance)</summary>
#### What's Changed
* Harden CI by @​Viicos in https://github.com/pydantic/pydantic-settings/pull/1044
* Keep list of dicts CLI values as lists by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/1049
* Keep fixed-length tuple CLI positionals single-valued by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/1069
* Prepare release 2.16.1 by @​hramezani in https://github.com/pydantic/pydantic-settings/pull/1087
* build(deps): bump the python-packages group with 3 updates by @​dependabot[bot] in https://github.com/pydantic/pydantic-settings/pull/1056
**Full Changelog**: <https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1>
</details>
</details>
<details>
<summary>astral-sh/ty (ty)</summary>
### [`v0.0.90`](https://github.com/astral-sh/ty/blob/HEAD/CHANGELOG.md#0090)
[Compare Source](https://github.com/astral-sh/ty/compare/0.0.89...0.0.90)
Released on 2026-10-20.
##### Bug fixes
- Allow subclasses to restore hashability ([#​29471](https://github.com/astral-sh/ruff/pull/29471))
- Avoid crashes when negating recursive aliases ([#​29429](https://github.com/astral-sh/ruff/pull/29429))
- Avoid stack overflow for recursive descriptor setter checks ([#​29467](https://github.com/astral-sh/ruff/pull/29467))
- Defer constructor type variable defaults ([#​29469](https://github.com/astral-sh/ruff/pull/29469))
- Preserve bound receivers for strict signature checks ([#​29396](https://github.com/astral-sh/ruff/pull/29396))
- Preserve read types for dynamic attributes ([#​29461](https://github.com/astral-sh/ruff/pull/29461))
- Reject runtime_checkable on non-protocol classes ([#​29460](https://github.com/astral-sh/ruff/pull/29460))
- Validate TypeAliasType keyword arguments ([#​29466](https://github.com/astral-sh/ruff/pull/29466))
##### LSP server
- Add return-type inlay hints ([#​29437](https://github.com/astral-sh/ruff/pull/29437))
##### Other changes
- Adopt stable macOS signing identifiers ([#​4743](https://github.com/astral-sh/ty/pull/4743))
- Avoid inserting inlay hints containing stub-only types ([#​29477](https://github.com/astral-sh/ruff/pull/29477))
- Filter incompatible union members during union inference ([#​29344](https://github.com/astral-sh/ruff/pull/29344))
- Infer ParamSpecs from call-wide constraints ([#​28828](https://github.com/astral-sh/ruff/pull/28828))
- Mitigate pauses from clearing cached ASTs in more language server operations ([#​29232](https://github.com/astral-sh/ruff/pull/29232))
- Report read-only keys when deleting, popping, or defaulting TypedDict items ([#​29441](https://github.com/astral-sh/ruff/pull/29441))
- Support uv's nested module ownership metadata ([#​29436](https://github.com/astral-sh/ruff/pull/29436))
##### Contributors
- [@​carljm](https://github.com/carljm)
- [@​zsol](https://github.com/zsol)
- [@​zanieb](https://github.com/zanieb)
- [@​ibraheemdev](https://github.com/ibraheemdev)
- [@​hsusul](https://github.com/hsusul)
- [@​charliermarsh](https://github.com/charliermarsh)
- [@​sharkdp](https://github.com/sharkdp)
- [@​dhruvmanila](https://github.com/dhruvmanila)
- [@​lerebear](https://github.com/lerebear)
</details>
---
### Configuration
📅 **Schedule**: (in timezone Europe/Warsaw)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, 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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNDUuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjE0NS4xIiwidGFyZ2V0QnJhbmNoIjoiZGV2IiwibGFiZWxzIjpbImRlcHMtY29kZSIsInJlbm92YXRlIl19-->
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
any of the package files in this branch needs updating, or
the branch becomes conflicted, or
you click the rebase/retry checkbox if found above, or
you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
File name: backend/pyproject.toml
Artifact update for ty resolved to version 0.0.91, which is a pending version that has not yet passed the Minimum Release Age threshold.
Renovate was attempting to update to 0.0.90
This is (likely) not a bug in Renovate, but due to the way your project pins dependencies, _and_ how Renovate calls your package manager to update them.
Until Renovate supports specifying an exact update to your package manager (https://github.com/renovatebot/renovate/issues/41624), it is recommended to directly pin your dependencies (with `rangeStrategy=pin` for apps, or `rangeStrategy=widen` for libraries)
See also: https://docs.renovatebot.com/dependency-pinning/
### ⚠️ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
- any of the package files in this branch needs updating, or
- the branch becomes conflicted, or
- you click the rebase/retry checkbox if found above, or
- you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
##### File name: backend/pyproject.toml
```
Artifact update for ty resolved to version 0.0.91, which is a pending version that has not yet passed the Minimum Release Age threshold.
Renovate was attempting to update to 0.0.90
This is (likely) not a bug in Renovate, but due to the way your project pins dependencies, _and_ how Renovate calls your package manager to update them.
Until Renovate supports specifying an exact update to your package manager (https://github.com/renovatebot/renovate/issues/41624), it is recommended to directly pin your dependencies (with `rangeStrategy=pin` for apps, or `rangeStrategy=widen` for libraries)
See also: https://docs.renovatebot.com/dependency-pinning/
```
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
2.16.0→2.16.10.0.89→0.0.90Release Notes
pydantic/pydantic-settings (pydantic-settings)
v2.16.1Compare Source
Highlights
This patch release fixes two CLI regressions introduced in 2.16.0.
Bug fixes
CLI
CliPositionalArg[tuple[int, int]]andNamedTuples are single-valued again (#1069). Since 2.16.0 they were treated as variadic, so a CLI either refused to start with aSettingsErroror put the wrong argument into the tuple. Variable-length tuples (tuple[int, ...]and bareTuple) are still variadic.type ListOfDict = list[dict[str, int]], accepts a JSON list again (#1049). Since 2.16.0,--xx '[{"a":1},{"b":2}]'was merged into the single dict{"a": 1, "b": 2}and failed validation.All changes (including dependency bumps and internal maintenance)
What's Changed
Full Changelog: https://github.com/pydantic/pydantic-settings/compare/v2.16.0...v2.16.1
astral-sh/ty (ty)
v0.0.90Compare Source
Released on 2026-10-20.
Bug fixes
LSP server
Other changes
Contributors
Configuration
📅 Schedule: (in timezone Europe/Warsaw)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate CLI.
⚠️ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
The artifact failure details are included below:
File name: backend/pyproject.toml