Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
694 commits
Select commit Hold shift + click to select a range
461f9b5
Update Rust crate which to v8.0.4 (#26300)
renovate[bot] Jun 24, 2026
019bbcb
Update Rust crate syn to v2.0.118 (#26299)
renovate[bot] Jun 24, 2026
c4acd56
Update Rust crate smallvec to v1.15.2 (#26298)
renovate[bot] Jun 24, 2026
f2e607f
Update Rust crate memchr to v2.8.2 (#26297)
renovate[bot] Jun 24, 2026
ad78252
Update Rust crate get-size2 to v0.10.1 (#26296)
renovate[bot] Jun 24, 2026
3e992b6
Update prek dependencies (#26295)
renovate[bot] Jun 24, 2026
f22a79d
Update dependency astral-sh/uv to v0.11.24 (#26293)
renovate[bot] Jun 24, 2026
07b4ede
Update CodSpeedHQ/action action to v4.17.5 (#26292)
renovate[bot] Jun 24, 2026
7527c25
Update dependency ruff to v0.15.19 (#26294)
renovate[bot] Jun 24, 2026
15eaa37
Update Rust crate insta to v1.48.0 (#26305)
renovate[bot] Jun 24, 2026
ce46714
Update prek dependencies (#26311)
renovate[bot] Jun 24, 2026
aa8c227
[ty] Avoid stack overflows in reachability analysis (#26272)
charliermarsh Jun 24, 2026
88469c6
Update NPM Development dependencies (#26312)
renovate[bot] Jun 24, 2026
773ce76
Update Rust crate itertools to 0.15.0 (#26307)
renovate[bot] Jun 24, 2026
c24ded8
Update `ruff_python_parser` README for crates.io (#26315)
dhruvmanila Jun 24, 2026
0aab61e
Add versioning sections to custom crate READMEs (#26317)
dhruvmanila Jun 24, 2026
9d28986
[ty] Update Salsa to 0.27.1 (#26319)
MichaReiser Jun 24, 2026
2a5cdf5
[ty] Generic gradual set-theoretic types (#26054)
sharkdp Jun 24, 2026
52637fc
[ty] Store loop headers in use-def maps (#26266)
MichaReiser Jun 24, 2026
42b7cdb
[ty] Infer mismatched literal comparisons (#26313)
charliermarsh Jun 24, 2026
c5c7fb2
[ty] Derive `Update` instead of manual implementation (#26321)
MichaReiser Jun 24, 2026
a40ba2b
[ty] Fix divergent recursive tuple cycle handling in ty (#26316)
carljm Jun 24, 2026
66991ac
[ty] Publish semantic crates to crates.io (#26323)
charliermarsh Jun 24, 2026
d4c129a
[ty] Stabilize parsed module memory reporting (#26322)
MichaReiser Jun 24, 2026
2f3791b
[ty] Fix typealias token classification inconsistency (#26255)
sqqueak Jun 24, 2026
c0ee43d
[ty] Model non-exhaustive enum member sets (#26277)
charliermarsh Jun 24, 2026
32a9b4a
[ty] Document the `@Todo` type (#26324)
charliermarsh Jun 24, 2026
acc7a1b
Match `noqa` shebang handling in `ruff:ignore` comments (#26286)
ntBre Jun 24, 2026
4652ae3
[ty] Record configured crates.io packages (#26328)
charliermarsh Jun 24, 2026
f0cd5bd
[ty] Avoid cloning Salsa query results (#26327)
MichaReiser Jun 24, 2026
bcd6231
[ty] Use borrowed values for Salsa interned lookups (#26330)
MichaReiser Jun 24, 2026
f67cb8a
[ty] Avoid string allocations in implicit attribute queries (#26326)
MichaReiser Jun 24, 2026
67cbf61
[ty] Support basic usages of `__class__` (#26329)
charliermarsh Jun 24, 2026
aa96a05
[`perflint`] Clarify that `PERF402` applies to any iterable (#26242)
trilamsr Jun 24, 2026
62859df
Emit a warning instead of an error for unknown rule selectors (#26113)
ntBre Jun 24, 2026
e1198ba
Record configured `ruff_ranged_value` package (#26333)
charliermarsh Jun 24, 2026
963ef2a
[ty] Use assignability for divergent constraints (#26334)
mtshiba Jun 24, 2026
f5e0f88
[ty] Handle TypeVar bounds over type[...] in attribute lookup (#26146)
carljm Jun 24, 2026
d1dda84
[ty] Reject undeclared protocol instance attributes (#26336)
charliermarsh Jun 24, 2026
ffa2659
[ty] Avoid relation queries during cycle recovery (#26335)
charliermarsh Jun 24, 2026
8d4b8e6
[ty] Revert recursive `TypeOf` cycle recovery (#26339)
charliermarsh Jun 24, 2026
a47a6d6
[ty] Allow replacing ordinary methods with compatible functions (#26158)
charliermarsh Jun 24, 2026
c734167
[ty] Refactor Markdown rendering to model state transitions more expl…
lerebear Jun 24, 2026
e873036
[ty] Don't distribute unions as aggressively in constraint set soluti…
dcreager Jun 24, 2026
25dadb1
[ty] Sync vendored typeshed stubs, support `builtins.sentinel` (#26341)
github-actions[bot] Jun 24, 2026
da54334
[ty] Distinguish `typing.TypedDict` from `typing_extensions.TypedDict…
charliermarsh Jun 25, 2026
e61a540
[ty] Co-locate retained definition usage state (#26019)
charliermarsh Jun 25, 2026
bb9e94e
[ty] Treat non-empty `range` calls as non-empty for reachability (#25…
charliermarsh Jun 25, 2026
9dd6b58
[ty] Don't treat non-empty ranges as single-valued (#26351)
charliermarsh Jun 25, 2026
8e5dc19
[ty] Update Salsa to 0.27.2 (#26357)
MichaReiser Jun 25, 2026
1839ca9
[ty] Use never-change durability for immutable file inputs (#26353)
MichaReiser Jun 25, 2026
825509f
[ty] Remove unnecessary dependencies and features (#26358)
MichaReiser Jun 25, 2026
cf90a36
[ty] Omit retained unbound definition sentinel (#26348)
charliermarsh Jun 25, 2026
7e921ca
[ty] Make class-pattern fallthrough member-aware (#26283)
charliermarsh Jun 25, 2026
0df8eb2
[ty] Resolve positional class-pattern exhaustiveness (#26284)
charliermarsh Jun 25, 2026
6a0d2ec
[ty] Widen inferred class-valued instance attributes (#26338)
charliermarsh Jun 25, 2026
e700ea3
[ty] Prove TypedDict structural patterns exhaustive (#26285)
charliermarsh Jun 25, 2026
dbe6e98
[ty] Infer definite equality comparison results (#26337)
charliermarsh Jun 25, 2026
0d726b2
[ty] Reuse equality semantics for membership compatibility (#25955)
charliermarsh Jun 25, 2026
f703f21
Allow human-readable names in rule selectors (#25887)
ntBre Jun 25, 2026
572b31e
[`ruff`] Remove `pytest-fixture-autouse` (`RUF076`) (#26240)
ntBre Jun 25, 2026
ef81835
[ty] Implement rust-analyzer's "Click for full compiler diagnostic" f…
AlexWaygood Jun 25, 2026
485ebab
Remove `RUF076` name from schema (#26371)
ntBre Jun 25, 2026
af32943
Improve the summarise-ecosystem-results skill (#26378)
AlexWaygood Jun 25, 2026
f82a36b
Bump 0.15.20 (#26376)
ntBre Jun 25, 2026
a56a774
[ty] Avoid duplicate configuration error output (#26375)
MichaReiser Jun 25, 2026
9f979a7
Avoid notifying crate teams for Ruff release PRs (#26380)
AlexWaygood Jun 25, 2026
6a2e694
[ty] Track literal iterable emptiness for reachability (#25222)
charliermarsh Jun 25, 2026
d16559c
[ty] Remove `Preview` rule status. (#26377)
lerebear Jun 25, 2026
0b8e49b
[ruff] Migrate cache from `bincode` to `rkyv`
epage Jun 25, 2026
89ec3a7
[`pydocstyle`] Skip `overload-with-docstring` in stub files (`D418`) …
Sanjays2402 Jun 25, 2026
43b5e8b
[ty] Skip shadowed submodule bindings during import analysis (#26385)
carljm Jun 25, 2026
3145856
[`flake8-executable`] Mark `EXE004` fix as unsafe (#26033)
baltasarblanco Jun 25, 2026
855ab30
[ty] Optimize enum comparisons in equality evaluation (#26340)
charliermarsh Jun 25, 2026
89091c2
[ty] Correct enum alias detection and scalar constructors (#26345)
charliermarsh Jun 25, 2026
beb85f3
[ty] improve variable-length tuple slicing (#26151)
mtshiba Jun 25, 2026
e9719d4
[ty] Normalize workspace crate versions (#26387)
charliermarsh Jun 26, 2026
fbe72df
Move `CommentRanges::from_tokens` into formatter benchmark hot loop (…
MichaReiser Jun 26, 2026
e5bc265
[ty] Fix RankBitBox heap size accounting (#26393)
MichaReiser Jun 26, 2026
c7e3dce
[ty] Remove redundant semantic index shrinks (#26392)
MichaReiser Jun 26, 2026
71541d4
[ty] Infer empty collection constructors from later uses (#26389)
charliermarsh Jun 26, 2026
4398bd3
[ty] Infer class and mapping pattern bindings (#25941)
charliermarsh Jun 26, 2026
7ec72af
[ty] Use never-change durability for one-shot checks (#26359)
MichaReiser Jun 26, 2026
eb426d8
Bump docstring-adder pin (#26403)
AlexWaygood Jun 26, 2026
2a55cfb
[ty] Sync vendored typeshed stubs (#26406)
github-actions[bot] Jun 26, 2026
147bf85
[ty] Render full diagnostics in color (#26384)
AlexWaygood Jun 26, 2026
d4a9271
[ty] Restore ecosystem merge-base calculation (#26404)
AlexWaygood Jun 26, 2026
b1fa8c2
Fix typos (#26405)
s-rigaud Jun 26, 2026
239429e
[ty] Improve vendored filesystem concurrency (#26408)
MichaReiser Jun 26, 2026
645dca3
Use ICF for macOS release builds (#25780)
zaniebot Jun 26, 2026
2cd74f0
Cache parenthesized expression boundaries in the formatter (#26344)
charliermarsh Jun 26, 2026
a582555
[ty] Fix structural pattern binding inference (#26411)
charliermarsh Jun 26, 2026
1d2041c
[ty] Validate positional class patterns against `__match_args__` (#26…
felixscherz Jun 26, 2026
08e9c84
[ty] Refresh benchmark snapshots (#26422)
charliermarsh Jun 26, 2026
df383e1
[ty] Recognize inherited enum member constructors (#26410)
charliermarsh Jun 27, 2026
03f787e
[ty] Model int and str enum value normalization (#26349)
charliermarsh Jun 27, 2026
fa4a7bc
ruff: Add `--extend-exclude` to `ruff format` (#26372)
tingerrr Jun 27, 2026
7af2c7c
Inline `fits_element` in formatter (#26429)
charliermarsh Jun 27, 2026
6a6dc02
[ty] Improve mechanism for distinguishing between `typing.TypedDict` …
AlexWaygood Jun 27, 2026
6221408
[ty] Reduce bound typevar identity overhead (#26396)
charliermarsh Jun 27, 2026
41febb9
fix typos (#26436)
s-rigaud Jun 28, 2026
0dae927
[ty] Reduce Parameters::new monomorphizations (#26444)
MichaReiser Jun 28, 2026
15a1188
[ty] Reduce CycleDetector monomorphization (#26445)
MichaReiser Jun 28, 2026
36029f1
Fix typo introduced by #26436 ("fix typos") (#26446)
AlexWaygood Jun 28, 2026
d78b3d5
Fix typos (#26443)
s-rigaud Jun 28, 2026
cce2215
[ty] Avoid cloning Salsa field values (#26452)
MichaReiser Jun 29, 2026
6316012
[ty] Respect return-context inference when filtering overloads (#26454)
sharkdp Jun 29, 2026
99bb656
[ty] Bump uv in ecosystem analyzer workflow (#26459)
sharkdp Jun 29, 2026
bd52258
[ty] Avoid MRO cycle when collecting NamedTuple fields (#26464)
charliermarsh Jun 30, 2026
ab4ba0b
chore: pin pre-commit hook refs (#26461)
shaanmajid Jun 30, 2026
889ac31
[ty] Exit with status 130 when interrupted (#26465)
charliermarsh Jun 30, 2026
e4945bd
[ty] Separate definition construction from recording (#26477)
charliermarsh Jun 30, 2026
3c98c04
[ty] Avoid exponential OR-pattern reachability (#26481)
charliermarsh Jul 1, 2026
cab8e63
Update cargo-bins/cargo-binstall action to v1.20.1 (#26482)
renovate[bot] Jul 1, 2026
4451473
Update CodSpeedHQ/action action to v4.17.6 (#26483)
renovate[bot] Jul 1, 2026
d970d0c
Update dependency astral-sh/uv to v0.11.26 (#26484)
renovate[bot] Jul 1, 2026
c874583
Update dependency ruff to v0.15.20 (#26485)
renovate[bot] Jul 1, 2026
d8299b9
Update dependency uuid to v14.0.1 (#26486)
renovate[bot] Jul 1, 2026
9e76adb
[ty] Infer generic class pattern capture types (#26479)
charliermarsh Jul 1, 2026
48a25be
Update maturin to v1.14.1 (#26487)
renovate[bot] Jul 1, 2026
bd27062
Update Rust crate jiff to v0.2.29 (#26491)
renovate[bot] Jul 1, 2026
ec3ff49
Update Rust crate camino to v1.2.3 (#26490)
renovate[bot] Jul 1, 2026
27b4a24
Update prek dependencies (#26488)
renovate[bot] Jul 1, 2026
9945e47
Update Rust crate arrayvec to v0.7.7 (#26489)
renovate[bot] Jul 1, 2026
edbf206
Update Rust crate log to v0.4.33 (#26492)
renovate[bot] Jul 1, 2026
7bc67ab
Update Rust crate quote to v1.0.46 (#26493)
renovate[bot] Jul 1, 2026
bdbec19
Update NPM Development dependencies (#26494)
renovate[bot] Jul 1, 2026
ffeba83
Update taiki-e/install-action action to v2.82.2 (#26496)
renovate[bot] Jul 1, 2026
46d17f6
Update Rust crate bitvec to v1.1.1 (#26495)
renovate[bot] Jul 1, 2026
e9e6f77
Update actions/cache action to v6 (#26497)
renovate[bot] Jul 1, 2026
90ee64c
Update actions/checkout action to v7 (#26498)
renovate[bot] Jul 1, 2026
35aaf8d
[ty] Sync vendored typeshed stubs (#26501)
github-actions[bot] Jul 1, 2026
e978c92
Update Rust crate divan to v5 (#26500)
renovate[bot] Jul 1, 2026
7029f8c
Update dependency @cloudflare/workers-types to v4.20260624.1 (#26502)
renovate[bot] Jul 1, 2026
c913987
Update Rust crate codspeed-criterion-compat to v5 (#26499)
renovate[bot] Jul 1, 2026
c360a05
chore: run prek from a locked uv dev group (#26463)
shaanmajid Jul 1, 2026
1a7e4c8
[ty] Prefer reflected operators by runtime class (#26434)
charliermarsh Jul 1, 2026
b31f66e
[ty] Preserve uncertain reflected operator dispatch (#26474)
charliermarsh Jul 1, 2026
dc42d1d
[ty] Narrow exact tuples through sequence patterns (#26424)
charliermarsh Jul 1, 2026
d380534
Avoid per-token source index visitor calls (#26506)
charliermarsh Jul 1, 2026
e6856de
Skip empty trivia scans in the source indexer (#26507)
charliermarsh Jul 1, 2026
3f0ea98
fix typos (#26462)
s-rigaud Jul 1, 2026
c5ee52a
chore: lock rooster release dependency (#26509)
shaanmajid Jul 2, 2026
d1cf0f8
Inline formatter printing hot paths (#26504)
charliermarsh Jul 2, 2026
1821b83
[ty] Add test suite for pydantic support (#26515)
sharkdp Jul 2, 2026
1cb2012
[ty] Add support for extra arguments in Pydantic model constructors (…
sharkdp Jul 2, 2026
a19ece2
[ty] Preserve exhaustive gradual match patterns (#26523)
charliermarsh Jul 3, 2026
427138f
Add "How does Ruff's import sorting compare to isort?" link to README…
Avasam Jul 3, 2026
0a17600
Update Rust toolchain to 1.96.1 (#26531)
charliermarsh Jul 3, 2026
3edca13
Enable `clippy::large_stack_arrays` rule (#26535)
ShaharNaveh Jul 4, 2026
ef2eef4
Fix Mozilla Firefox repository link in README (#26537)
sylvestre Jul 4, 2026
e6f1513
[ty] Batch parallel jobs (#26534)
MichaReiser Jul 4, 2026
f1da30d
[ty] Update `__slots__` string when renaming an attribute (#26438)
SuryanshSS1011 Jul 6, 2026
14a2f67
[ruff] Fix `ISC003` autofix incorrectly stripping `+` from comments (…
servusdei2018 Jul 6, 2026
40a62bc
Excessive whitespace trimming with comment formatting (#26455)
EkriirkE Jul 6, 2026
b5c0650
[ty] Silence ecosystem-analyzer workflow warnings (#26558)
AlexWaygood Jul 6, 2026
57d800b
Replace the React SWC plugin in the playgrounds (#26560)
AlexWaygood Jul 6, 2026
1e9287d
Refine non-empty f-string detection (#26526)
velikodniy Jul 6, 2026
d88e390
[ty] Fix subtyping/assignability for `@property` protocol members (#2…
charliermarsh Jul 6, 2026
83c3473
[`pyupgrade`] Lint and fix use of deprecated `abc` decorators
epage Jun 26, 2026
e768389
[ty] Build module names directly in CompactString (#26546)
charliermarsh Jul 6, 2026
db73655
[ty] Reuse owned buffers for string literals (#26547)
charliermarsh Jul 6, 2026
dd6900b
[ty] Elide default use-def state (#26398)
charliermarsh Jul 6, 2026
d2bba25
[ty] Detect async generator expressions containing await (#26568)
charliermarsh Jul 6, 2026
29ddaf0
[ty] Preserve generic variadic callback semantics (#26521)
charliermarsh Jul 6, 2026
b813599
[ty] Render reStructuredText hyperlinks as Markdown in hover docstrin…
lerebear Jul 6, 2026
001298b
[ty] Recognize that dedent ends doctest block when parsing docstrings…
lerebear Jul 6, 2026
baf0be2
[ty] Unify helpers for creating string-literal types (#26575)
AlexWaygood Jul 6, 2026
78dc89f
[`ruff`] Fix non-triggering example for `if-key-in-dict-del` (`RUF051…
nikolauspschuetz Jul 6, 2026
ce7a42e
[ty] Refine parameter kind handling across ty semantic analysis (#26582)
carljm Jul 6, 2026
6eef7ce
[ty] Update conformance suite pin (#26583)
charliermarsh Jul 7, 2026
d6f92e1
[ty] Go back to reduced BDDs for constraint sets (#26142)
dcreager Jul 7, 2026
3f94ebb
[ty] Fix selection range behavior for strings (#26532)
sqqueak Jul 7, 2026
84c181f
[ty] Detect Pydantic model configurations (#26573)
sharkdp Jul 7, 2026
ba514aa
[ty] Narrow `isinstance` against intersections containing invalid mem…
jvdillon Jul 7, 2026
311158e
[ruff] Detect syntax errors in individual notebook cells (#26419)
omar-y-abdi Jul 7, 2026
7b3b6a0
[ty] Split `ty_extensions` into public and internal parts (#26586)
sharkdp Jul 7, 2026
71d151f
[ty] Narrow match subjects through structural patterns (#25942)
charliermarsh Jul 7, 2026
228959c
[ty] Use cached class literal lookup for `is_subclass_of` (#26585)
MichaReiser Jul 7, 2026
a262db5
[ty] Refactor `variance_of` to take in typevar identity (#26588)
dcreager Jul 7, 2026
2dff4da
Lazily create builtin bindings (#26510)
charliermarsh Jul 7, 2026
4b24ed1
[`flake8-bandit`] Fix misleading docstring for `mako-templates` (`S70…
nikolauspschuetz Jul 7, 2026
9de03d3
[ty] Skip some expensive work when not collecting protocol assignabil…
dcreager Jul 7, 2026
63b82b0
Add `--add-ignore` for adding `ruff:ignore` comments (#26346)
ntBre Jul 7, 2026
f619cb9
[ty] Distinguish lax and strict mode for Pydantic models (#26587)
sharkdp Jul 7, 2026
d7c98b5
[ty] Preserve invariant materialization on generic specializations (#…
carljm Jul 7, 2026
929df5b
[ty] Simplify how to call `PathBounds::compute` correctly (#26590)
dcreager Jul 7, 2026
a4941f3
[ty] Pydantic lax mode: aliases names (#26596)
sharkdp Jul 7, 2026
3dd2cda
[ty] Preserve literal enum member names (#26592)
charliermarsh Jul 7, 2026
bd05d2d
[ty] Avoid exponential invariant constraint paths (#26538)
charliermarsh Jul 7, 2026
9f2d47d
[ty] Preserve generic `functools.partial` signatures (#24583)
charliermarsh Jul 7, 2026
8f005b9
Update actions/attest-build-provenance action to v4.1.1 (#26602)
renovate[bot] Jul 8, 2026
d9486f2
Update dependency astral-sh/uv to v0.11.28 (#26603)
renovate[bot] Jul 8, 2026
cdc912c
Update prek dependencies (#26604)
renovate[bot] Jul 8, 2026
99e4350
Update Rust crate anyhow to v1.0.103 (#26605)
renovate[bot] Jul 8, 2026
7791de1
Update Rust crate arc-swap to v1.9.2 (#26606)
renovate[bot] Jul 8, 2026
10c8747
Update Rust crate bstr to v1.12.3 (#26607)
renovate[bot] Jul 8, 2026
1a8eb83
Update Rust crate jiff to v0.2.31 (#26610)
renovate[bot] Jul 8, 2026
bb8c116
Update dependency mdformat-mkdocs to v5.2.0 (#26618)
renovate[bot] Jul 8, 2026
da89f73
Update Rust crate indicatif to v0.18.5 (#26609)
renovate[bot] Jul 8, 2026
ea5f612
Update taiki-e/install-action action to v2.82.7 (#26612)
renovate[bot] Jul 8, 2026
36d59db
Update Rust crate camino to v1.2.4 (#26608)
renovate[bot] Jul 8, 2026
7e1924b
Update Rust crate uuid to v1.23.4 (#26611)
renovate[bot] Jul 8, 2026
89a89a8
Update actions/cache action to v6.1.0 (#26613)
renovate[bot] Jul 8, 2026
2f09ac8
Update Rust crate lsp-server to 0.8.0 (#26620)
renovate[bot] Jul 8, 2026
1ed4f04
Update actions/setup-go action to v6.5.0 (#26614)
renovate[bot] Jul 8, 2026
953e2a9
Update CodSpeedHQ/action action to v4.18.1 (#26617)
renovate[bot] Jul 8, 2026
adf0070
Update actions/setup-python action to v6.3.0 (#26615)
renovate[bot] Jul 8, 2026
9ff0947
Update astral-sh/setup-uv action to v8.3.1 (#26616)
renovate[bot] Jul 8, 2026
ff0abdb
Update NPM Development dependencies (#26619)
renovate[bot] Jul 8, 2026
d392137
Update pre-commit hook astral-sh/uv-pre-commit to v0.11.28 (#26621)
renovate[bot] Jul 8, 2026
56554d6
[ty] optimize `TypeCollector` (#26593)
mtshiba Jul 8, 2026
e444b0c
[ty] Respect user stub overlays during module resolution (#26123)
MichaReiser Jul 8, 2026
b965022
[ty] Pydantic: Add support for `validate_by_{name,alias}` (#26598)
sharkdp Jul 8, 2026
817f86f
[ty] Narrow type for `ModuleType.__doc__` (#26505)
kaapstorm Jul 8, 2026
32a14c8
[ty] Extend Pydantic test suite (#26626)
sharkdp Jul 8, 2026
eee798a
[ty] Pydantic: Add support for `validation_alias` (#26629)
sharkdp Jul 8, 2026
acb62cd
[ty] Pydantic: Make `BaseSettings` fields optional by default (#26628)
sharkdp Jul 8, 2026
54f8314
[ty] Pydantic: Ignore private attributes (#26630)
sharkdp Jul 8, 2026
8593e82
[ty] Pydantic: Add fields from mixin classes (#26631)
sharkdp Jul 8, 2026
6c3dab4
Drop C409 tuple comprehension preview behaviour (#25707)
Avasam Jul 8, 2026
3abf0ff
[ty] Pydantic: Support dict model configurations (#26632)
sharkdp Jul 8, 2026
26a3083
[ty] Pydantic: Support validation of `RootModel` fields (#26634)
sharkdp Jul 8, 2026
277115d
[ty] Pydantic: Understand ellipsis as providing no default value (#26…
sharkdp Jul 8, 2026
c48e681
[ty] Fix reflected binary dispatch for runtime classes (#26623)
carljm Jul 8, 2026
0354eb5
[ty] Add myself back to the PR review pool
ibraheemdev Jul 8, 2026
bad5f46
[ty] Improve protocol attribute diagnostic context (#26644)
carljm Jul 8, 2026
73fc1c6
[ty] Add assignability context to upper-bound diagnostics (#26645)
carljm Jul 8, 2026
a309b76
[ty] Pydantic: Recognize frozen models via config (#26648)
sharkdp Jul 8, 2026
66b978e
[ty] Add blanket ignore comment rule (#26426)
MichaReiser Jul 8, 2026
00361e4
[ty] Parse Google docstrings for parameter docs (#25919)
lerebear Jul 8, 2026
29f9fba
[`flake8-pyi`] Mark `PYI061` fixes unsafe in Python files (#26533)
jesco-absolut Jul 8, 2026
b7e7c71
[ty] Quantify constraint set BDDs in a single pass (#26622)
dcreager Jul 8, 2026
13763fb
[ty] Deduplicate universal-newline docstring assertions. (#26651)
lerebear Jul 8, 2026
fb4d0f0
[ty] Share canonical docstring section kinds. (#26652)
lerebear Jul 8, 2026
d8ef3b0
[ty] Parse all supported Google docstring sections. (#26653)
lerebear Jul 9, 2026
a004a36
[ty] Handle callable classes in solver (#26090)
sharkdp Jul 9, 2026
1af03da
[ty] Pydantic: Fix float conversion in unions (#26655)
sharkdp Jul 9, 2026
4594ca7
[ty] Add variant discriminators for `CodeGeneratorKind` (#26659)
sharkdp Jul 9, 2026
ad26408
[ty] Gate membership narrowing on `__contains__` semantics (#25964)
charliermarsh Jul 9, 2026
c36f662
Improve performance of rendering edits in preview mode (#26565)
ZedThree Jul 9, 2026
7ad39ad
[ty] Avoid allocating decorated parameter names (#26666)
charliermarsh Jul 9, 2026
013e5d0
[ty] Use a dedicated project name type (#26665)
charliermarsh Jul 9, 2026
4059807
[ty] Infer metaclass-declared attributes on class instances (#26512)
charliermarsh Jul 9, 2026
40eb64b
merge upstream/main into basedpython (688 commits)
KotlinIsland Jul 9, 2026
d5b5f09
post-merge fixes: enum-variant flags, self expansion, mdtest expectat…
KotlinIsland Jul 9, 2026
bfd0caf
fix post-merge ci: by.exe usage filter + restore roundtrip good.txt
KotlinIsland Jul 11, 2026
4a11c25
regenerate basedpython dist-crate lockfile after upstream merge
KotlinIsland Jul 11, 2026
d7e766a
ci: drop cargo-publish-dry-run, bump fork test-job timeouts
KotlinIsland Jul 12, 2026
2e295f8
ci: cap ecosystem format parallelism to fix transient walk error
KotlinIsland Jul 12, 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
  •  
  •  
  •  
114 changes: 43 additions & 71 deletions .agents/skills/minimizing-ty-ecosystem-changes/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,117 +5,89 @@ description: Use when a user says "minimize this ty ecosystem change", "reproduc

# Minimizing Ty Ecosystem Changes

Use this skill when asked to reproduce a ty ecosystem change, investigate a behavior difference in a primer project, or minimize a reproducer from a ty ecosystem project.
## Invariants

## Building ty
1. Use the exact Ruff revisions, PR config, dependency cutoff, mypy-primer revision, and project Python version 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.

If a primary agent supplies paths to a copied merge-base ty binary, copied PR ty binary, and copied PR ecosystem config that it freshly prepared at the start of the current task, reuse those artifacts as read-only inputs. Do not rebuild ty, switch refs in the Ruff checkout, or overwrite the supplied artifacts. Use a separate transient ecosystem-project directory from any concurrent subagents. If a supplied artifact is missing, stop and report that to the primary agent instead of mutating the Ruff checkout.
Start each investigation from fresh artifacts. Do not trust retained memories, previous minimizations, current upstream project state, or the helper script's default lockfile.

Otherwise, prepare the artifacts as follows.
## Collect Exact-Run Metadata

Build ty on both the PR branch and the PR's merge base by running `CARGO_PROFILE_PROFILING_DEBUG=line-tables-only cargo build --package ty --profile profiling` from the repository root on both refs, matching ecosystem CI. Copy each built executable to a stable path before checking out the other ref; otherwise, the second build overwrites `target/profiling/ty`.
Run the bundled helper with the Actions run ID or URL and every affected mypy-primer project name:

From the PR branch, also copy `.github/ty-ecosystem.toml` to a stable path before checking out another ref. Use that copied file for every comparison, matching ecosystem CI's behavior of reusing the PR config.
```bash
scripts/collect_ty_ecosystem_run_metadata.py \
<actions-run> <project-name>... \
--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.

## Prepare ty

Before checking out another ref, inspect the working tree. If `git status --short` shows any staged, unstaged, or untracked changes, abort immediately and ask the user how to proceed.
If a primary agent supplied freshly copied base and PR binaries plus the PR ecosystem config, verify the paths exist and reuse them. Do not rebuild, switch Ruff refs, or overwrite the shared artifacts.

For example:
Otherwise, require a clean working tree, copy `.github/ty-ecosystem.toml` from the PR revision, and build ty on the manifest's merge base and PR revision:

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

if [[ -n "$(git status --short)" ]]; then
git status --short
echo "working tree is not clean; stop and ask the user how to proceed" >&2
exit 1
fi

test -z "$(git status --short)" || { git status --short; exit 1; }
git fetch origin <pr-revision>
mkdir -p target/ty-ecosystem-bins
cp .github/ty-ecosystem.toml target/ty-ecosystem-bins/ty-ecosystem.toml
export TY_CONFIG_FILE="$PWD/target/ty-ecosystem-bins/ty-ecosystem.toml"
export CARGO_PROFILE_PROFILING_DEBUG=line-tables-only

git checkout <merge-base>
cargo build --package ty --profile profiling
cp target/profiling/ty target/ty-ecosystem-bins/ty-base

git checkout <pr-branch-or-sha>
git checkout <pr-revision>
cp .github/ty-ecosystem.toml target/ty-ecosystem-bins/ty-ecosystem.toml
cargo build --package ty --profile profiling
cp target/profiling/ty target/ty-ecosystem-bins/ty-pr
```

On Windows, adapt the shell commands and executable paths as necessary.

You should only need to build ty twice at the start of the investigation. Reuse the copied executables when determining if the behavior difference still reproduces.
## Reproduce

## Reproduce First

From the repository root, export the ecosystem config that was copied from the PR branch, then use the following script to clone the ecosystem project, check out the relevant revision, and install its dependencies into `.venv`. Keep `TY_CONFIG_FILE` set when running ty comparisons; this applies the same rule configuration as ecosystem CI without overwriting the user's ty config. Shell exports may not persist between agent tool calls, so re-export `TY_CONFIG_FILE` in every new shell before invoking either ty binary. The examples below use the default artifact paths; substitute supplied artifact paths when a primary agent provides them.

When preparing artifacts yourself, if `target/ty-ecosystem-bins/ty-ecosystem.toml` does not exist yet, check out the PR branch and copy `.github/ty-ecosystem.toml` from there before continuing. Do not copy `.github/ty-ecosystem.toml` while on the merge base, because ecosystem CI compares both binaries with the PR branch's config.
Create a unique temporary directory for each project. Read its Python version and the pinned mypy-primer revision from the manifest, then bypass the adjacent script lockfile:

```bash
set -euo pipefail

export TY_CONFIG_FILE="$PWD/target/ty-ecosystem-bins/ty-ecosystem.toml"
test -f "$TY_CONFIG_FILE" || { echo "missing $TY_CONFIG_FILE" >&2; exit 1; }
uv run --no-project scripts/setup_primer_project.py <project-name> <some-temp-dir> --revision <report-revision> --exclude-newer <report-timestamp>
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> <temporary-directory> \
--revision <report-project-revision> \
--exclude-newer <EXCLUDE_NEWER>
```

ALWAYS confirm the behavior difference reproduces before minimizing or explaining it.
ALWAYS use this script before attempting to reproduce the change.
NEVER try to confirm the behaviour difference without first setting up the project's virtual environment using this script.

When comparing the copied ty binaries, use the project-specific ty command printed by `setup_primer_project.py`. That command includes the project's mypy-primer metadata such as `paths` and any custom `ty_cmd`, matching ecosystem CI. Keep `TY_CONFIG_FILE` exported in the same shell that runs the comparison, and set `ty_binary` to each copied binary before running the printed command:
Use absolute paths and re-export `TY_CONFIG_FILE` in every new shell before running either binary:

```bash
export TY_CONFIG_FILE="$PWD/target/ty-ecosystem-bins/ty-ecosystem.toml"
test -f "$TY_CONFIG_FILE" || { echo "missing $TY_CONFIG_FILE" >&2; exit 1; }

project_dir="$PWD/<some-temp-dir>"
test -f "$TY_CONFIG_FILE"
project_dir="$PWD/<temporary-directory>"
ty_base="$PWD/target/ty-ecosystem-bins/ty-base"
ty_pr="$PWD/target/ty-ecosystem-bins/ty-pr"

cd "$project_dir"
ty_binary="$ty_base"
<project-specific ty command printed by setup_primer_project.py>
<project-specific command printed by setup_primer_project.py>
ty_binary="$ty_pr"
<project-specific ty command printed by setup_primer_project.py>
<project-specific command printed by setup_primer_project.py>
```

If the ecosystem report gives an exact project revision, pass it to the script with `--revision`. If the report gives a timestamp, pass it to the script with `--exclude-newer`. Do not install dependencies before checking out the report revision. Do not use current upstream or the current mypy-primer revision as evidence for a historical report when the report provides a pinned revision. If running `ecosystem-analyzer` directly, also pass the report timestamp as `--exclude-newer`, matching ecosystem CI.
Confirm the detailed report's difference exactly, including duplicate diagnostics when present.

## Minimize

When asked to minimize an ecosystem change, start from the reproduced project. Reduce the Python code until only the smallest code needed to demonstrate the behavior difference remains. DO NOT look at conversation or analysis in other PR comments: your analysis should start from a clean slate. Even if the cause looks obvious, DO NOT skip ahead to an explanation or a hand-written reproducer. Use a rigorous, systematic process and verify after each reduction that the behavior difference still reproduces.

An ideal minimized reproducer:

- Is a single file that is as small as possible.
- Has as few third-party imports as possible, ideally none.
- Uses smaller third-party packages with fewer dependencies when third-party imports are unavoidable. For example, prefer an import from `numpy` over one from `pandas`.
- Has as few first-party and standard-library imports as possible.
- Keeps imports from modules with highly special-cased symbols only when they are necessary (such modules may include `typing`, `abc`, `enum`, `types`, or `typing_extensions`).
- Uses an absolute minimum of "advanced"/complex typing or language features. For example, if the original code
uses a walrus operator, but the behavior difference still reproduces without it, remove the walrus operator. If the original code uses a `Protocol` from `typing_extensions`, but the behavior difference still reproduces without it, remove the `Protocol`.

Use a systematic loop. You do not need to apply every tool in every iteration, but keep looping until none of the available minimization tools can reduce the reproducer further while preserving the behavior difference. Your clones of ecosystem projects and/or their dependencies should be treated as transient artifacts of the investigation: they should be deleted after the minimization is complete, and you SHOULD NOT ask for permission to modify them during the minimization process. If the user has asked for an ecosystem change to be minimized, ANY of the changes below should be understood as automatically having been approved by the user.

Available minimization tools include:

1. Remove files that are not needed for the difference.
2. Strip imports, definitions, and statements from the remaining files.
3. Cut and paste definitions from one file into another file to reduce first-party imports.
4. Copy installed third-party dependency files from the project's `.venv` into the project as first-party files so that you can convert third-party imports into first-party imports. If you must clone a dependency instead, use the exact installed version rather than the dependency's current default branch.
5. Inline the relevant parts of stdlib definitions from ty's vendored typeshed stubs into first-party code to reduce stdlib imports. ty's vendored typeshed stubs are the single source of truth for ty regarding the Python standard library, and they are found in `./crates/ty_vendored`.

After applying a minimization tool, re-run the comparison between the PR branch and the PR's merge base.
Keep a reduction only when the behavior difference still reproduces.

DO NOT stop looping until no further reductions could be applied without making the behavior difference disappear.

Before retaining the final reproducer, perform an import audit: attempt to delete every import, inline third-party definitions where possible, and explain why each surviving third-party import is necessary.
Reduce the reproduced project iteratively, using the base-versus-PR output as the oracle after every change. Prefer a single file, no third-party imports, and the least complex code that preserves the difference. For nontrivial reductions, follow [references/advanced-minimization.md](references/advanced-minimization.md).

If the minimized behavior change is a diagnostic change, the final minimized Python snippet MUST include the full diagnostic message and error code on both branches, as a comment above or on the relevant line of code.
## Return

ANY reference to a line number in an external project MUST use a permalink in the form `[project file.py:123](permalink)`. Referring to an external line number without a permalink is unacceptable.
Provide the original permalinked report entry, exact base and PR behavior, minimal code, full diagnostic messages and error codes, 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,26 @@
# 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 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 removing them changes the behavior.

## Reduction Loop

Work systematically from the reproduced project. Do not 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 remains. 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. 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 `crates/ty_vendored`, which is ty's source of truth for stdlib types.
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 every remaining third-party definition. Record why any surviving import is essential. Keep these notes as working evidence; the caller decides whether they belong in its final artifact.

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