Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1519 commits
Select commit Hold shift + click to select a range
b9fa93c
[ty] Preserve return constraints for object-variadic callables (#27431)
dhruvmanila Aug 4, 2026
e55b98e
[ty] Preserve return constraints for top callables (#27446)
dhruvmanila Aug 4, 2026
f00d9b8
[ty] Bump ecosystem-analyzer to fix attrs and Bokeh (#27457)
sharkdp Aug 4, 2026
f96df04
[ty] Top-materialize `is_dataclass` type guard (#27455)
sharkdp Aug 4, 2026
94d1bef
[ty] Reject unsupported `dataclass_transform` parameters (#27458)
sharkdp Aug 4, 2026
0fcc5ae
[ty] Fix unused hints for OR-pattern captures (#27438)
carljm Aug 4, 2026
b56bb12
[ty] Preserve generic class type variables in constructor inference (…
charliermarsh Aug 4, 2026
d82ee58
[ty] Retain typing-only symbols in explicit completions (#27435)
charliermarsh Aug 4, 2026
721f310
[ty] Remove deprecated `src.root` setting in favor of `environment.ro…
MichaReiser Aug 4, 2026
9f45b2e
[ty] Fix specialization cycle with deferred TypeVar defaults (#27453)
charliermarsh Aug 4, 2026
3f50935
[ty] Extract constraint-set-related benchmarks into separate file (#2…
dcreager Aug 4, 2026
1a92e30
[ty] Infer generic TypedDicts through synthesized constructor signatu…
charliermarsh Aug 4, 2026
b404fe1
[ty] Rename the Markdown code-span predicate used in docstring parsin…
lerebear Aug 4, 2026
e63c27e
[ty] Preserve class type parameters through generic decorators (#27442)
carljm Aug 4, 2026
e1938d3
[ty] Recover generic constructor types from failing overloads (#27460)
charliermarsh Aug 4, 2026
e49143a
[ty] Index match-pattern bindings as symbols (#27260)
Punisheroot Aug 4, 2026
5810946
[ty] Preserve called types in intersection diagnostics (#27475)
carljm Aug 5, 2026
ea933ff
[ty] Validate constructor calls on unbounded type variables (#27449)
charliermarsh Aug 5, 2026
2ddadb9
[ty] Fix constructor calls on narrowed type-variable intersections (#…
carljm Aug 5, 2026
7982c94
Update Rust crate camino to v1.2.5 (#27481)
renovate[bot] Aug 5, 2026
b220003
Update Rust crate thin-vec to v0.2.19 (#27484)
renovate[bot] Aug 5, 2026
5ba9d8f
Update taiki-e/install-action action to v2.85.3 (#27490)
renovate[bot] Aug 5, 2026
c82cbfe
Update CodSpeedHQ/action action to v4.19.1 (#27487)
renovate[bot] Aug 5, 2026
e38aea0
Update Rust crate toml to v1.1.4 (#27485)
renovate[bot] Aug 5, 2026
8961e0e
Update Rust crate toml_parser to v1.1.3 (#27486)
renovate[bot] Aug 5, 2026
bfa551c
Update Rust crate jiff to v0.2.35 (#27482)
renovate[bot] Aug 5, 2026
78fd19c
Update dependency astral-sh/uv to v0.12.1 (#27477)
renovate[bot] Aug 5, 2026
f76455d
Update dependency unidiff to v1 (#27491)
renovate[bot] Aug 5, 2026
04eb43c
Update Rust crate schemars to v1.2.2 (#27483)
renovate[bot] Aug 5, 2026
44460d4
Update cargo-bins/cargo-binstall action to v1.21.1 (#27476)
renovate[bot] Aug 5, 2026
26435b5
Update prek dependencies (#27480)
renovate[bot] Aug 5, 2026
8348f2f
Update dependency ruff to v0.16.1 (#27479)
renovate[bot] Aug 5, 2026
101d25d
Update dependency prek to v0.4.11 (#27478)
renovate[bot] Aug 5, 2026
a16cb1b
Update NPM Development dependencies (#27489)
renovate[bot] Aug 5, 2026
21b866e
Update docker/login-action action to v4.5.2 (#27488)
renovate[bot] Aug 5, 2026
7b025a5
[ty] [playground] Make run panel scrollable and wrapping (#27474)
MeGaGiGaGon Aug 5, 2026
3e628b8
[ty] Update Salsa to 0.28.2 (#27496)
MichaReiser Aug 5, 2026
bc0422e
[ty] Select benchmark projects in memory reports (#27499)
MichaReiser Aug 5, 2026
082dc5b
[ty] Infer generic TypedDicts from unpacked TypedDicts (#27439)
charliermarsh Aug 5, 2026
c0efa1a
[ty] Avoid exponential slowdown copying narrowed TypedDict unions (#2…
carljm Aug 5, 2026
19330b4
[ty] Reject Self with incompatible explicit receiver annotations (#27…
charliermarsh Aug 5, 2026
4f75884
[ty] Install primer dependencies for memory reports (#27500)
MichaReiser Aug 5, 2026
79e9224
[ty] Suppress `unimported-reveal` diagnostics in stub files and `if T…
AlexWaygood Aug 5, 2026
f33f59f
[ty] Clarify ecosystem summary diagnostic placement (#27511)
AlexWaygood Aug 5, 2026
8c30182
[ty] Normalize unpacked callable signatures for assignability (#27450)
charliermarsh Aug 5, 2026
c8399f2
test(annotate): Verify cell_index behavior
epage Jul 31, 2026
22b2bc8
fix(annotate): Fix the suggestion anonymous logic
epage Jul 31, 2026
36eb998
refactor(annotate): Pull out origin formatting
epage Jul 31, 2026
c6c4d38
fix(annotate): Render cells for patches
epage Jul 31, 2026
9706569
refactor(annotate): Allow optional paths in Origin
epage Jul 31, 2026
54adc11
fix(annotate): Show origin when cell changed from last suggestion
epage Jul 31, 2026
03989bf
fix(annotate): Always show cell index
epage Jul 31, 2026
68d556d
fix(annotate): Hide the path when just the cell changes
epage Jul 31, 2026
2e64753
fix(annotate): Use ruff's patch origin marker
epage Aug 1, 2026
f5f7e14
test(annotate): Capture confusing suggestion
epage Aug 3, 2026
bb86883
perf(annotate): Remove redundant location lookup
epage Aug 4, 2026
9c53b5d
fix(annotate): Remove panic in suggestions
epage Aug 4, 2026
a663722
[ty]Tokenize reStructuredText prefix roles (#27464)
lerebear Aug 5, 2026
59de3d2
refactor(db): Delegate Diff::fmt to an inherent method
epage Jul 30, 2026
3a04e25
refactor(db): Extract applicability note
epage Jul 29, 2026
65e6104
refactor(db): Decouple applicability note from Diff Part 1
epage Jul 30, 2026
9e18e07
refactor(db): Decouple applicability note from Diff Part 2
epage Jul 30, 2026
ba5fdba
refactor(db): Pull out common applicability code
epage Jul 30, 2026
0ae4d9f
refactor(db): Pull out applicability note call
epage Jul 29, 2026
3c09617
refactor(db): Render Applicability through annotate-snippets
epage Jul 29, 2026
3d1516f
release: use self-repo syntax (#27514)
woodruffw Aug 5, 2026
d8e5507
[ty] Target the mdtest binary when running individual mdtests (#27521)
charliermarsh Aug 5, 2026
3eb4c71
[ty] Reject unhashable objects for Hashable protocols (#27441)
carljm Aug 5, 2026
3618a85
[ty] Restore bottom callable subtyping for gradual prefixes (#27519)
carljm Aug 5, 2026
8c7933a
[ty] Shrink callable types in property tests (#27504)
AlexWaygood Aug 5, 2026
4ac5dee
[ty] Add subdiagnostic hint when an open `TypedDict` is not assignabl…
AlexWaygood Aug 5, 2026
39ff33c
[ty] Preserve property getter call errors (#27509)
charliermarsh Aug 5, 2026
c3ac422
refactor(db): Better focus comments
epage Jul 29, 2026
89ddb33
refactor(db): Extract cell calculation function
epage Jul 30, 2026
973372e
refactor(db): Prefer early return
epage Jul 30, 2026
8effcb8
refactor(db): Clarify we are working with a cell index
epage Jul 30, 2026
9ed797b
refactor(db): Pull out range calculations
epage Jul 30, 2026
2582b1a
refactor(db): Adjust cell index type
epage Jul 31, 2026
08f48a6
refactor(db): Decouple edit filters from diff render
epage Jul 30, 2026
9501d97
[ty] Simplify numeric tower displays (e.g., `float` over `int | float…
charliermarsh Aug 5, 2026
c88d3c5
[ty] Avoid double inference of Unpack operands in Union (#27525)
carljm Aug 5, 2026
6dc1031
Disable local ThinLTO for optimized development workflows (#27526)
charliermarsh Aug 5, 2026
fce9727
[ty] Fix panic from mismatched OR-pattern bindings (#27533)
carljm Aug 6, 2026
87aa1aa
[ty] Gradual `isinstance` narrowing for generic classes (#27308)
sharkdp Aug 6, 2026
c06c003
[ty] Temporarily remove myself from the reviewer pool (#27541)
sharkdp Aug 6, 2026
64021cf
[ty] Require ClassVar declarations for protocol members (#27530)
charliermarsh Aug 6, 2026
e7a2d2c
[ty] Infer variance through type[T] (#27534)
charliermarsh Aug 6, 2026
c88946e
[ty] Bump ecosystem-analyzer for strict project settings (#27542)
sharkdp Aug 6, 2026
baea3d0
[ty] Expose strict analysis options in the playground (#27543)
sharkdp Aug 6, 2026
05160d5
[ty] Diagnose invalid descriptor `__get__` calls (#27400)
charliermarsh Aug 6, 2026
22c7823
[ty] Enable (but downrank) auto-import completion suggestions from st…
AlexWaygood Aug 6, 2026
2fc445f
[ty] Diagnose invalid __getattr__ calls (#27502)
charliermarsh Aug 6, 2026
6ea296b
[ty] Normalize type labels in structured docstrings (#26923)
lerebear Aug 6, 2026
17a00de
[ty] Reuse primer commands in memory reports (#27553)
MichaReiser Aug 6, 2026
c4e86fc
[ty] Add helper extension methods for half-range and equality constra…
dcreager Aug 7, 2026
1b9e5fc
Update Swatinem/rust-cache action to v2.9.2 (#27568)
charliermarsh Aug 7, 2026
5b48a04
Bump 0.16.2 (#27555)
ntBre Aug 7, 2026
02ce4ba
[ty] Add an opt-in unsound-return-statement lint (#27561)
AlexWaygood Aug 7, 2026
9a908ef
[ty] Enable missing ecosystem analysis rules (#27559)
AlexWaygood Aug 7, 2026
55c7d48
[ty] Consider object members in protocol comparisons (#27532)
carljm Aug 7, 2026
2aff056
[ty] Stabilize recursive gradual type alias materialization (#27563)
carljm Aug 7, 2026
fbcaa20
[ty] Expand type aliases for `Generator` when evaluating a generator …
AlexWaygood Aug 7, 2026
fade22c
[ty] Recognize overlapping NewTypes and their underlying values (#27522)
carljm Aug 7, 2026
a706896
[ty] Infer precise TypedDict key-membership truthiness (#27579)
carljm Aug 7, 2026
2c5dcc2
[`ruff`] Also suggest `asyncio.TaskGroup` (`RUF006`) (#27461)
tjkuson Aug 7, 2026
df3216e
[`numpy`] Make `np.chararray` autofix backwards-compatible (`NPY201`)…
romero-deshaw Aug 7, 2026
6f86de2
[`pylint`] Fix false negatives on negative numbers (`PLR6104`) (#27251)
Avasam Aug 7, 2026
ba581e1
[ty] Avoid composite Salsa keys for unspecialized MROs (#27592)
MichaReiser Aug 8, 2026
463826d
[ty] Update flaky primer projects (#27597)
AlexWaygood Aug 8, 2026
3115cba
[ty] Preserve contextual inference for declarations in loops (#27594)
charliermarsh Aug 8, 2026
24baf2c
[ty] Remove unnecessary constraint set display simplification logic (…
dcreager Aug 8, 2026
344c279
[ty] Resolve uv from PATH before workspace discovery (#27609)
MichaReiser Aug 9, 2026
4f312d3
[ty] Avoid deadlock when scheduling watch checks (#27605)
MichaReiser Aug 9, 2026
c56aad1
[ty] Reduce Expr size to 64 bytes (#27591)
charliermarsh Aug 9, 2026
17980fe
Update mimalloc version to 0.1.52 (#27586)
chirizxc Aug 9, 2026
09a7441
[ty] Split-off `Command` execution from `System` (#27608)
MichaReiser Aug 9, 2026
78cad66
[ty] Add an opt-in `unsound-yield` lint (#27593)
AlexWaygood Aug 9, 2026
68799c4
[ty] Two equality constraints are usually disjoint (#27614)
dcreager Aug 9, 2026
18bb80d
[ty] Fix signature help at end of file (#27622)
MichaReiser Aug 10, 2026
3440632
[`pylint`] Allow `continue` in `finally` on Python 3.8 (#27626)
MichaReiser Aug 10, 2026
d031eb1
[ty] Support Annotated inside type[...] (#27629)
AlexWaygood Aug 10, 2026
c0824de
Enable rustfmt on more files (#27630)
AlexWaygood Aug 10, 2026
4992557
[ty] Preserve typing-only completion ranking in TYPE_CHECKING blocks …
AlexWaygood Aug 10, 2026
282d6f9
[ty] Improve ecosystem minimization and reporting skills (#27632)
AlexWaygood Aug 10, 2026
60d2207
Enable PGO for Linux x86-64 Ruff releases (#27570)
charliermarsh Aug 10, 2026
efccf49
Enable PGO for macOS ARM64 Ruff releases (#27572)
charliermarsh Aug 10, 2026
f32cff5
Enable PGO for Windows x86-64 Ruff releases (#27573)
charliermarsh Aug 10, 2026
fbe3e25
Enable PGO for Linux ARM64 Ruff releases (#27574)
charliermarsh Aug 10, 2026
6f89634
[ty] Exclude quantified constraints from semantic type walks (#27613)
charliermarsh Aug 10, 2026
a015723
[ty] Validate augmented assignment stores (#27545)
charliermarsh Aug 10, 2026
d23b7e8
[`pylint`] Fix false positives and negatives with `%b` format charact…
Andrej730 Aug 10, 2026
b9afd02
[ty] Fix truthiness inference for subclassable known classes (#27638)
AlexWaygood Aug 10, 2026
7be0508
[ty] Preserve literal-string origin in comparison narrowing (#27582)
carljm Aug 10, 2026
d00a1a2
[ty] fix mdtest prose about string literal identity checks (#27639)
carljm Aug 10, 2026
2a42ea5
[ty] Clarify incompatible loop declaration regression (#27640)
charliermarsh Aug 10, 2026
d08b174
[ty] Validate boolean conversion in comprehension filters (#27641)
carljm Aug 11, 2026
58652e1
[ty] Validate unpacked callable argument shapes (#27516)
dhruvmanila Aug 11, 2026
96737aa
Use Depot runners for release builds (#27627)
charliermarsh Aug 11, 2026
a2e887a
[ty] Preserve constrained TypeVars when slicing (#27645)
carljm Aug 11, 2026
3436ac3
Pin Depot runners to Ubuntu 24.04 (#27656)
charliermarsh Aug 11, 2026
490f2b3
Use a four-core Depot runner for Linux ARM64 PGO builds (#27657)
charliermarsh Aug 11, 2026
ed768f0
[ty] Preserve enum attributes on Self and bounded type variables (#27…
carljm Aug 11, 2026
feb64f2
[`pylint`] Fix `PLE1307` false positive with bools (#27651)
Andrej730 Aug 11, 2026
93901e6
[ty] Separate place-load resolution from type inference. (#27319)
lerebear Aug 11, 2026
6d8d1b9
[`pylint`] Improve handling of concatenated strings (`PLE1300`) (#27659)
Andrej730 Aug 11, 2026
17097a6
Use eight-core runners for native Linux PGO builds (#27662)
charliermarsh Aug 11, 2026
8f11b10
[ty] Initialize `PlaceLoadResolution::crosses_scope_declaration` with…
lerebear Aug 11, 2026
672d75c
[ty] Resolve generic type aliases subscripted inside `type[]` (#27663)
augustelalande Aug 12, 2026
95af589
[ty] Diagnose invalid __getattribute__ calls (#27506)
charliermarsh Aug 12, 2026
16049e4
[ty] Handle class objects that may be descriptors (#26687)
charliermarsh Aug 12, 2026
845ef6d
Update Rust crate clap to v4.6.5 (#27675)
renovate[bot] Aug 12, 2026
10f8dc2
Update Rust crate globset to v0.4.20 (#27676)
renovate[bot] Aug 12, 2026
2a1f6f6
Update dependency prek to v0.4.12 (#27671)
renovate[bot] Aug 12, 2026
0d773b0
Update dependency ruff to v0.16.2 (#27672)
renovate[bot] Aug 12, 2026
c52b66d
Update Rust crate aho-corasick to v1.1.5 (#27674)
renovate[bot] Aug 12, 2026
2ff9cfd
Update Rust crate ignore to v0.4.33 (#27677)
renovate[bot] Aug 12, 2026
0e85931
Update prek dependencies (#27673)
renovate[bot] Aug 12, 2026
fe9af4f
Update CodSpeedHQ/action action to v5 (#27686)
renovate[bot] Aug 12, 2026
5609806
Update taiki-e/install-action action to v2.85.8 (#27680)
renovate[bot] Aug 12, 2026
25e9154
Update Rust crate similar to v3.1.2 (#27679)
renovate[bot] Aug 12, 2026
98aae2e
Update dependency pyrefly to v1.2.0 (#27682)
renovate[bot] Aug 12, 2026
2936d57
Update dependency astral-sh/uv to v0.12.3 (#27670)
renovate[bot] Aug 12, 2026
9ddde64
Update docker/login-action action to v4.6.0 (#27683)
renovate[bot] Aug 12, 2026
1f21a77
Update dependency mdformat-mkdocs to v5.3.0 (#27681)
renovate[bot] Aug 12, 2026
a5bb9fb
Update NPM Development dependencies (#27684)
renovate[bot] Aug 12, 2026
8644a5e
[ty] Improve ecosystem summary reports (#27695)
AlexWaygood Aug 12, 2026
ec02d6d
[`flake8-bandit`] Also check keyword arguments (`S602`, `S603`, `S607…
saberoueslati Aug 12, 2026
a9663e2
[ty] Restrict equality impossibility to static bounds (#27655)
dcreager Aug 12, 2026
409be9c
[ty] Infer typevars through a nominal `type[…]` formal (#27689)
augustelalande Aug 12, 2026
f3cb505
[ty] Remove obsolete `satisfied_by_all_typevars` constraint helper (#…
dcreager Aug 12, 2026
8935497
[ty] Avoid introducing boolean literals when narrowing integers (#27698)
charliermarsh Aug 12, 2026
4d261dd
Hyperlink rule codes in `ruff check --statistics` output (#27646)
alonfaraj Aug 12, 2026
5b2ed0d
[ty] Respect third-party keyword-only fields before Python 3.10 (#27699)
charliermarsh Aug 12, 2026
9798e88
[ty] Preserve enum exhaustiveness with custom _missing_ methods (#27700)
charliermarsh Aug 12, 2026
9dea5ef
[ty] Avoid deriving sequents for typevars with concrete bounds (#27587)
ibraheemdev Aug 12, 2026
c64c7d6
[ty] Model try exception flow with operation checkpoints (#27471)
charliermarsh Aug 12, 2026
a9130f3
[`pyupgrade`] Add rule to replace `while 1` with `while True` (`while…
Avasam Aug 12, 2026
2b0d210
[ty] Centralize matched argument relations (#27705)
carljm Aug 12, 2026
b8c5e73
[ty] Disable CodSpeed cycle estimation for instrumented benchmarks (#…
carljm Aug 13, 2026
59196ba
[ty] Unify polarity-aware relation construction (#27707)
carljm Aug 13, 2026
1263524
[ty] Simplify display implementations with std::fmt::from_fn (#27718)
AlexWaygood Aug 13, 2026
ecdd401
[ty] Separate script and uv modules from project metadata (#27720)
MichaReiser Aug 13, 2026
b0e4702
Bump 0.16.3 (#27723)
ntBre Aug 13, 2026
27e91ed
[ty] Avoid treating augmented assignments as attribute definitions (#…
charliermarsh Aug 13, 2026
cf358a9
[ty] Update typing conformance suite pin (#27725)
AlexWaygood Aug 13, 2026
73d3b6f
Validate the PGO pipeline in CI (#27669)
charliermarsh Aug 13, 2026
9b5c5bc
[ty] Improve diagnostic hints for assignability mismatches with proto…
AlexWaygood Aug 13, 2026
4df8eae
[ty] Preserve tuple types containing Never (#27580)
carljm Aug 13, 2026
4324025
Add default indicator to rules table (#27724)
ntBre Aug 13, 2026
a46f553
[ty] Treat generator-expression exceptions as eagerly evaluated (#27735)
charliermarsh Aug 13, 2026
d332d20
[syntax-errors] Name is parameter and nonlocal (#27628)
WhiteFox0-0 Aug 13, 2026
04d59f4
[ty] Report deprecated unary operations (#27584)
Andrej730 Aug 13, 2026
41e88e3
Document file-watcher sandbox limitations (#27727)
AlexWaygood Aug 14, 2026
5794a52
[ty] Ignore generic declaration metadata in staticness checks (#27692)
AlexWaygood Aug 14, 2026
9d3dc93
[ty] Simplify fully static property tests (#27693)
AlexWaygood Aug 14, 2026
083ec1e
[ty] Fix overload argument expansion with unpacked positional argumen…
carljm Aug 14, 2026
bf15c8c
[ty] Avoid exponential narrowing of gradual string-literal unions (#2…
carljm Aug 14, 2026
a103832
[ty] Check PEP 723 scripts in isolation (#27462)
MichaReiser Aug 14, 2026
7a9aed2
Guarantee minimum stack size when parsing a module, standalone expres…
MichaReiser Aug 14, 2026
4fa13b3
[ty] Support TypeVarTuple in call binding (#26886)
dhruvmanila Aug 14, 2026
815ea22
[ty] Accept enum members for lax Pydantic string and integer fields (…
charliermarsh Aug 14, 2026
71e87c8
[ty] Accept documented boolean and fractional Pydantic inputs (#27754)
charliermarsh Aug 14, 2026
4d813d5
Fix broken link to Python docs (#27757)
rosstitmarsh Aug 14, 2026
e986989
[`ruff`] Add `ctypes.LittleEndianStructure` and others alike to exist…
royb3 Aug 14, 2026
a8ba9e0
Fix Git metadata tracking in linked worktrees (#27710)
charliermarsh Aug 14, 2026
2741d28
Compare stacked PRs against the preceding layer (#27756)
charliermarsh Aug 14, 2026
0e8636c
[ty] Diagnose invalid module-level __getattr__ calls (#27507)
charliermarsh Aug 14, 2026
99d68da
[`flake8-use-pathlib`] Add autofixes for `PTH116` (#26460)
WhiteFox0-0 Aug 14, 2026
5226c06
[`pylint`] Allow `os._exit` imports in `import-private-name` (`PLC270…
lakshayxi Aug 14, 2026
89ac93b
[`refurb`] Restrict `delete-full-slice` to lists (`FURB131`) (#27711)
AbhinavMir Aug 14, 2026
19e0397
[ty] Fix specialization of generic TypedDict aliases (#27760)
carljm Aug 14, 2026
8f703fc
[`refurb`] Skip `FURB101` and `FURB103` when the `open` argument is a…
baltasarblanco Aug 14, 2026
4a4abe4
Align Renovate config with preset (#27762)
woodruffw Aug 14, 2026
3b067a1
[ty] Avoid bypassing solver during literal promotion (#27763)
ibraheemdev Aug 14, 2026
9de726f
[ty] Sync vendored typeshed and repair local patches (#27771)
carljm Aug 15, 2026
e534072
[ty] Preserve required stub fields in generated constructors (#27765)
carljm Aug 15, 2026
239f2a8
Fix s390x stacker assembly in release builds (#27776)
MichaReiser Aug 15, 2026
8a772d3
[ty] Reclassify fully static property-test types (#27780)
AlexWaygood Aug 15, 2026
6d4d692
[ty] Update ecosystem-analyzer workflow pins (#27523)
AlexWaygood Aug 15, 2026
36cc91f
Optimize development builds by default (#27562)
charliermarsh Aug 15, 2026
ae40859
[ty] Model exception-suppressing context managers (#27219)
charliermarsh Aug 15, 2026
52ec0cf
[ty] Reduce notebook version logging to debug (#27783)
MichaReiser Aug 15, 2026
5428c21
[ty] Expand nested union aliases when finding a TypedDict or callable…
augustelalande Aug 15, 2026
a1a17be
[ty] Preserve variadic generics in functools.partial (#27774)
carljm Aug 15, 2026
370f735
[ty] Improve ecosystem report summaries (#27785)
AlexWaygood Aug 15, 2026
b96364c
[ty] Extract implicit-attribute inference into a dedicated module (#2…
charliermarsh Aug 15, 2026
672bb4e
[ty] Show error spans for errors originating in script metadata (#26693)
MichaReiser Aug 16, 2026
bfc9036
Add explicit dependency cooldowns (#27796)
woodruffw Aug 16, 2026
8b623f3
Address `uv audit` findings (#27797)
woodruffw Aug 16, 2026
66418ef
Use pinned forms for `uvx` (#27798)
woodruffw Aug 16, 2026
3fd6039
Fix `InvalidInstruction` on windows CPUs that do not support `POPCNT`…
MichaReiser Aug 17, 2026
885bf66
[ty] Cache `py.typed` contents (#27805)
MichaReiser Aug 17, 2026
dc46d7f
[ty] Fix signature help in trailing whitespace (#27784)
MichaReiser Aug 17, 2026
51c476a
[ty] Disable GitHub CLI telemetry in ecosystem skills (#27809)
AlexWaygood Aug 17, 2026
ad6afd5
[ty] Prevent unrelated quantified constraints from destabilizing recu…
carljm Aug 17, 2026
d130926
[ty] Update ecosystem-analyzer and mypy-primer pins (#27811)
AlexWaygood Aug 17, 2026
6b450f0
[ty] Preserve explicit globals after conditional rebinding (#27786)
carljm Aug 17, 2026
4f5cc6e
[ty] Preserve static upper bounds of gradual solutions (#27664)
ibraheemdev Aug 17, 2026
01e19ac
[ty] Specialize type variables determined by bound receivers (#27732)
carljm Aug 17, 2026
14b29c0
[ty] Deduplicate exception checkpoints across equivalent branches (#2…
charliermarsh Aug 17, 2026
82e37be
[ty] Preserve TypeAliasType runtime origin (#27813)
AlexWaygood Aug 17, 2026
2b6180a
[ty] Preserve class objects in lazy protocol checks (#27815)
carljm Aug 18, 2026
2668df9
[ty] Preserve declared types in exception handlers (#27817)
carljm Aug 18, 2026
f701927
Merge upstream/main (astral-sh/ruff) into AdaWorldAPI fork: catch-up …
claude Aug 18, 2026
e562491
build: drop the dead astral-sh/lsp-types git patch
claude Aug 18, 2026
e1d86a5
ruff_ruby_spo: silence a genuine false-positive iter_over_hash_type
claude Aug 18, 2026
105577a
ci: pass matrix.platform via env, not inline shell interpolation
claude Aug 18, 2026
d8087a9
AGENTS.md: normalize emphasis style (_have_ -> *have*)
claude Aug 18, 2026
f6f603f
ci: lowercase the ghcr.io image ref (OCI refs are case-sensitive)
claude Aug 18, 2026
1985fa5
ci: fall back to ubuntu-latest for the PGO job on forks
claude Aug 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
14 changes: 14 additions & 0 deletions .agents/.claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "ruff-agent-skills",
"owner": {
"name": "Ruff contributors"
},
"description": "Local Claude Code skills for working on ty in the Ruff repository",
"plugins": [
{
"name": "ty-skills",
"source": "./",
"description": "Local skills for working on ty in the Ruff repository"
}
]
}
4 changes: 4 additions & 0 deletions .agents/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "ty-skills",
"description": "Local skills for working on ty in the Ruff repository"
}
28 changes: 28 additions & 0 deletions .agents/skills/adding-ty-diagnostics/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
name: adding-ty-diagnostics
description: Use when a user says "add a ty diagnostic", "write this new ty diagnostic", "change a ty error message", "review ty diagnostics", or asks to add, update, or review ty checks, diagnostic messages, subdiagnostics, or concise output behavior.
---

# Adding Ty Diagnostics

Use this skill when adding or changing a ty diagnostic, especially as part of a new ty check.

**Keep error messages concise.** Think about how the diagnostic will look on a narrow terminal screen.

Put extra detail in subdiagnostics or secondary annotations when that helps, but make sure the primary diagnostic is understandable on its own.

Always check that the diagnostic still makes sense when the user passes `--output-format=concise`.

If the error code is entirely new or if you have changed the documentation for the error code,
you will need to run `cargo dev generate-all` after making your changes, to update the generated schema for ty
and the generated `.md` documentation files.

Diagnostics should usually be tested using mdtests. If you are changing behaviour for an existing diagnostic,
you should usually add your tests to a pre-existing `.md` file; otherwise, it may be appropriate to add a new
`.md` file for your tests. Snapshot tests are only usually necessary for diagnostics that use secondary annotations
or subdiagnostics. If you want to add a snapshot, inline `# snapshot` comments are preferred over the legacy
`<!-- snapshot-annotations -->` directive.

When using the `declare_lint!` macro, the `status` field should be set to `LintStatus::stable(<next version of ty>)`.
You should determine what the next version of ty will be by inspecting https://pypi.org/pypi/ty/json, finding what
the latest release of ty is, and incrementing the patch version by one. For example, if the latest release of ty is `0.5.3`, the status should be `LintStatus::stable("0.5.4")`.
143 changes: 143 additions & 0 deletions .agents/skills/minimizing-ty-ecosystem-changes/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
---
name: minimizing-ty-ecosystem-changes
description: Use when a user says "minimize this ty ecosystem change", "reproduce this ecosystem result", "investigate a primer difference", "investigate a mypy_primer difference", "investigate a mypy-primer difference", or asks to reproduce, investigate, or minimize behavior changes in ty ecosystem/primer/mypy_primer/mypy-primer projects.
---

# Minimizing Ty Ecosystem Changes

## Invariants

1. Use the exact Ruff revisions, user-level PR config, dependency cutoff, mypy-primer revision, project Python version, and strictness settings from the Actions run.
2. Reproduce the reported project difference before explaining it or writing a smaller example.
3. Treat copied binaries and config as read-only, and verify every reduction against both binaries.
4. Derive every candidate from the preceding verified candidate; NEVER substitute an independently constructed example.
5. Preserve the underlying trigger, not merely the diagnostic rule, message, or displayed type.

Start each investigation from fresh artifacts. Do not trust retained memories, previous minimizations, current upstream project state, or the helper script's default lockfile.

Prefix every direct or indirect `gh` invocation with `GH_TELEMETRY=false`; each Codex tool call may start a new shell.

## Collect Exact-Run Metadata

If the primary agent supplied an immutable `TY_ECOSYSTEM_RUN_METADATA` manifest, verify that its run ID and attempt match the frozen report and that it contains each assigned project. All subagents reuse the same read-only manifest; never modify it or generate another shared manifest.

Otherwise, run the bundled helper once with the Actions run ID or URL, matching attempt, and every affected mypy-primer project name:

```bash
GH_TELEMETRY=false uv run --script scripts/collect_ty_ecosystem_run_metadata.py \
<actions-run> <project-name>... \
--attempt <actions-attempt> \
--output target/ty-ecosystem-run.json
```

The manifest contains the analyzed Ruff revisions, Actions `EXCLUDE_NEWER`, ecosystem-analyzer and mypy-primer revisions, and each project's CI Python version. Stop if the helper cannot determine a unique value; never substitute a comment timestamp or local default.

The current workflow splits compilation into `Build ty (base)` and `Build ty (pr)`. The helper reads the base job, which records both the merge base and PR merge revision, and still supports historical runs with a single `Build ty` job.

## Prepare ty

If a primary agent supplied freshly copied base and PR profiling binaries plus the PR ecosystem config, preserve their absolute paths as `TY_ECOSYSTEM_BASE_BINARY` and `TY_ECOSYSTEM_PR_BINARY`, verify they exist, and reuse them. Do not rebuild those binaries, switch shared Ruff refs, or overwrite the shared artifacts. If an exact-revision debug binary is needed to identify an ambiguous internal type, request it from the primary agent; the profiling binaries remain the behavioral oracle.

Otherwise, require a clean working tree, remember its original ref, and build both exact revisions before assigning any subagent work. Reuse the checkout's existing Cargo target directory, copy the profiling binaries and PR ecosystem config to `target/ty-ecosystem-bins`, and restore the original ref when finished:

Fetch the PR revision explicitly because pull-request runs usually use a synthetic GitHub merge commit that a normal clone does not contain:

```bash
set -euo pipefail

test -z "$(git status --short)" || { git status --short; exit 1; }
original_ref="$(git symbolic-ref --quiet --short HEAD || git rev-parse HEAD)"
GH_TELEMETRY=false git fetch https://github.com/astral-sh/ruff.git <pr-revision>
mkdir -p target/ty-ecosystem-bins
trap 'git checkout "$original_ref"' EXIT

artifact_dir="$PWD/target/ty-ecosystem-bins"
build_target_dir="${CARGO_TARGET_DIR:-target}"
export CARGO_PROFILE_PROFILING_DEBUG=line-tables-only

git checkout --detach <merge-base>
cargo build --package ty --profile profiling
cp "$build_target_dir/profiling/ty" "$artifact_dir/ty-base"

git checkout --detach <pr-revision>
cp .github/ty-ecosystem.toml "$artifact_dir/ty-ecosystem.toml"
cargo build --package ty --profile profiling
cp "$build_target_dir/profiling/ty" "$artifact_dir/ty-pr"
```

After restoring the original ref, inspect vendored definitions and Rust implementations with `git -C <ruff-checkout> show <exact-revision>:<repository-relative-path>`, selecting the merge-base or PR revision from the immutable manifest. Never assume working-tree files match either analyzed binary or switch the shared checkout's ref.

## Reproduce

Create a unique temporary directory for each project and use its absolute path. Read its Python version and the pinned mypy-primer revision from the shared manifest. Obtain the project revision from the `/blob/<commit>/` component of the original diagnostic's source permalink, and check that links for the same project agree. If no diagnostic permalink exists, inspect the matching diagnostics shard or Actions logs; if the exact revision cannot be recovered, explicitly report that limitation. Then bypass the adjacent script lockfile:

```bash
GH_TELEMETRY=false uv run \
--python <project-python> \
--with "mypy-primer @ git+https://github.com/hauntsaninja/mypy_primer@<mypy-primer-revision>" \
--no-project \
python scripts/setup_primer_project.py \
<project-name> <absolute-temporary-directory> \
--revision <report-project-revision> \
--exclude-newer <EXCLUDE_NEWER>
```

Use the ecosystem config as user-level configuration, matching CI without replacing project-level config discovery, and re-export `XDG_CONFIG_HOME` and `RUST_BACKTRACE=1` in each new shell. If a primary agent supplied `TY_ECOSYSTEM_CONFIG_HOME`, reuse its installed config without modifying it; otherwise, install the copied config locally. Read the project's `strict` or `non-strict` label from the frozen detailed report, or its `strict_settings` value from the matching diagnostics shard. Preserve that mode when running either binary:

```bash
if [[ -n "${TY_ECOSYSTEM_CONFIG_HOME:-}" ]]; then
export XDG_CONFIG_HOME="$TY_ECOSYSTEM_CONFIG_HOME"
test -f "$XDG_CONFIG_HOME/ty/ty.toml" || exit 1
else
export XDG_CONFIG_HOME="$PWD/target/ty-ecosystem-config"
mkdir -p "$XDG_CONFIG_HOME/ty"
cp "$PWD/target/ty-ecosystem-bins/ty-ecosystem.toml" "$XDG_CONFIG_HOME/ty/ty.toml"
fi
unset TY_CONFIG_FILE
export RUST_BACKTRACE=1

project_dir="<absolute-temporary-directory>"
ty_base="${TY_ECOSYSTEM_BASE_BINARY:-$PWD/target/ty-ecosystem-bins/ty-base}"
ty_pr="${TY_ECOSYSTEM_PR_BINARY:-$PWD/target/ty-ecosystem-bins/ty-pr}"
test -x "$ty_base" && test -x "$ty_pr" || exit 1
ecosystem_analysis_mode="<strict-or-non-strict-from-detailed-report>"

if [[ "$ecosystem_analysis_mode" != strict && "$ecosystem_analysis_mode" != non-strict ]]; then
echo "Unknown ecosystem analysis mode: $ecosystem_analysis_mode" >&2
exit 1
fi

run_ecosystem_ty() {
if [[ "$ecosystem_analysis_mode" == strict ]]; then
<project-specific command printed by setup_primer_project.py> \
--config analysis.strict-equality-semantics=true \
--config analysis.strict-generic-narrowing=true
else
<project-specific command printed by setup_primer_project.py>
fi
}

cd "$project_dir"
ty_binary="$ty_base"
base_exit_status=0
run_ecosystem_ty || base_exit_status=$?
ty_binary="$ty_pr"
pr_exit_status=0
run_ecosystem_ty || pr_exit_status=$?
```

Confirm the detailed report's difference exactly, including duplicate diagnostics and both exit statuses. When reproducing an intermittent severe failure, repeat each side using its reported run count. Ordinary diagnostics can produce exit status 1; do not mistake that for a failed reproduction. For panics, identify the stable fingerprint by comparing the Rust panic site or decisive causal frame and panic payload; ignore checked Python-file paths and incidental backtrace differences.

## Minimize

The target is a fully minimized, provenance-preserving reproducer: preferably one self-contained file, with no avoidable third-party or standard-library imports and no unnecessary definitions, annotations, branches, or advanced language features. Retain a third-party import only if identified ty behavior depends on that library's identity or third-party search-path classification.

Before minimizing any ecosystem change, read and follow [references/advanced-minimization.md](references/advanced-minimization.md). Exhaust its complete reduction loop, including third-party dependency and standard-library inlining, and retain an import only after verifying that neither removing it nor inlining its definitions preserves the underlying behavior.

Matching diagnostics or displayed types do not establish a shared cause. When the output is ambiguous, identify and compare the original and minimized triggers using exact-revision debug output, a targeted `reveal_type`, or the producing Rust call site from the matching analyzed revision.

A minimization is complete only when a verified reduction chain connects the reproducer to the original ecosystem entry and an exhaustive pass finds no further reduction. If a genuine external blocker prevents completion, report the blocker and identify the minimization as incomplete; an original source excerpt is not a successfully minimized result.

## Return

Provide the original permalinked report entry, exact base and PR behavior, minimal code, full diagnostic messages and error codes or the panic fingerprint, and the manifest/commands needed to reproduce it. When called from the summary workflow, return import-audit and reduction notes separately from report-ready Markdown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Advanced Minimization

Use this reference after the reported difference reproduces against the copied base and PR binaries.

## Target

Prefer a single-file reproducer with no avoidable third-party imports, few definitions, and the least complex typing or language features that still demonstrate the difference. Keep special modules such as `typing`, `abc`, `enum`, `types`, and `typing_extensions` only when neither removing them nor inlining their definitions preserves the behavior; retain a third-party import only after identifying ty behavior that depends on that library's identity or third-party search-path classification.

## Reduction Loop

Work systematically from the reproduced project. NEVER skip ahead to an explanation, hand-written reproducer, or a guessed subset of relevant code. Follow the stages below in order and exhaust each stage before advancing. Try one controlled reduction at a time, run both copied ty binaries after every change, and keep the reduction only if the original difference and underlying trigger remain. After every successful reduction, restart at step 1 because it may make earlier reductions possible.

1. Delete unrelated files.
2. Remove imports, definitions, decorators, annotations, statements, and branches.
3. Inline first-party definitions into the reproducer.
4. For each required third-party dependency, copy the entire installed dependency into the source tree as first-party code, including every package directory and module it provides. Do this before attempting to minimize any part of the dependency. Adjust imports, verify that the difference still reproduces with the complete copy, and only then begin deleting files or definitions from it. If the complete copy changes the behavior because ty special-cases that library or distinguishes first-party from third-party search paths, identify the relevant ty implementation at the matching analyzed Ruff revision before retaining the original import. Never start by copying only apparently relevant files or definitions. If cloning a dependency is unavoidable, use the exact installed revision or version and copy the complete dependency into the source tree before reducing it.
5. Inline the relevant standard-library definitions from the analyzed revision of `crates/ty_vendored`, using `git -C <ruff-checkout> show <exact-revision>:crates/ty_vendored/<path>`; compare the merge-base and PR definitions when they differ.
6. Replace complex constructs with simpler equivalents, such as removing a walrus expression or replacing a protocol when the difference survives.

Repeat the full loop until an exhaustive pass through every stage finds no further reduction that preserves the difference. Do not stop merely because the likely cause is understood or the reproducer is already small.

## Final Audit

Attempt to remove every remaining import and inline its definitions, including remaining third-party and standard-library definitions. Retain an import only after verifying that neither removal nor inlining preserves the underlying behavior. For a third-party import, additionally verify that its module identity or third-party search-path classification is essential and identify the relevant ty implementation. Convenience, familiar APIs, matching class names, or preserving the diagnostic's module spelling do not justify keeping an import. Record why any surviving import is essential and, for a third-party import, where ty implements the relevant behavior. Keep these notes as working evidence; the caller decides whether they belong in its final artifact.

Verify that the recorded reduction chain connects the final reproducer to the original ecosystem entry and, when diagnostic output is ambiguous, preserves the original causal fingerprint. If a required check fails, continue investigating; if a genuine external blocker prevents completion, report the blocker and mark the minimization as incomplete instead of presenting an unrelated example or original excerpt as a minimized result.

Delete transient project and dependency copies after the investigation.
Loading
Loading