Release Notes
Released on 2026-09-07.
Bug fixes
- Avoid dict keyword-call panics when typing is shadowed (#28292)
- Discover configs in models derived from legacy generic classes (#28397)
- Normalize recursive collection-use constraints (#28332)
- Recover cycles when constructing known class instances (#28289)
CLI
- Embed archive checksums in the shell installer (#4458)
Diagnostic improvements
- Add
Literalfixes for diagnostics flagging invalid type annotations (#28185) - Add
awaitfixes for redundant conditions (#28169) - Add
assert_neverfixes for redundant finalelifbranches (#28178) - Add defensive assertion fallback for redundant
eliffixes (#28179) - Add rules to detect always-truthy and always-falsy conditions (#28034)
- Preserve deprecations on decorated callables (#28256)
- Require a direct dependency for
reveal_typebackport fixes (#28177) - Suggest variable-length tuple annotations for redundant conditions (#28168)
Core type checking
- Align
TypeIsandisinstancenarrowing (#28193) - Avoid falling back to
Unknownwhen collecting type context constraints (#28297) - Ensure
f is identity(f)evaluates toLiteral[True](#28360) - Fix callable specialization with union-valued
ParamSpec(#28085) - Infer variance through recursive protocols (#28077)
- Narrow types with ordered length comparisons (#28264)
- Preserve gradual type context during generic call inference (#28091)
- Preserve nominal subtyping for top-materialized protocols (#28271)
- Preserve outer type variables during
ParamSpecinference (#28306) - Preserve protocol intersections when narrowing gradual types (#28391)
- Promote literals in nested (non-covariant) positions (#28389)
- Reject missing attributes on
type[]aliases (#28267) - Solve formal unions using constraint-sets (#28312)
- Sync vendored typeshed stubs (#28331). Typeshed diff
Performance
- Avoid unnecessary work when building specializations (#28369)
- Bypass materialization queries for simple types (#28367)
- Cache exception suppression for context managers (#28376)
- Intern statement call predicates (#28373)
- Lazily compute argument-context specializations (#28378)
- Pre-size packed AST index chunks (#28372)
- Reduce repeated work in use-def merges (#28365)
- Skip decorator flags query for undecorated methods (#28338)
Memory usage improvements
- Avoid caching simple type specializations (#28333)
- Box cached MRO error details (#28351)
- Reuse generic aliases as MRO query keys (#28350)
- Reuse interned bound method signatures (#28346)
- Reuse stored function signatures without caching duplicates (#28347)
- Share retained use-def tables across scopes (#28313)
- Store single narrowing operations inline (#28345)
- Store uncommon signature metadata out of line (#28339)
Other changes
- Declare support for Python 3.15 (#4476)
Contributors
Install ty 0.0.79
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ty/releases/download/0.0.79/ty-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ty/releases/download/0.0.79/ty-installer.ps1 | iex"Download ty 0.0.79
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/tyYou 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>