{"id":1040,"name":"ruff","ecosystem":"pip","repository_url":"https://github.com/astral-sh/ruff","issues_count":51714,"created_at":"2025-06-06T15:01:39.914Z","updated_at":"2025-06-06T15:01:39.914Z","purl":"pkg:pypi/ruff","metadata":{"id":5201782,"name":"ruff","ecosystem":"pypi","description":"An extremely fast Python linter and code formatter, written in Rust.","homepage":"https://docs.astral.sh/ruff","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/astral-sh/ruff","keywords_array":["automation","flake8","pycodestyle","pyflakes","pylint","clippy"],"namespace":null,"versions_count":360,"first_release_published_at":"2022-08-27T22:27:25.000Z","latest_release_published_at":"2025-06-05T20:59:32.000Z","latest_release_number":"0.11.13","last_synced_at":"2025-06-05T21:17:22.860Z","created_at":"2022-08-27T22:48:04.632Z","updated_at":"2025-06-05T21:17:23.378Z","registry_url":"https://pypi.org/project/ruff/","install_command":"pip install ruff --index-url https://pypi.org/simple","documentation_url":"https://docs.astral.sh/ruff/","metadata":{"funding":null,"documentation":"https://docs.astral.sh/ruff/","classifiers":["Development Status :: 5 - Production/Stable","Environment :: Console","Intended Audience :: Developers","License :: OSI Approved :: MIT License","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9","Programming Language :: Rust","Topic :: Software Development :: Libraries :: Python Modules","Topic :: Software Development :: Quality Assurance"],"normalized_name":"ruff"},"repo_metadata":{"uuid":"523043277","full_name":"astral-sh/ruff","owner":"astral-sh","description":"An extremely fast Python linter and code formatter, written in Rust.","archived":false,"fork":false,"pushed_at":"2023-12-23T00:03:05.000Z","size":34528,"stargazers_count":21601,"open_issues_count":648,"forks_count":710,"subscribers_count":70,"default_branch":"main","last_synced_at":"2023-12-23T01:08:35.872Z","etag":null,"topics":["linter","pep8","python","python3","ruff","rust","rustpython","static-analysis","static-code-analysis","style-guide","styleguide"],"latest_commit_sha":null,"homepage":"https://docs.astral.sh/ruff","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/astral-sh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-08-09T17:17:44.000Z","updated_at":"2023-12-22T20:40:03.000Z","dependencies_parsed_at":"2022-09-01T04:31:44.063Z","dependency_job_id":"9cfc39fa-6296-4921-b42f-fd7d97d9ab03","html_url":"https://github.com/astral-sh/ruff","commit_stats":null,"previous_names":["astral-sh/ruff","charliermarsh/ruff"],"tags_count":283,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/astral-sh","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":177635731,"owners_count":10568263,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"astral-sh","name":"Astral","uuid":"115962839","kind":"organization","description":"High-performance developer tools for the Python ecosystem.","email":"hey@astral.sh","website":"https://astral.sh","location":"United States of America","twitter":"astral_sh","company":null,"icon_url":"https://avatars.githubusercontent.com/u/115962839?v=4","repositories_count":1,"last_synced_at":"2023-04-25T14:44:49.525Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/astral-sh","created_at":"2023-04-25T14:44:49.526Z","updated_at":"2023-04-25T14:44:49.526Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/astral-sh","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/astral-sh/repositories"},"tags":[{"name":"v0.1.9","sha":"0263f2715eba81aee471e3dd5a50ea5f9426cbb1","kind":"tag","published_at":"2023-12-21T18:42:56.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.1.9","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.1.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.9/manifests"},{"name":"v0.1.8","sha":"c014622003e9b348310d7b7be862f6ccffae7137","kind":"tag","published_at":"2023-12-13T18:43:48.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.1.8","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.1.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.8/manifests"},{"name":"v0.1.7","sha":"8d9912a83a4eb41d38b2d75d05b06ca6093a7f2d","kind":"tag","published_at":"2023-12-04T21:55:03.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.1.7","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.1.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.7/manifests"},{"name":"v0.1.6","sha":"f460f9c5c0126f59b6a9641221ef0bdfa8afa74a","kind":"tag","published_at":"2023-11-17T18:46:30.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.1.6","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.1.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.6/manifests"},{"name":"v0.1.5","sha":"3956f38999ff7c036e9d1ac9410b3eff834cb158","kind":"tag","published_at":"2023-11-08T23:11:34.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.1.5","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.1.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.5/manifests"},{"name":"v0.1.4","sha":"c4889196e7e4d36517f29592e90e40ca991bc98d","kind":"tag","published_at":"2023-11-03T21:30:36.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.1.4","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.1.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.4/manifests"},{"name":"v0.1.3","sha":"3e7b92991b996871cdbd674782732fcfc214a5e2","kind":"tag","published_at":"2023-10-26T19:26:34.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.1.3","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.3/manifests"},{"name":"v0.1.2","sha":"3127c79b29d72f5b38d8a6bc81e069e14085ce11","kind":"tag","published_at":"2023-10-24T15:52:15.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.1.2","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.2/manifests"},{"name":"v0.1.1","sha":"22cf451d517739da7dac9b50bd2cfffaa3a09697","kind":"tag","published_at":"2023-10-19T21:21:17.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.1.1","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.1/manifests"},{"name":"v0.1.0","sha":"172ac2c9a27040e4a60726f82cabed6166af094a","kind":"tag","published_at":"2023-10-16T19:41:04.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.1.0","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.1.0/manifests"},{"name":"v0.0.292","sha":"c6d0bdd5723e4c15b2b425e84fdb1b4ca5379700","kind":"tag","published_at":"2023-10-02T16:45:27.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.292","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.292","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.292","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.292/manifests"},{"name":"v0.0.291","sha":"8bfe9bda41538e47fb9c46f190bc148b1db68515","kind":"tag","published_at":"2023-09-22T17:57:28.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.291","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.291","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.291","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.291/manifests"},{"name":"v0.0.290","sha":"0c030b5bf31e425cb6070db7386243eca6dbd8f1","kind":"tag","published_at":"2023-09-15T21:19:54.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.290","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.290","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.290","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.290/manifests"},{"name":"v0.0.289","sha":"e7a27794022e18b05136ce8e4fc121f14713ed02","kind":"tag","published_at":"2023-09-12T16:42:34.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.289","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.289","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.289","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.289/manifests"},{"name":"v0.0.288","sha":"7c9bbcf4e2d173bde625aed26a0056d354f54545","kind":"tag","published_at":"2023-09-11T16:56:53.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.288","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.288","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.288","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.288/manifests"},{"name":"v0.0.287","sha":"2f3a950f6f2e2060b6c083b08ad9adacfae87185","kind":"tag","published_at":"2023-09-01T17:05:35.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.287","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.287","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.287","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.287/manifests"},{"name":"v0.0.286","sha":"91880b82738acb42d155369b44c20e70a5f5fd8c","kind":"tag","published_at":"2023-08-25T19:34:29.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.286","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.286","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.286","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.286/manifests"},{"name":"v0.0.285","sha":"5892c691ea6389dcf53b2212bae7a3acd61ca15f","kind":"tag","published_at":"2023-08-17T21:17:27.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.285","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.285","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.285","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.285/manifests"},{"name":"v0.0.284","sha":"3ecd263b4d1af3935b0f58e8a1dd4f4d2d8007ff","kind":"tag","published_at":"2023-08-09T19:03:59.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.284","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.284","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.284","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.284/manifests"},{"name":"v0.0.283","sha":"fe9590f39f4d41deb1d4ed7c655cff0bcb02bdc4","kind":"tag","published_at":"2023-08-08T19:00:05.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.283","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.283","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.283","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.283/manifests"},{"name":"v0.0.282","sha":"743118ae9ac9c56b7b276dce87291d8200286e43","kind":"tag","published_at":"2023-08-01T13:56:18.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.282","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.282","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.282","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.282/manifests"},{"name":"v0.0.281","sha":"dbd60b2cf51282fbc3b0f866e566fda7b38514ef","kind":"tag","published_at":"2023-07-31T18:20:21.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.281","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.281","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.281","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.281/manifests"},{"name":"v0.0.280","sha":"86b6a3e1ad1b6af1381bb6e7fb1521cd5dd9c1be","kind":"tag","published_at":"2023-07-22T03:50:39.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.280","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.280","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.280","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.280/manifests"},{"name":"v0.0.279","sha":"f1f89f2a7e8eeb16334d8f0a30dfb9ae45425bee","kind":"tag","published_at":"2023-07-21T20:45:29.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.279","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.279","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.279","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.279/manifests"},{"name":"v0.0.278","sha":"0ead9a16ac306bd17ab5951c0e4240c1ed71a208","kind":"tag","published_at":"2023-07-12T17:05:28.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.278","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.278","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.278","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.278/manifests"},{"name":"v0.0.277","sha":"324455f580813a7c7721dc1d7ef1ee7721ae3e76","kind":"tag","published_at":"2023-07-04T21:54:43.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.277","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.277","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.277","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.277/manifests"},{"name":"v0.0.276","sha":"3992c47c008df8f706e03a6ba0d7aa7f068ef0a9","kind":"tag","published_at":"2023-07-03T18:34:07.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.276","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.276","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.276","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.276/manifests"},{"name":"v0.0.275","sha":"5dd00b19e6cbce8dc0b117a4cf41432ec61b9e46","kind":"tag","published_at":"2023-06-22T17:22:02.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.275","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.275","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.275","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.275/manifests"},{"name":"v0.0.274","sha":"a332f078db63c9e56e3e4d33526c376a5b619a8f","kind":"commit","published_at":"2023-06-21T03:16:35.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.274","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.274","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.274","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.274/manifests"},{"name":"v0.0.273","sha":"fde5dbc9aa967b086347f87fc61511c8dfe7ad0e","kind":"commit","published_at":"2023-06-20T18:37:28.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.273","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.273","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.273","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.273/manifests"},{"name":"v0.0.272","sha":"4b78141f6b7b00f11738691399041b995f732b1e","kind":"commit","published_at":"2023-06-08T02:22:35.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.272","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.272","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.272","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.272/manifests"},{"name":"v0.0.271","sha":"7cc205b5d6cce437caa460c78e295cd8b612ec45","kind":"commit","published_at":"2023-06-06T21:06:46.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.271","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.271","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.271","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.271/manifests"},{"name":"v0.0.270","sha":"09c50c311c727c6f6e7b19d982f838ef83d581b1","kind":"commit","published_at":"2023-05-24T17:14:58.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.270","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.270","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.270","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.270/manifests"},{"name":"v0.0.269","sha":"d4c0a41b00b0093dac3bcf79ee329e351a5583b4","kind":"commit","published_at":"2023-05-18T19:45:20.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.269","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.269","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.269","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.269/manifests"},{"name":"v0.0.268","sha":"a3aa841fc94cdc1973a97446108ae7468e2e9f71","kind":"commit","published_at":"2023-05-18T17:02:22.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.268","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.268","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.268","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.268/manifests"},{"name":"v0.0.267","sha":"7617519b4f6c7f726a2758a601206ca49308db2a","kind":"commit","published_at":"2023-05-12T19:46:42.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.267","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.267","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.267","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.267/manifests"},{"name":"v0.0.266","sha":"67076b2dcb8e4402da6f65fae570790fbae833b1","kind":"commit","published_at":"2023-05-12T17:11:03.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.266","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.266","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.266","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.266/manifests"},{"name":"v0.0.265","sha":"11e1380df412cd18eb8f6001e6164195bf90436b","kind":"commit","published_at":"2023-05-05T17:16:05.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.265","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.265","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.265","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.265/manifests"},{"name":"v0.0.264","sha":"8cb76f85eba1c970a8c800348fd1e0c874621a57","kind":"commit","published_at":"2023-05-02T06:33:38.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.264","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.264","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.264","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.264/manifests"},{"name":"v0.0.263","sha":"fd7ccb4c9e6d04770c9ac4e80bc279bd34e790de","kind":"commit","published_at":"2023-04-25T05:32:29.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.263","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.263","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.263","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.263/manifests"},{"name":"v0.0.262","sha":"eed6866b7ed7b458660a6b56810ef752085f86f6","kind":"commit","published_at":"2023-04-19T20:04:22.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.262","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.262","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.262","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.262/manifests"},{"name":"v0.0.261","sha":"255b094b33188e67e9bb9f10f702aa8ecda10132","kind":"commit","published_at":"2023-04-05T02:31:01.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.261","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.261","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.261","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.261/manifests"},{"name":"v0.0.260","sha":"cb588d1d6da9c5409c91ce0ae2aa41eafdd566f6","kind":"commit","published_at":"2023-03-29T19:13:12.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.260","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.260","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.260","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.260/manifests"},{"name":"v0.0.259","sha":"f58345dee32177d17ca323a2d60a020a3c7943a4","kind":"commit","published_at":"2023-03-23T18:52:42.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.259","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.259","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.259","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.259/manifests"},{"name":"v0.0.258","sha":"615887a7fe476d2fa6ed3a5462467466a3f608b8","kind":"commit","published_at":"2023-03-22T19:02:57.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.258","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.258","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.258","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.258/manifests"},{"name":"v0.0.257","sha":"0c4926ff7be0f251402edacb7a873ec104117ea0","kind":"commit","published_at":"2023-03-18T02:34:10.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.257","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.257","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.257","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.257/manifests"},{"name":"v0.0.256","sha":"e636c5fcf07313ad83c1c75d5b1459b4999efd20","kind":"commit","published_at":"2023-03-15T03:17:19.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.256","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.256","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.256","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.256/manifests"},{"name":"v0.0.255","sha":"aa97a092bdbabcfa24381313b76a2c52a80cd9f0","kind":"commit","published_at":"2023-03-13T18:06:51.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.255","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.255","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.255","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.255/manifests"},{"name":"v0.0.254","sha":"889c05c87ed02e36567af164b85bd027ff720df4","kind":"commit","published_at":"2023-03-04T04:33:12.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.254","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.254","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.254","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.254/manifests"},{"name":"v0.0.253","sha":"386ca7c9a1bb7ebeb1457b605695c6a09e67092b","kind":"commit","published_at":"2023-02-27T04:10:04.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.253","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.253","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.253","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.253/manifests"},{"name":"v0.0.252","sha":"1c41789c2ae9dcdccf8510f23a62b011455987bd","kind":"commit","published_at":"2023-02-22T19:50:14.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.252","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.252","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.252","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.252/manifests"},{"name":"v0.0.251","sha":"fd638a2e5418d253470ee95212a1197402d9fd2c","kind":"commit","published_at":"2023-02-21T23:13:59.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.251","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.251","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.251","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.251/manifests"},{"name":"v0.0.250","sha":"06e426f509b6d718d77895dc7bdeaa4df5efae6e","kind":"commit","published_at":"2023-02-21T20:20:46.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.250","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.250","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.250","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.250/manifests"},{"name":"v0.0.249","sha":"4cfa350112a82fb631909fc555588f3da8ba5750","kind":"commit","published_at":"2023-02-20T18:11:29.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.249","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.249","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.249","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.249/manifests"},{"name":"v0.0.248","sha":"41e77bb01d7625071aab35f84d26c237f42b4068","kind":"commit","published_at":"2023-02-19T16:30:01.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.248","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.248","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.248","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.248/manifests"},{"name":"v0.0.247","sha":"f8d46d09ef5fab7d1bdb7b09d6e75b1ba3295bbc","kind":"commit","published_at":"2023-02-15T20:19:03.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.247","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.247","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.247","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.247/manifests"},{"name":"v0.0.246","sha":"c21a5912b91f1c11085a1b89066ef409c2e833bb","kind":"commit","published_at":"2023-02-13T03:33:01.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.246","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.246","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.246","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.246/manifests"},{"name":"v0.0.245","sha":"24faabf1f4e30712f245ee96201437ace35c6ce1","kind":"commit","published_at":"2023-02-11T03:15:27.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.245","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.245","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.245","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.245/manifests"},{"name":"v0.0.244","sha":"125615af1209de6c3be226b10b8f55a5eccd5aea","kind":"commit","published_at":"2023-02-08T22:28:59.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.244","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.244","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.244","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.244/manifests"},{"name":"v0.0.243","sha":"bf718fdf26631cc30bca7d8661aa405ee2714d31","kind":"commit","published_at":"2023-02-07T02:22:54.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.243","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.243","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.243","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.243/manifests"},{"name":"v0.0.242","sha":"2dd04dd6a31135e1a7f19e6ef3ec188a3164e921","kind":"commit","published_at":"2023-02-06T21:34:47.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.242","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.242","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.242","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.242/manifests"},{"name":"v0.0.241","sha":"7d4f0a8320d48f315674ec52d30e2883f68d20b3","kind":"commit","published_at":"2023-02-04T00:25:12.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.241","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.241","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.241","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.241/manifests"},{"name":"v0.0.240","sha":"651f6b6bceae09f310ba143aac30ca3330da2411","kind":"commit","published_at":"2023-02-02T17:45:23.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.240","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.240","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.240","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.240/manifests"},{"name":"v0.0.239","sha":"c15595325c7f3401c91314e74ed3bee7bf3eb3b2","kind":"commit","published_at":"2023-02-01T00:06:22.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.239","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.239","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.239","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.239/manifests"},{"name":"v0.0.238","sha":"e8810eae649a43394695d1f8e733b6f6f7a272c5","kind":"commit","published_at":"2023-01-30T23:49:11.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.238","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.238","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.238","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.238/manifests"},{"name":"v0.0.237","sha":"add7fefeb5f9d6d56980d8d6f52cb0e67658e827","kind":"commit","published_at":"2023-01-28T15:52:14.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.237","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.237","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.237","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.237/manifests"},{"name":"v0.0.236","sha":"685d9ab84870ffaa4f1c62306f4666b83668e5f6","kind":"commit","published_at":"2023-01-26T23:47:00.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.236","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.236","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.236","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.236/manifests"},{"name":"v0.0.235","sha":"edd0e16a029a1a0f925a24c6ccec53efc8c576a9","kind":"commit","published_at":"2023-01-25T23:28:27.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.235","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.235","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.235","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.235/manifests"},{"name":"v0.0.234","sha":"9b07d0bd9288e9678078fbd8e6d52923daf1b0af","kind":"commit","published_at":"2023-01-25T21:55:57.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.234","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.234","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.234","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.234/manifests"},{"name":"v0.0.233","sha":"605416922d193d2261bc8b5ed0de8741691a018d","kind":"commit","published_at":"2023-01-24T15:46:49.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.233","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.233","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.233","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.233/manifests"},{"name":"v0.0.232","sha":"d645a19e0a1375613744246e7395b8cd2e960ddc","kind":"commit","published_at":"2023-01-24T14:49:07.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.232","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.232","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.232","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.232/manifests"},{"name":"v0.0.231","sha":"1c3265ef98bd76ade661c14344f9667854e0997f","kind":"commit","published_at":"2023-01-23T17:51:09.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.231","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.231","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.231","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.231/manifests"},{"name":"v0.0.230","sha":"23b622943e9ef8b926124c4bff2ad90d654a3fa9","kind":"commit","published_at":"2023-01-22T18:58:41.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.230","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.230","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.230","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.230/manifests"},{"name":"v0.0.229","sha":"84300e00ff8bd7c71f6619d699e31df597b3b581","kind":"commit","published_at":"2023-01-21T18:18:06.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.229","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.229","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.229","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.229/manifests"},{"name":"v0.0.228","sha":"9e704a7c639f8ad5f7751fb062c46144caec5bb7","kind":"commit","published_at":"2023-01-20T18:17:19.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.228","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.228","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.228","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.228/manifests"},{"name":"v0.0.227","sha":"cf56955ba6c8214a53aa39a93c718eb7d72e4878","kind":"commit","published_at":"2023-01-20T04:24:52.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.227","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.227","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.227","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.227/manifests"},{"name":"v0.0.226","sha":"d8645acd1f8507d9b16a2dba7434790c745beec8","kind":"commit","published_at":"2023-01-19T01:54:38.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.226","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.226","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.226","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.226/manifests"},{"name":"v0.0.225","sha":"cdb470081308117b67022c5fa4cd4a1b333e2e78","kind":"commit","published_at":"2023-01-18T05:22:48.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.225","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.225","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.225","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.225/manifests"},{"name":"v0.0.224","sha":"74a8a218f37b7331ff9d2e36f8d04585ff22cc89","kind":"commit","published_at":"2023-01-17T04:43:14.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.224","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.224","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.224","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.224/manifests"},{"name":"v0.0.223","sha":"3a3a5fcd818998b94bddf59a5a815ee638772f3b","kind":"commit","published_at":"2023-01-16T03:45:14.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.223","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.223","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.223","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.223/manifests"},{"name":"v0.0.222","sha":"e3cc918b933175b9431905e10a0f50e28e7f0527","kind":"commit","published_at":"2023-01-15T04:34:53.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.222","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.222","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.222","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.222/manifests"},{"name":"v0.0.221","sha":"931d41bff1745a166e9a905af9c0aa62046b6b45","kind":"commit","published_at":"2023-01-14T04:56:29.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.221","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.221","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.221","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.221/manifests"},{"name":"v0.0.220","sha":"9aeb5df5febeceb6d3931d403a490e1de9913bef","kind":"commit","published_at":"2023-01-12T22:57:04.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.220","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.220","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.220","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.220/manifests"},{"name":"v0.0.219","sha":"d8162ce79dec75f1a111d538347b0ce9f88b6bce","kind":"commit","published_at":"2023-01-12T04:46:01.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.219","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.219","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.219","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.219/manifests"},{"name":"v0.0.218","sha":"cfbd068dd5f8abc2e5e592179bfd988fc29c6518","kind":"commit","published_at":"2023-01-11T02:28:23.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.218","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.218","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.218","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.218/manifests"},{"name":"v0.0.217","sha":"edab268d50bd106726b4bfcd73aa6fa592613ee6","kind":"commit","published_at":"2023-01-10T04:26:22.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.217","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.217","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.217","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.217/manifests"},{"name":"v0.0.216","sha":"8a26c8b4e08a8a2002f17c979d60ec69f7fdeaa5","kind":"commit","published_at":"2023-01-09T17:58:07.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.216","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.216","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.216","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.216/manifests"},{"name":"v0.0.215","sha":"0152814a00586d32fb0eba3a667935ee3cba720a","kind":"commit","published_at":"2023-01-08T03:17:29.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.215","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.215","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.215","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.215/manifests"},{"name":"v0.0.214","sha":"98856e05d6d3783e4e51a50d12e58b95b97a9cac","kind":"commit","published_at":"2023-01-07T20:49:59.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.214","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.214","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.214","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.214/manifests"},{"name":"v0.0.213","sha":"f1c3ebfe0f241d79ae4675f0b1b113199dbe0414","kind":"commit","published_at":"2023-01-07T05:30:56.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.213","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.213","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.213","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.213/manifests"},{"name":"v0.0.212","sha":"ee4cae97d5593168383a049c7f49134a6d93cda3","kind":"commit","published_at":"2023-01-06T02:25:42.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.212","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.212","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.212","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.212/manifests"},{"name":"v0.0.211","sha":"7b59cd2d32cc033c0f0f52e21854771cd2a5fa1d","kind":"commit","published_at":"2023-01-05T04:13:04.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.211","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.211","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.211","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.211/manifests"},{"name":"v0.0.210","sha":"0a0e1926f238322f98df3b2516c3795f4bd1ae0b","kind":"commit","published_at":"2023-01-04T12:05:13.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.210","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.210","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.210","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.210/manifests"},{"name":"v0.0.209","sha":"e9a236f740d99e271218c477278f1292f986b3af","kind":"commit","published_at":"2023-01-03T13:27:28.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.209","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.209","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.209","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.209/manifests"},{"name":"v0.0.208","sha":"8b277138de351801560d903658958b7967f80dde","kind":"commit","published_at":"2023-01-03T04:19:03.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.208","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.208","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.208","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.208/manifests"},{"name":"v0.0.207","sha":"f74050e5b17f1373962f6faa61f784db1fc1bdcb","kind":"commit","published_at":"2023-01-02T19:39:32.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.207","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.207","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.207","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.207/manifests"},{"name":"v0.0.206","sha":"2315db7d133ca57964a0c8fd7fda161ef435629a","kind":"commit","published_at":"2023-01-01T21:39:29.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.206","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.206","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.206","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.206/manifests"},{"name":"v0.0.205","sha":"0e8c2371679ffd623646ac13fb2e5f0c9acf8d86","kind":"commit","published_at":"2022-12-31T18:44:39.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.205","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.205","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.205","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.205/manifests"},{"name":"v0.0.204","sha":"0c215365aee6f736b6dd7040cb778564e346af76","kind":"commit","published_at":"2022-12-31T13:20:09.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.204","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.204","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.204","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.204/manifests"},{"name":"v0.0.203","sha":"74903f23d69172474116ec3e05d182cdf9179415","kind":"commit","published_at":"2022-12-30T20:33:30.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.203","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.203","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.203","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.203/manifests"},{"name":"v0.0.202","sha":"818582fe8afb5ca4be8d71bd53e088e374de34d6","kind":"commit","published_at":"2022-12-30T13:16:32.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.202","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.202","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.202","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.202/manifests"},{"name":"v0.0.201","sha":"16b10c42f0b26ee45354302050e2a47503c09b81","kind":"commit","published_at":"2022-12-30T04:12:28.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.201","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.201","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.201","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.201/manifests"},{"name":"v0.0.200","sha":"118a93260a8b2ebf4cf43f834a4502368ee19ab3","kind":"commit","published_at":"2022-12-29T18:31:23.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.200","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.200","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.200","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.200/manifests"},{"name":"v0.0.199","sha":"057414ddd4ea2970cb711165c58a50d244616e7c","kind":"commit","published_at":"2022-12-29T01:58:43.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.199","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.199","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.199","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.199/manifests"},{"name":"v0.0.198","sha":"1822b57ed587bab9c6e594065c964a79450f4556","kind":"commit","published_at":"2022-12-28T02:57:32.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.198","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.198","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.198","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.198/manifests"},{"name":"v0.0.196","sha":"0a60eb0aca03ad8dceea25fca8df03f8cff9660e","kind":"commit","published_at":"2022-12-27T17:12:28.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.196","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.196","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.196","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.196/manifests"},{"name":"v0.0.195","sha":"1e4b1533ad33dc671c8ab74aa54ed63e20683b1f","kind":"commit","published_at":"2022-12-27T01:41:39.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.195","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.195","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.195","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.195/manifests"},{"name":"v0.0.194","sha":"28c45eb2a3364110bcf73ff9d793c1f4b24dee94","kind":"commit","published_at":"2022-12-26T01:21:01.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.194","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.194","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.194","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.194/manifests"},{"name":"v0.0.193","sha":"cc2110449cba6174cdb8db4def2b94276e464641","kind":"commit","published_at":"2022-12-24T20:06:12.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.193","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.193","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.193","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.193/manifests"},{"name":"v0.0.192","sha":"51bda28a7d1047367610c69dd5c6d9810a964c10","kind":"commit","published_at":"2022-12-22T22:31:31.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.192","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.192","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.192","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.192/manifests"},{"name":"v0.0.191","sha":"48e3c046b0423dff78dc18c181010d313f5c0f3f","kind":"commit","published_at":"2022-12-22T02:25:37.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.191","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.191","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.191","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.191/manifests"},{"name":"v0.0.190","sha":"20234c615676ae37ce9ad167d34a16382c357169","kind":"commit","published_at":"2022-12-21T21:01:48.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.190","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.190","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.190","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.190/manifests"},{"name":"v0.0.189","sha":"ef8fe31c0c24cd84198b0b5997f4ab6bf25d10a0","kind":"commit","published_at":"2022-12-20T18:26:17.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.189","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.189","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.189","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.189/manifests"},{"name":"v0.0.188","sha":"4107bc828d8fa11227c273a11815a2f0c7e30073","kind":"commit","published_at":"2022-12-19T17:18:06.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.188","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.188","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.188","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.188/manifests"},{"name":"v0.0.187","sha":"b5ab492a70daf003d92a573a15932fb30f24c3a6","kind":"commit","published_at":"2022-12-19T01:09:02.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.187","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.187","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.187","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.187/manifests"},{"name":"v0.0.186","sha":"1028ed3565140ad76d11bc99a76be1dc61471e4d","kind":"commit","published_at":"2022-12-18T19:30:30.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.186","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.186","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.186","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.186/manifests"},{"name":"v0.0.185","sha":"a2806eb8ef8f8e37aecb4090e48dfa54430c1006","kind":"commit","published_at":"2022-12-17T04:47:56.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.185","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.185","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.185","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.185/manifests"},{"name":"v0.0.184","sha":"1e19142d0e882e0f0ffa00004f95f77748bb849a","kind":"commit","published_at":"2022-12-16T19:36:25.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.184","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.184","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.184","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.184/manifests"},{"name":"v0.0.183","sha":"a9f56ee76efb46858c61e9b45420378ac2030ec6","kind":"commit","published_at":"2022-12-16T04:15:12.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.183","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.183","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.183","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.183/manifests"},{"name":"v0.0.182","sha":"1ea2e93f8e0f303f69b91f77caef85e20f9488f5","kind":"commit","published_at":"2022-12-15T03:57:22.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.182","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.182","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.182","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.182/manifests"},{"name":"v0.0.181","sha":"d814ebd21f970bb8190cd9077ab7969926d984af","kind":"commit","published_at":"2022-12-14T22:35:36.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.181","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.181","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.181","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.181/manifests"},{"name":"v0.0.180","sha":"854cd148428866f1a3588c314f5747a89e929d81","kind":"commit","published_at":"2022-12-14T18:21:10.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.180","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.180","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.180","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.180/manifests"},{"name":"v0.0.179","sha":"765d21c7b06e780fb91cbcc79909836883faf0dd","kind":"commit","published_at":"2022-12-13T15:17:16.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.179","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.179","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.179","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.179/manifests"},{"name":"v0.0.178","sha":"f3e11a30cb7ed46b12c016d9c39e9f34df907a02","kind":"commit","published_at":"2022-12-13T03:06:04.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.178","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.178","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.178","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.178/manifests"},{"name":"v0.0.177","sha":"19e9eb1af8a6410ff763ce1736eb6c3b896703eb","kind":"commit","published_at":"2022-12-12T03:38:52.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.177","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.177","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.177","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.177/manifests"},{"name":"v0.0.176","sha":"9161b866b5459f6bed076063f3635f5f8a63ad08","kind":"commit","published_at":"2022-12-11T15:19:50.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.176","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.176","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.176","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.176/manifests"},{"name":"v0.0.175","sha":"c86e52193c0e9fb3ddc967ce0cc22004f60b70c0","kind":"commit","published_at":"2022-12-11T02:23:19.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.175","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.175","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.175","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.175/manifests"},{"name":"v0.0.174","sha":"63b3e00c9706025c8de93ac7b1b54522e69d85f4","kind":"commit","published_at":"2022-12-10T17:08:48.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.174","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.174","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.174","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.174/manifests"},{"name":"v0.0.173","sha":"257bd7f1d70e1450365d5c1f0fc50c82e69b4f91","kind":"commit","published_at":"2022-12-10T04:23:12.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.173","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.173","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.173","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.173/manifests"},{"name":"v0.0.172","sha":"b35a804f9d7b0ddd26343b918463d9c506d676b3","kind":"commit","published_at":"2022-12-09T22:47:34.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.172","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.172","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.172","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.172/manifests"},{"name":"v0.0.171","sha":"dfd6225d8542a6b2839807aeee211ce285cf84a0","kind":"commit","published_at":"2022-12-09T04:18:48.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.171","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.171","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.171","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.171/manifests"},{"name":"v0.0.170","sha":"a710e35ebc66653e31e7c3b1e40709db355b4a01","kind":"commit","published_at":"2022-12-08T16:36:24.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.170","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.170","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.170","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.170/manifests"},{"name":"v0.0.169","sha":"5c8655f47941483e808dea6427a5d2bd5e666de9","kind":"commit","published_at":"2022-12-08T00:10:16.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.169","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.169","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.169","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.169/manifests"},{"name":"v0.0.168","sha":"4405a6a903a236e56d944b26a9a4a406667f4b3b","kind":"commit","published_at":"2022-12-07T18:18:40.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.168","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.168","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.168","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.168/manifests"},{"name":"v0.0.167","sha":"d698c6123e7aad89dbfa33fba71c6c5f39697aa8","kind":"commit","published_at":"2022-12-07T15:37:31.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.167","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.167","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.167","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.167/manifests"},{"name":"v0.0.166","sha":"80e2f0c92ebf295bced627f91e0238367ff6d057","kind":"commit","published_at":"2022-12-06T21:06:19.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.166","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.166","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.166","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.166/manifests"},{"name":"v0.0.165","sha":"f1d3e3698ac45c6b8d92b5c7c5ae5993cce045f2","kind":"commit","published_at":"2022-12-06T05:03:30.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.165","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.165","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.165","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.165/manifests"},{"name":"v0.0.164","sha":"f2ad9152245913aeb66b66e642961729e417d0ad","kind":"commit","published_at":"2022-12-06T04:37:22.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.164","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.164","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.164","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.164/manifests"},{"name":"v0.0.163","sha":"1339e2a002f78892a01fb0bd0388d3d735345daa","kind":"commit","published_at":"2022-12-06T01:45:24.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.163","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.163","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.163","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.163/manifests"},{"name":"v0.0.162","sha":"995994be3ea39c9cc8bb0c91762bd21b1935f2fd","kind":"commit","published_at":"2022-12-06T00:07:44.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.162","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.162","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.162","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.162/manifests"},{"name":"v0.0.161","sha":"4b41ae3f53c5d2010e1dca94e659c73e255735b7","kind":"commit","published_at":"2022-12-05T22:02:05.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.161","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.161","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.161","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.161/manifests"},{"name":"v0.0.160","sha":"40b7c64f7dbad8c824de4161bed20373dee52ab8","kind":"commit","published_at":"2022-12-05T17:56:38.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.160","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.160","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.160","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.160/manifests"},{"name":"v0.0.159","sha":"1d1662cb9c1b970396c341586a8c3d225f8588b8","kind":"commit","published_at":"2022-12-05T16:22:02.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.159","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.159","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.159","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.159/manifests"},{"name":"v0.0.158","sha":"7024ad7cc7d2d91ce4e1b1f7dd9098f1d0256654","kind":"commit","published_at":"2022-12-05T02:22:24.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.158","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.158","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.158","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.158/manifests"},{"name":"v0.0.157","sha":"5e9a8fcf53954d35efea69b55b8df9ce51b7cadf","kind":"commit","published_at":"2022-12-04T19:46:46.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.157","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.157","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.157","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.157/manifests"},{"name":"v0.0.156","sha":"d06dc4c72d2e263c6a25c5bf920cb9ded0c632e8","kind":"commit","published_at":"2022-12-04T15:22:09.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.156","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.156","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.156","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.156/manifests"},{"name":"v0.0.155","sha":"4b0c3e3bc90c4c291c3667ead8c94ed93ef9017a","kind":"commit","published_at":"2022-12-04T05:12:00.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.155","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.155","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.155","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.155/manifests"},{"name":"v0.0.154","sha":"b6b509811da0e96a6e5e458f8a91bef3d5b58259","kind":"commit","published_at":"2022-12-04T01:14:38.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.154","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.154","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.154","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.154/manifests"},{"name":"v0.0.153","sha":"e66b786229729c7d6033616954914dd663a54713","kind":"commit","published_at":"2022-12-03T22:05:39.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.153","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.153","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.153","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.153/manifests"},{"name":"v0.0.152","sha":"1a33ee3fc42cbbcd4480f9f07fc686bd4bb90d04","kind":"commit","published_at":"2022-12-02T18:23:00.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.152","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.152","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.152","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.152/manifests"},{"name":"v0.0.151","sha":"1a24d78f676761936738d01cfebb8eccc0e42339","kind":"commit","published_at":"2022-12-02T03:31:44.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.151","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.151","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.151","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.151/manifests"},{"name":"v0.0.150","sha":"d699bb7b86eace469a25a7f6a280ee7d091c4c93","kind":"commit","published_at":"2022-12-01T21:31:18.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.150","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.150","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.150","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.150/manifests"},{"name":"v0.0.149","sha":"6fa0f21227ef20d2b39eddd583f6d7cb009ca8ef","kind":"commit","published_at":"2022-11-30T05:51:36.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.149","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.149","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.149","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.149/manifests"},{"name":"v0.0.148","sha":"30ff4de9a3f0eaaddd0d8bf235ad4984b9895adb","kind":"commit","published_at":"2022-11-30T03:50:30.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.148","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.148","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.148","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.148/manifests"},{"name":"v0.0.147","sha":"2fe22a223b31321a1bf236a4227b59a23bd52cf1","kind":"commit","published_at":"2022-11-30T01:17:58.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.147","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.147","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.147","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.147/manifests"},{"name":"v0.0.146","sha":"0e6a38e6d8e306d173f14a3fa802626403d032c8","kind":"commit","published_at":"2022-11-29T03:27:41.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.146","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.146","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.146","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.146/manifests"},{"name":"v0.0.145","sha":"dca994d05f6608f4189b8963fe09af2ad813fec1","kind":"commit","published_at":"2022-11-29T01:57:58.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.145","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.145","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.145","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.145/manifests"},{"name":"v0.0.144","sha":"72453695d6810c732dd968a3864cbf322bbbfe66","kind":"commit","published_at":"2022-11-29T01:11:08.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.144","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.144","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.144","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.144/manifests"},{"name":"v0.0.143","sha":"ea9acda7321262b597194350d7b01eaff289481c","kind":"commit","published_at":"2022-11-28T20:42:25.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.143","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.143","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.143","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.143/manifests"},{"name":"v0.0.142","sha":"e2c4a098deee063f6d09b33c8923305c9ecdc156","kind":"commit","published_at":"2022-11-28T05:19:27.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.142","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.142","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.142","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.142/manifests"},{"name":"v0.0.141","sha":"9897f81cf349c657ef7a58d74a227e4c832ad504","kind":"commit","published_at":"2022-11-26T21:33:08.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.141","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.141","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.141","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.141/manifests"},{"name":"v0.0.140","sha":"14cf36f922ac99e8666091501d4be8f134ac5bf7","kind":"commit","published_at":"2022-11-26T20:05:46.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.140","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.140","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.140","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.140/manifests"},{"name":"v0.0.139","sha":"560558b814fa943bbfdc3989ea4134ecf0a91618","kind":"commit","published_at":"2022-11-25T23:38:26.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.139","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.139","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.139","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.139/manifests"},{"name":"v0.0.138","sha":"0b60242fb72902dcb5bbb38d6e96c77f18863659","kind":"commit","published_at":"2022-11-25T05:05:41.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.138","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.138","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.138","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.138/manifests"},{"name":"v0.0.137","sha":"68668a584bdcf3cf54256bf3353529d37890788d","kind":"commit","published_at":"2022-11-24T01:28:45.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.137","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.137","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.137","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.137/manifests"},{"name":"v0.0.136","sha":"58aac21a361287bb1749b590870b516421a1e0ab","kind":"commit","published_at":"2022-11-23T22:41:17.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.136","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.136","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.136","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.136/manifests"},{"name":"v0.0.135","sha":"66975876b294b0cb8d958c0e3685b4bb0f0c8d99","kind":"commit","published_at":"2022-11-23T00:21:53.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.135","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.135","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.135","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.135/manifests"},{"name":"v0.0.134","sha":"59615486d8ad47027b6919b148ecb34d9450444c","kind":"commit","published_at":"2022-11-21T21:15:23.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.134","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.134","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.134","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.134/manifests"},{"name":"v0.0.133","sha":"0b9188011b7f5c4b0df74283860ab9140ee0db55","kind":"commit","published_at":"2022-11-21T18:39:37.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.133","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.133","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.133","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.133/manifests"},{"name":"v0.0.132","sha":"38f896502abb736acefec0876d23e34ad5fb5aef","kind":"commit","published_at":"2022-11-20T23:10:13.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.132","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.132","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.132","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.132/manifests"},{"name":"v0.0.131","sha":"6b4aedb3661a35cd39f86ad005c27c71b253f505","kind":"commit","published_at":"2022-11-20T18:40:58.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.131","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.131","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.131","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.131/manifests"},{"name":"v0.0.130","sha":"124782771ffe78656be7e3022b724cc9ce93acb2","kind":"commit","published_at":"2022-11-20T15:37:19.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.130","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.130","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.130","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.130/manifests"},{"name":"v0.0.129","sha":"4be09b45eaba8a605f93f2f98d4eeba0d16c4bc8","kind":"commit","published_at":"2022-11-20T00:52:40.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.129","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.129","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.129","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.129/manifests"},{"name":"v0.0.128","sha":"89afc9db748b136c437de98ad66be369ae60a801","kind":"commit","published_at":"2022-11-18T23:50:03.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.128","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.128","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.128","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.128/manifests"},{"name":"v0.0.127","sha":"49559da54e013b46314c5fdd1473de4dcd04c8c3","kind":"commit","published_at":"2022-11-18T18:31:22.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.127","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.127","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.127","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.127/manifests"},{"name":"v0.0.126","sha":"6a6f4651aaa22dc756ff47386f457e19da17a0b3","kind":"commit","published_at":"2022-11-17T22:19:19.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.126","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.126","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.126","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.126/manifests"},{"name":"v0.0.125","sha":"aafddae6441802b058094a140358035edbf419e7","kind":"commit","published_at":"2022-11-17T17:07:05.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.125","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.125","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.125","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.125/manifests"},{"name":"v0.0.124","sha":"90bfc4ec4df3b7ed859c2b77fe53c0ea60dbb03a","kind":"commit","published_at":"2022-11-16T17:25:24.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.124","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.124","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.124","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.124/manifests"},{"name":"v0.0.123","sha":"8ec14e7ee2a7e7b73865f3fa4965f7e7fdb47f14","kind":"commit","published_at":"2022-11-16T17:06:01.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.123","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.123","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.123","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.123/manifests"},{"name":"v0.0.122","sha":"2c89a19f769f31adfeb3098eb3a2eae734116d81","kind":"commit","published_at":"2022-11-16T03:03:46.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.122","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.122","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.122","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.122/manifests"},{"name":"v0.0.121","sha":"9d136de55a14ca5901ef42a7cd991d8eaf5aeda3","kind":"commit","published_at":"2022-11-15T21:18:39.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.121","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.121","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.121","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.121/manifests"},{"name":"v0.0.120","sha":"3c2291347012c3b1e4925c82d25e043ca5d90ed1","kind":"commit","published_at":"2022-11-15T03:53:36.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.120","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.120","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.120","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.120/manifests"},{"name":"v0.0.119","sha":"058a5276b09b8e436b52284c6ce5ea51baa1e1c6","kind":"commit","published_at":"2022-11-15T02:45:41.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.119","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.119","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.119","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.119/manifests"},{"name":"v0.0.118","sha":"fea029ae356622c0f29ff81620849117a52ee00a","kind":"commit","published_at":"2022-11-14T18:21:27.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.118","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.118","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.118","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.118/manifests"},{"name":"v0.0.117","sha":"08ca8788a78c4ad628e6ef84d770cd94ec254f71","kind":"commit","published_at":"2022-11-13T21:10:29.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.117","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.117","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.117","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.117/manifests"},{"name":"v0.0.116","sha":"a310aed12894d963166aa2693a5d90cdccc7a1b5","kind":"commit","published_at":"2022-11-13T18:46:05.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.116","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.116","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.116","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.116/manifests"},{"name":"v0.0.115","sha":"695b06ba60103d2d7681e7fe2e8be64c3d2de069","kind":"commit","published_at":"2022-11-12T21:46:26.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.115","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.115","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.115","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.115/manifests"},{"name":"v0.0.114","sha":"da9ae6a42ae2c0dc31ae039cacd560a050eb6f74","kind":"commit","published_at":"2022-11-12T16:55:18.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.114","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.114","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.114","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.114/manifests"},{"name":"v0.0.113","sha":"a21fe716f2f77162dfd11b2a532aca707ac96fb5","kind":"commit","published_at":"2022-11-12T03:42:02.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.113","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.113","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.113","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.113/manifests"},{"name":"v0.0.112","sha":"2e7878ff486351a20616d37f8714ed54b415daca","kind":"commit","published_at":"2022-11-11T22:13:04.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.112","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.112","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.112","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.112/manifests"},{"name":"v0.0.111","sha":"560c00ff9d45228ed380b1e459fb29c415173703","kind":"commit","published_at":"2022-11-11T17:38:23.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.111","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.111","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.111","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.111/manifests"},{"name":"v0.0.110","sha":"8cf745045f767944bcbee4e63b9a72b97707dcab","kind":"commit","published_at":"2022-11-11T00:22:45.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.110","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.110","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.110","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.110/manifests"},{"name":"v0.0.109","sha":"9d8cd2d2feb7f35e478086c56f5f601169d4f4ec","kind":"commit","published_at":"2022-11-10T15:54:27.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.109","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.109","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.109","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.109/manifests"},{"name":"v0.0.108","sha":"f572acab30935a0d50f64f86311aad9997154018","kind":"commit","published_at":"2022-11-08T18:20:35.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.108","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.108","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.108","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.108/manifests"},{"name":"v0.0.107","sha":"43383bb6967f29988969c164d98a211cf67147ec","kind":"commit","published_at":"2022-11-07T21:39:03.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.107","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.107","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.107","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.107/manifests"},{"name":"v0.0.106","sha":"16c5ac1e9171b764ea4015f1352188051b2fe5e1","kind":"commit","published_at":"2022-11-07T20:32:54.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.106","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.106","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.106","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.106/manifests"},{"name":"v0.0.105","sha":"7f77ed0f8676d9ef7477ef707f0b1f747ef9e5c0","kind":"commit","published_at":"2022-11-07T02:17:00.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.105","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.105","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.105","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.105/manifests"},{"name":"v0.0.104","sha":"050f34dd2572a85557638adb96e0d66a35604de7","kind":"commit","published_at":"2022-11-06T20:31:10.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.104","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.104","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.104","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.104/manifests"},{"name":"v0.0.103","sha":"22cfd03b13bd7258d82eee6cffc8d023d2933434","kind":"commit","published_at":"2022-11-05T23:53:27.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.103","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.103","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.103","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.103/manifests"},{"name":"v0.0.102","sha":"b335a6a5ecd39febabc97dc2db20b23f4e722388","kind":"commit","published_at":"2022-11-05T18:13:02.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.102","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.102","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.102","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.102/manifests"},{"name":"v0.0.100","sha":"34c91224d7e956a47b0c7ac597db15b40ee06caa","kind":"commit","published_at":"2022-11-04T16:10:17.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.100","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.100","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.100","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.100/manifests"},{"name":"v0.0.99","sha":"5576db3d5ab40a948068b7d30e9147036f750151","kind":"commit","published_at":"2022-11-03T15:47:15.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.99","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.99","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.99","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.99/manifests"},{"name":"v0.0.98","sha":"22991e3e0edb9e495275c0af594fdec96c12ebca","kind":"commit","published_at":"2022-11-03T14:09:33.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.98","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.98","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.98","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.98/manifests"},{"name":"v0.0.97","sha":"e00bcd19f51f33a399751d2a7b854d59024473ca","kind":"commit","published_at":"2022-11-03T02:38:43.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.97","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.97","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.97","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.97/manifests"},{"name":"v0.0.96","sha":"e473df1fe902cd5b8845dfe55fd43cea4bee75df","kind":"commit","published_at":"2022-11-03T02:10:56.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.96","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.96","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.96","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.96/manifests"},{"name":"v0.0.95","sha":"f9def0a139788c8b6571286be7d8b31de9f173d4","kind":"commit","published_at":"2022-11-02T13:03:34.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.95","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.95","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.95","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.95/manifests"},{"name":"v0.0.94","sha":"2d83f99dbfa2518df6a4a058a13b39015a10551f","kind":"commit","published_at":"2022-11-01T20:38:59.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.94","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.94","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.94","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.94/manifests"},{"name":"v0.0.93","sha":"062c41b6f5d8b91fdf4990fc030c8a7d351af783","kind":"commit","published_at":"2022-10-31T13:20:39.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.93","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.93","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.93","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.93/manifests"},{"name":"v0.0.92","sha":"138b06c98a7ddfcf5f4c30a79706c5956103fb47","kind":"commit","published_at":"2022-10-30T22:04:30.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.92","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.92","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.92","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.92/manifests"},{"name":"v0.0.91","sha":"f84c1f1fa161dd65cc4101f326d74b00e677fe8f","kind":"commit","published_at":"2022-10-29T22:49:26.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.91","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.91","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.91","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.91/manifests"},{"name":"v0.0.90","sha":"5a3f06bab10491f5b749463fc13765b6586d4b89","kind":"commit","published_at":"2022-10-29T22:34:38.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.90","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.90","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.90","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.90/manifests"},{"name":"v0.0.89","sha":"934db3d179a98d3064dec42e80fdea9f4ca17d63","kind":"commit","published_at":"2022-10-29T19:39:17.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.89","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.89","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.89","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.89/manifests"},{"name":"v0.0.88","sha":"ae5ad6a4acaaa78ce6b5e7ab70be6de0351f9373","kind":"commit","published_at":"2022-10-28T23:11:04.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.88","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.88","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.88","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.88/manifests"},{"name":"v0.0.87","sha":"9a799eb4e6ffc44b7aa07de2c429262cc192d938","kind":"commit","published_at":"2022-10-28T23:00:03.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.87","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.87","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.87","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.87/manifests"},{"name":"v0.0.86","sha":"3f20cea402fd7692dff6eccd41681902951f41f8","kind":"commit","published_at":"2022-10-27T17:09:57.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.86","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.86","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.86","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.86/manifests"},{"name":"v0.0.85","sha":"05fbd1a283d2de1b12a003f569e81b9b547724e0","kind":"commit","published_at":"2022-10-26T23:13:04.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.85","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.85","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.85","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.85/manifests"},{"name":"v0.0.84","sha":"a9bcc1579723594cc62ecdfc37970302a760bc18","kind":"commit","published_at":"2022-10-26T16:01:55.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.84","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.84","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.84","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.84/manifests"},{"name":"v0.0.83","sha":"db3c847771364dc592019d80c11518fa3121e951","kind":"commit","published_at":"2022-10-26T01:24:13.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.83","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.83","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.83","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.83/manifests"},{"name":"v0.0.82","sha":"c72b8e8d1e15189cc6ea2879a8d8739730373acc","kind":"commit","published_at":"2022-10-21T16:15:19.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.82","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.82","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.82","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.82/manifests"},{"name":"v0.0.81","sha":"e53b9807f6817cd6c00e920f2da3b9ca0fef3b2c","kind":"commit","published_at":"2022-10-18T01:43:49.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.81","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.81","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.81","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.81/manifests"},{"name":"v0.0.80","sha":"659a28de02713e2b0973d7d6ee3c1adfa781519e","kind":"commit","published_at":"2022-10-17T21:02:44.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.80","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.80","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.80","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.80/manifests"},{"name":"v0.0.79","sha":"cf0d19836569791ba6384d94b26e0aee577cffd4","kind":"commit","published_at":"2022-10-17T01:39:01.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.79","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.79","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.79","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.79/manifests"},{"name":"v0.0.78","sha":"6ee30758676e592894e53248edfeafe502db8651","kind":"commit","published_at":"2022-10-17T01:28:25.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.78","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.78","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.78","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.78/manifests"},{"name":"v0.0.77","sha":"56f69ce71eb0dacd55ccd871f79c5c7f6bf1c254","kind":"commit","published_at":"2022-10-16T17:43:52.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.77","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.77","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.77","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.77/manifests"},{"name":"v0.0.76","sha":"e2aedc5ba83883cdf1b9caae6b593b3d0c744704","kind":"commit","published_at":"2022-10-15T21:22:12.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.76","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.76","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.76","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.76/manifests"},{"name":"v0.0.75","sha":"3e8ef5b40fa189ce151bde70d80bab2e24372900","kind":"commit","published_at":"2022-10-14T18:42:57.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.75","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.75","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.75","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.75/manifests"},{"name":"v0.0.74","sha":"6a8e31b2ff8bfd03afdfb39f9c146423697cef58","kind":"commit","published_at":"2022-10-14T16:36:44.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.74","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.74","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.74","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.74/manifests"},{"name":"v0.0.73","sha":"3e28d6de04161c2c99ae3996ebec979ccac456a9","kind":"commit","published_at":"2022-10-14T14:18:42.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.73","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.73","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.73","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.73/manifests"},{"name":"v0.0.72","sha":"46e1b16472bf150106b05f7beda6c8e98f60e059","kind":"commit","published_at":"2022-10-13T02:43:29.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.72","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.72","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.72","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.72/manifests"},{"name":"v0.0.71","sha":"2f69be0d412a15e9b6aa0b8b48e7956ba6ffdf5d","kind":"commit","published_at":"2022-10-12T21:14:28.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.71","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.71","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.71","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.71/manifests"},{"name":"v0.0.70","sha":"e08e1caf71a308c6108706bd169149a3e7d6433a","kind":"commit","published_at":"2022-10-12T16:59:14.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.70","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.70","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.70","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.70/manifests"},{"name":"v0.0.69","sha":"71802f8861e71865bfa4d13b1e8f3aca8ed61db9","kind":"commit","published_at":"2022-10-11T16:54:56.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.69","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.69","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.69","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.69/manifests"},{"name":"v0.0.68","sha":"4730911b25c1c147054f24cb97628ce8bfec4473","kind":"commit","published_at":"2022-10-10T20:50:09.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.68","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.68","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.68","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.68/manifests"},{"name":"v0.0.67","sha":"e1b711d9c696aa6435cd85bb154e9f76343cf8c5","kind":"commit","published_at":"2022-10-10T16:55:04.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.67","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.67","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.67","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.67/manifests"},{"name":"v0.0.66","sha":"5a06fb28fd91f96b58266a0529407072692563a7","kind":"commit","published_at":"2022-10-10T14:03:59.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.66","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.66","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.66","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.66/manifests"},{"name":"v0.0.65","sha":"2774194b039112507fca2c29bb6c6b851d04f22e","kind":"commit","published_at":"2022-10-10T02:14:04.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.65","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.65","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.65","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.65/manifests"},{"name":"v0.0.64","sha":"10b250ee5738215ebb8a59888919df521d992bd3","kind":"commit","published_at":"2022-10-09T21:38:09.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.64","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.64","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.64","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.64/manifests"},{"name":"v0.0.63","sha":"129e2b6ad3c709c3be7e626bf71d411f1fedce61","kind":"commit","published_at":"2022-10-09T02:51:49.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.63","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.63","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.63","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.63/manifests"},{"name":"v0.0.62","sha":"e1abe37c6a2a15ff30a6391ab3c34e5698d72645","kind":"commit","published_at":"2022-10-09T00:28:38.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.62","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.62","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.62","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.62/manifests"},{"name":"v0.0.61","sha":"c62727db42d2af328fee50b1e5a1ebb9a609a848","kind":"commit","published_at":"2022-10-08T21:25:36.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.61","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.61","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.61","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.61/manifests"},{"name":"v0.0.60","sha":"dd496c7b5217327d97255558e6219f6e8093baab","kind":"commit","published_at":"2022-10-07T21:36:33.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.60","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.60","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.60","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.60/manifests"},{"name":"v0.0.59","sha":"46457882054cf7bc1a8eb2fd1acb7d46a5d31d2a","kind":"commit","published_at":"2022-10-07T18:55:23.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.59","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.59","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.59","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.59/manifests"},{"name":"v0.0.58","sha":"f17d3b3c44e6be21b68d5a9190ea912ab4f06417","kind":"commit","published_at":"2022-10-07T16:14:03.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.58","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.58","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.58","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.58/manifests"},{"name":"v0.0.57","sha":"82cc139d2d19c6128204cb9ea137fae0e26d9605","kind":"commit","published_at":"2022-10-06T13:16:56.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.57","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.57","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.57","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.57/manifests"},{"name":"v0.0.56","sha":"aba01745f58fdf6fddf4032dd85ed22ba9ec368d","kind":"commit","published_at":"2022-10-05T15:58:54.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.56","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.56","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.56","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.56/manifests"},{"name":"v0.0.55","sha":"9b564c9cf45b76e7c08198370430a3a9aaf5102c","kind":"commit","published_at":"2022-10-05T00:07:31.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.55","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.55","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.55","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.55/manifests"},{"name":"v0.0.54","sha":"03e1397427a52e74e5d5c90bc18e349c988d9755","kind":"commit","published_at":"2022-10-04T18:32:06.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.54","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.54","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.54","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.54/manifests"},{"name":"v0.0.53","sha":"406491a3a26ebd90fbeea7e4232e43d8b7476215","kind":"commit","published_at":"2022-10-04T12:56:46.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.53","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.53","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.53","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.53/manifests"},{"name":"v0.0.52","sha":"31a0b2027183f8ee21f08e8e524586e4d6559c94","kind":"commit","published_at":"2022-10-03T19:22:58.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.52","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.52","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.52","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.52/manifests"},{"name":"v0.0.51","sha":"64d8e255289126e433e12693a1a92ba113460c2f","kind":"commit","published_at":"2022-10-03T18:08:39.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.51","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.51","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.51","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.51/manifests"},{"name":"v0.0.50","sha":"4819e19ba2316c42b721f3b48dbc2941150d6387","kind":"commit","published_at":"2022-10-03T00:43:30.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.50","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.50","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.50","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.50/manifests"},{"name":"v0.0.49","sha":"1e36c109c6c6f9e27b1377e75dcd6670c722bbd1","kind":"commit","published_at":"2022-09-30T13:15:32.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.49","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.49","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.49","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.49/manifests"},{"name":"v0.0.48","sha":"6fef4db433e8b160366ab86059013be28a56fb3d","kind":"commit","published_at":"2022-09-29T20:40:01.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.48","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.48","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.48","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.48/manifests"},{"name":"v0.0.47","sha":"c7349b69c12b7511d48fc45390eac8d7282062a5","kind":"commit","published_at":"2022-09-29T02:30:48.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.47","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.47","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.47","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.47/manifests"},{"name":"v0.0.46","sha":"949e4d407769f4644dc1a5a04dcbb69c344091dc","kind":"commit","published_at":"2022-09-24T17:10:10.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.46","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.46","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.46","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.46/manifests"},{"name":"v0.0.45","sha":"b8f517c70ea35bf8d518326ad2d448218f81c3cf","kind":"commit","published_at":"2022-09-22T18:11:09.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.45","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.45","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.45","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.45/manifests"},{"name":"v0.0.44","sha":"36fcfad56ab70b613740115065e72dd95db14e5b","kind":"commit","published_at":"2022-09-21T17:44:49.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.44","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.44","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.44","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.44/manifests"},{"name":"v0.0.43","sha":"e4f571ea6166c2172f0c3d69bb3ef3c8f91e2f9f","kind":"commit","published_at":"2022-09-20T16:26:49.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.43","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.43","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.43","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.43/manifests"},{"name":"v0.0.42","sha":"f53c4fc22183a7f48127cf16057a7ab748f29351","kind":"commit","published_at":"2022-09-20T03:14:17.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.42","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.42","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.42","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.42/manifests"},{"name":"v0.0.41","sha":"27cc7e236c70bed8bba48c48bd440e7e4277683c","kind":"commit","published_at":"2022-09-20T03:06:39.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.41","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.41","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.41","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.41/manifests"},{"name":"v0.0.40","sha":"3937885f3723d847a2b5b04bcaef3da0bf0d57ff","kind":"commit","published_at":"2022-09-16T08:57:21.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.40","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.40","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.40","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.40/manifests"},{"name":"v0.0.39","sha":"06e5b3e457e1c48e34490bab6e73cb718367faeb","kind":"commit","published_at":"2022-09-16T01:41:14.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.39","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.39","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.39","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.39/manifests"},{"name":"v0.0.38","sha":"a2df89dedd4c08dbd22bb5eb701f44b116564e0e","kind":"commit","published_at":"2022-09-15T02:38:42.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.38","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.38","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.38","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.38/manifests"},{"name":"v0.0.37","sha":"5f77b420cd5310149134c193247811b93335f687","kind":"commit","published_at":"2022-09-13T01:35:08.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.37","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.37","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.37","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.37/manifests"},{"name":"v0.0.36","sha":"062d7081a0a84531dadf70acc2f75776ccce0027","kind":"commit","published_at":"2022-09-12T15:16:26.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.36","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.36","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.36","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.36/manifests"},{"name":"v0.0.35","sha":"546be5692addaef7209b96d50f6734457ba0c719","kind":"commit","published_at":"2022-09-12T01:54:00.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.35","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.35","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.35","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.35/manifests"},{"name":"v0.0.34","sha":"5f4a62aa4089043f871d93deb85c10988b8ed353","kind":"commit","published_at":"2022-09-11T22:05:52.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.34","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.34","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.34","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.34/manifests"},{"name":"v0.0.33","sha":"81ae3bfc948a1f73c1f8989ad18f7dee0fe84da9","kind":"commit","published_at":"2022-09-11T14:45:02.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.33","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.33","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.33","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.33/manifests"},{"name":"v0.0.32","sha":"8698c06c36944374d69eb2b5bdb90a13aa5bc89e","kind":"commit","published_at":"2022-09-10T19:21:01.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.32","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.32","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.32","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.32/manifests"},{"name":"v0.0.31","sha":"4fc68e0310d99e1ed778e4fad13739e5b532f7d8","kind":"commit","published_at":"2022-09-10T17:05:15.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.31","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.31","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.31","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.31/manifests"},{"name":"v0.0.30","sha":"7c17785eac647872c1c16bb8516c59c2d74e5e15","kind":"commit","published_at":"2022-09-08T15:42:45.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.30","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.30","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.30","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.30/manifests"},{"name":"v0.0.29","sha":"55d1f34bae2edf951ae64955c824c8210bb8c55e","kind":"commit","published_at":"2022-09-07T02:14:12.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.29","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.29","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.29","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.29/manifests"},{"name":"v0.0.28","sha":"b44d6c2c44c101e3e64853843a2a6345117d7d48","kind":"commit","published_at":"2022-09-06T18:20:02.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.28","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.28","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.28","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.28/manifests"},{"name":"v0.0.27","sha":"c1eeae90f1b2c627744fde3d890fd871b39874e4","kind":"commit","published_at":"2022-09-06T14:23:48.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.27","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.27","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.27","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.27/manifests"},{"name":"v0.0.26","sha":"45db571935ac018b46bcb8f4ee2089cdf742bf1a","kind":"commit","published_at":"2022-09-05T16:28:27.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.26","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.26","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.26","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.26/manifests"},{"name":"v0.0.25","sha":"4319bd17554e0dd0f8de1dbbebd706bc7adf236e","kind":"commit","published_at":"2022-09-03T16:09:11.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.25","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.25","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.25","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.25/manifests"},{"name":"v0.0.24","sha":"26e1f4b6df3a861e0565a8c327e46c21a46c0a91","kind":"commit","published_at":"2022-09-02T14:18:40.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.24","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.24","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.24","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.24/manifests"},{"name":"v0.0.23","sha":"ba27e50164219772097eae003089ea2789ca13b9","kind":"commit","published_at":"2022-09-01T13:21:43.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.23","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.23","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.23","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.23/manifests"},{"name":"v0.0.22","sha":"64df4eb311d00903740f1d680d1e1c605182174c","kind":"commit","published_at":"2022-08-31T23:12:31.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.22","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.22","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.22","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.22/manifests"},{"name":"v0.0.21","sha":"556ae000788032cbf8db7ca4d7246c52fe98052a","kind":"commit","published_at":"2022-08-31T15:25:46.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.21","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.21","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.21","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.21/manifests"},{"name":"v0.0.20","sha":"1e67ce229fa70a268b7d1ca42a9cc3588941fa17","kind":"commit","published_at":"2022-08-30T18:41:28.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.20","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.20","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.20","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.20/manifests"},{"name":"v0.0.19","sha":"5dd53dcf88f771c1722efbec49c396fbc6aa0fea","kind":"commit","published_at":"2022-08-30T02:01:26.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.19","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.19","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.19","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.19/manifests"},{"name":"v0.0.18","sha":"c766174c555cfa856b36746c782de26cbf36cbe6","kind":"commit","published_at":"2022-08-29T21:13:26.000Z","download_url":"https://codeload.github.com/astral-sh/ruff/tar.gz/v0.0.18","html_url":"https://github.com/astral-sh/ruff/releases/tag/v0.0.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astral-sh%2Fruff/tags/v0.0.18/manifests"}]},"repo_metadata_updated_at":"2023-12-23T19:43:03.069Z","dependent_packages_count":2931,"downloads":55932685,"downloads_period":"last-month","dependent_repos_count":5870,"rankings":{"downloads":0.07795204390259113,"dependent_repos_count":0.1250901033919227,"dependent_packages_count":0.016874324797737372,"stargazers_count":0.2281702179172314,"forks_count":2.2352977859785366,"docker_downloads_count":0.24614504215829952,"average":0.4882549196910531},"purl":"pkg:pypi/ruff","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/ruff","docker_dependents_count":250,"docker_downloads_count":841236859,"usage_url":"https://repos.ecosyste.ms/usage/pypi/ruff","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/ruff/dependencies","status":null,"funding_links":[],"critical":true,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/ruff/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/ruff/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/ruff/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/ruff/related_packages","maintainers":[{"uuid":"crmarsh","login":"crmarsh","name":null,"email":null,"url":null,"packages_count":13,"html_url":"https://pypi.org/user/crmarsh/","role":null,"created_at":"2022-11-16T03:40:01.424Z","updated_at":"2022-11-16T03:40:01.424Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/crmarsh/packages"},{"uuid":"zanie","login":"zanie","name":null,"email":null,"url":null,"packages_count":9,"html_url":"https://pypi.org/user/zanie/","role":null,"created_at":"2024-08-22T14:06:07.118Z","updated_at":"2024-08-22T14:06:07.118Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/zanie/packages"},{"uuid":"astral-bot","login":"astral-bot","name":null,"email":null,"url":null,"packages_count":10,"html_url":"https://pypi.org/user/astral-bot/","role":null,"created_at":"2024-08-22T14:06:06.900Z","updated_at":"2024-08-22T14:06:06.900Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/astral-bot/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":690322,"maintainers_count":292759,"namespaces_count":0,"keywords_count":228590,"github":"pypi","metadata":{"funded_packages_count":48950},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2025-06-06T05:32:09.692Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}},"unique_repositories_count":7130,"unique_repositories_count_past_30_days":150,"recent_issues":[{"uuid":"4926034338","node_id":"PR_kwDOTHoTgc7zsgH6","number":52,"state":"open","title":"build(deps): bump the python-minor-patch group across 1 directory with 22 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-20T05:22:39.000Z","updated_at":"2026-07-20T05:22:40.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python-minor-patch","update_count":22,"packages":[{"name":"fastapi","old_version":"0.139.0","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.50.0","new_version":"0.51.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"hatchet-sdk","old_version":"1.33.15","new_version":"1.35.0"},{"name":"anthropic","old_version":"0.116.0","new_version":"0.117.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"openai","old_version":"2.44.0","new_version":"2.46.0","repository_url":"https://github.com/openai/openai-python"},{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"anyio","old_version":"4.14.1","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"click","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"grpcio","old_version":"1.81.1","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"grpcio-tools","old_version":"1.81.1","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"joserfc","old_version":"1.7.2","new_version":"1.7.4","repository_url":"https://github.com/authlib/joserfc"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.69.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"websockets","old_version":"16.0","new_version":"16.1.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"yarl","old_version":"1.24.2","new_version":"1.24.5","repository_url":"https://github.com/aio-libs/yarl"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.7","new_version":"3.31.1","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"platformdirs","old_version":"4.10.0","new_version":"4.10.1","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pypdf","old_version":"6.13.3","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"browser-use","old_version":"0.13.3","new_version":"0.13.6","repository_url":"https://github.com/browser-use/browser-use"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 22 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.139.0` | `0.139.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.50.0` | `0.51.0` |\n| hatchet-sdk | `1.33.15` | `1.35.0` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.116.0` | `0.117.0` |\n| [openai](https://github.com/openai/openai-python) | `2.44.0` | `2.46.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.15.22` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.1` | `4.14.2` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.2` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.1` | `1.82.1` |\n| [grpcio-tools](https://github.com/grpc/grpc) | `1.81.1` | `1.82.1` |\n| [joserfc](https://github.com/authlib/joserfc) | `1.7.2` | `1.7.4` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.69.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `16.0` | `16.1.1` |\n| [yarl](https://github.com/aio-libs/yarl) | `1.24.2` | `1.24.5` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.2` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.7` | `3.31.1` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.10.0` | `4.10.1` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.3` | `6.14.2` |\n| [browser-use](https://github.com/browser-use/browser-use) | `0.13.3` | `0.13.6` |\n\n\nUpdates `fastapi` from 0.139.0 to 0.139.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.139.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16013\"\u003e#16013\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.139.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16011\"\u003e#16011\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being applied. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15995\"\u003e#15995\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16005\"\u003e#16005\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15996\"\u003e#15996\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16006\"\u003e#16006\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15999\"\u003e#15999\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16004\"\u003e#16004\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16001\"\u003e#16001\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16003\"\u003e#16003\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15998\"\u003e#15998\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16000\"\u003e#16000\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15997\"\u003e#15997\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16002\"\u003e#16002\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15990\"\u003e#15990\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15925\"\u003e#15925\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15797\"\u003e#15797\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update \u003ccode\u003ellm-prompt.md\u003c/code\u003e for Hindi. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15810\"\u003e#15810\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix language-specific translation prompt for Russian language. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15924\"\u003e#15924\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15981\"\u003e#15981\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15982\"\u003e#15982\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15983\"\u003e#15983\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15985\"\u003e#15985\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use \u003ccode\u003eFASTAPI_LATEST_CHANGES\u003c/code\u003e token in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15984\"\u003e#15984\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15873\"\u003e#15873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15874\"\u003e#15874\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15950\"\u003e#15950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15952\"\u003e#15952\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: add TutorCruncher. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15947\"\u003e#15947\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix notify translations checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15933\"\u003e#15933\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15932\"\u003e#15932\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove RapidProxy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15929\"\u003e#15929\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15928\"\u003e#15928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15926\"\u003e#15926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/866b7a3d0ce1025a3811f23aea4846d01a2b16a8\"\u003e\u003ccode\u003e866b7a3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16014\"\u003e#16014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b3effea754619f0c305af576be23a51865292a3\"\u003e\u003ccode\u003e7b3effe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7fe315c21afb8a57a2b559772e0f7ced7e5d071a\"\u003e\u003ccode\u003e7fe315c\u003c/code\u003e\u003c/a\u003e 🐛 Refactor router route building to make it thread-safe, mainly relevant for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c48e67b1ce9c03fc9bd4b1ac72350e51ad5a6e8a\"\u003e\u003ccode\u003ec48e67b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16012\"\u003e#16012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2acc4fbf155caf016e3bd2602c0d2ec52723e635\"\u003e\u003ccode\u003e2acc4fb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/eb75fd078e83aed935016bcdf0705cd58bbf0d0e\"\u003e\u003ccode\u003eeb75fd0\u003c/code\u003e\u003c/a\u003e 🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16011\"\u003e#16011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9b8410bdc9fa1fd679ea7e65b926535c7045ab87\"\u003e\u003ccode\u003e9b8410b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e24d44cce4092a33b64e9536e96e7608a7dcb9b8\"\u003e\u003ccode\u003ee24d44c\u003c/code\u003e\u003c/a\u003e 📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being ap...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/93b78f8646dea4543cc4d938f7e29b8547749a99\"\u003e\u003ccode\u003e93b78f8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b959b443577c5f2b870cdef13219b98aa32f8943\"\u003e\u003ccode\u003eb959b44\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.139.0...0.139.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.50.0 to 0.51.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.51.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers with overlap on SIGHUP for near-zero-downtime reloads by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3025\"\u003eKludex/uvicorn#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove colorama from the standard extra by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3027\"\u003eKludex/uvicorn#3027\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansio implementation by \u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.51.0 (July 8, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers one at a time on \u003ccode\u003eSIGHUP\u003c/code\u003e, bringing each replacement up before retiring the old worker, so reloads no longer drop requests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003ecolorama\u003c/code\u003e from the \u003ccode\u003estandard\u003c/code\u003e extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.2 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ewebsockets\u0026gt;=13.0\u003c/code\u003e, which the default \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation needs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.1 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3019\"\u003e#3019\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e4d0b05eb8c6459b7ba27ad13a2c2f4f8d4ece50\"\u003e\u003ccode\u003ee4d0b05\u003c/code\u003e\u003c/a\u003e Version 0.51.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3028\"\u003e#3028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/944e43ddbf715aea7c587f2738cd94c3f9106110\"\u003e\u003ccode\u003e944e43d\u003c/code\u003e\u003c/a\u003e Remove colorama from the standard extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2e787704f2610133059e76d56bbd60f48edd34a3\"\u003e\u003ccode\u003e2e78770\u003c/code\u003e\u003c/a\u003e Restart workers with overlap on SIGHUP for near-zero-downtime reloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a1b570cf577d512bfd396b64d72313233e9c3325\"\u003e\u003ccode\u003ea1b570c\u003c/code\u003e\u003c/a\u003e Version 0.50.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3022\"\u003e#3022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/83c7da7332ac3100171c258071de40d5dde35e13\"\u003e\u003ccode\u003e83c7da7\u003c/code\u003e\u003c/a\u003e Require websockets\u0026gt;=13.0 for the default sansio implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b4d011668a75d02370353f34de6dea59692dcad2\"\u003e\u003ccode\u003eb4d0116\u003c/code\u003e\u003c/a\u003e Version 0.50.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3020\"\u003e#3020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2a9151d0e763df2c56da2bfe8c5dcead4fe5a276\"\u003e\u003ccode\u003e2a9151d\u003c/code\u003e\u003c/a\u003e Split comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1bf3ab42e3aba1cf4acd1ef0c29d8ad9a599d333\"\u003e\u003ccode\u003e1bf3ab4\u003c/code\u003e\u003c/a\u003e Cover the excluded-directory branch in \u003ccode\u003eFileFilter\u003c/code\u003e with a direct test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3014\"\u003e#3014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/837b5f960dbe2f03e9f12feb9955ce2217211ad8\"\u003e\u003ccode\u003e837b5f9\u003c/code\u003e\u003c/a\u003e Deflake multiprocess, reload, and signal supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2975\"\u003e#2975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.51.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hatchet-sdk` from 1.33.15 to 1.35.0\n\nUpdates `anthropic` from 0.116.0 to 0.117.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.117.0\u003c/h2\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for dreaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/642eee707b0fe3c35c21917f60b06846b2a3b291\"\u003e642eee7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for MCP Tunnels (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d716df6edb1df7de25f1b5e14dcab33b9aafc2ff\"\u003ed716df6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ecredentials:\u003c/strong\u003e keep credential material out of traceback frame locals via SecretStr (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/aa93a4dbf383f7fdab1404c136e86d4679d644c1\"\u003eaa93a4d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates to field descriptions (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/75d8dcc0ac8cb381fa327a61a9ac84022b3a1677\"\u003e75d8dcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model example (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a57e30ac1bafb54387bf631be2081bfdb3782911\"\u003ea57e30a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e updates to descriptions and examples (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e1535b6919441448dddf00e2636cb8c60a721a43\"\u003ee1535b6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for dreaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/642eee707b0fe3c35c21917f60b06846b2a3b291\"\u003e642eee7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for MCP Tunnels (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d716df6edb1df7de25f1b5e14dcab33b9aafc2ff\"\u003ed716df6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ecredentials:\u003c/strong\u003e keep credential material out of traceback frame locals via SecretStr (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/aa93a4dbf383f7fdab1404c136e86d4679d644c1\"\u003eaa93a4d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates to field descriptions (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/75d8dcc0ac8cb381fa327a61a9ac84022b3a1677\"\u003e75d8dcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model example (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a57e30ac1bafb54387bf631be2081bfdb3782911\"\u003ea57e30a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e updates to descriptions and examples (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e1535b6919441448dddf00e2636cb8c60a721a43\"\u003ee1535b6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/3c8bdf14bc55377262f11d6c34b893834a02b3fc\"\u003e\u003ccode\u003e3c8bdf1\u003c/code\u003e\u003c/a\u003e release: 0.117.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/db820820aba78e8af45d0a02afc3948006ab6021\"\u003e\u003ccode\u003edb82082\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/bc2f6e4a7a53ac362d3dce04d2d7cf044403bf81\"\u003e\u003ccode\u003ebc2f6e4\u003c/code\u003e\u003c/a\u003e feat(api): add support for MCP Tunnels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/3541444ba348e95162081f1a45877478a7d90fa7\"\u003e\u003ccode\u003e3541444\u003c/code\u003e\u003c/a\u003e test(beta): cover parse() header merging with caller extra_headers (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/242\"\u003e#242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/824de14e5be54d4fe268d52ed8fd3c00cb909be2\"\u003e\u003ccode\u003e824de14\u003c/code\u003e\u003c/a\u003e feat(api): add support for dreaming\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/26ce65ac3f7530e092a56f5557b4ed703d592964\"\u003e\u003ccode\u003e26ce65a\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/6d9ee332c38335cb1d1d5d2669d57b351b917770\"\u003e\u003ccode\u003e6d9ee33\u003c/code\u003e\u003c/a\u003e chore(docs): update model example\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c7ee42192bcbfbd7659777dd6ba5efa7be8407fb\"\u003e\u003ccode\u003ec7ee421\u003c/code\u003e\u003c/a\u003e Block ask-gated session tool calls until user confirmation (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/16\"\u003e#16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/97b130e6f0b695a961795211d9a7458af9455fb2\"\u003e\u003ccode\u003e97b130e\u003c/code\u003e\u003c/a\u003e chore(docs): updates to descriptions and examples\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fb1e755153df78b8b5691b3e42380b7409144536\"\u003e\u003ccode\u003efb1e755\u003c/code\u003e\u003c/a\u003e fix(credentials): keep credential material out of traceback frame locals via ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.44.0 to 2.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.46.0\u003c/h2\u003e\n\u003ch2\u003e2.46.0 (2026-07-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.45.0...v2.46.0\"\u003ev2.45.0...v2.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e /organization/projects/{project_id}/service_accounts/{service_account_id}/api_keys\u0026quot; endpoint (\u003ca href=\"https://github.com/openai/openai-python/commit/5a0094194eac9c605c8ca84d47d1c5518f8e2131\"\u003e5a00941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add owner_project_access to APIKeyListParams (\u003ca href=\"https://github.com/openai/openai-python/commit/f589d04bf9f377ecb1f54335ab3ab9d825b5dfee\"\u003ef589d04\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/980f176e83ee5d991bf9e8e4def80d9905ade5ec\"\u003e980f176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/2eae984315580cdbf9ceb14d6cb568c581baa768\"\u003e2eae984\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e preserve generated type compatibility (\u003ca href=\"https://github.com/openai/openai-python/commit/00bd72adbe03f4b5c4b89d91b8d317f11b58bbdf\"\u003e00bd72a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e remove beta annotation compatibility aliases (\u003ca href=\"https://github.com/openai/openai-python/commit/99dbd15ff3ad1628b94a729a6b688212d4655908\"\u003e99dbd15\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.45.0\u003c/h2\u003e\n\u003ch2\u003e2.45.0 (2026-07-09)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.45.0\"\u003ev2.44.0...v2.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e gpt-5.6-sol updates (\u003ca href=\"https://github.com/openai/openai-python/commit/039d1feb264a2dca7195ba5028e9fb47a5e04987\"\u003e039d1fe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore beta resource accessors (\u003ca href=\"https://github.com/openai/openai-python/commit/2dfc130b8f0fdb0049e075aac21aaef29482b4e3\"\u003e2dfc130\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/7b61351b014bb6ca4623ff6cce7f32f45038a92e\"\u003e7b61351\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.46.0 (2026-07-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.45.0...v2.46.0\"\u003ev2.45.0...v2.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e /organization/projects/{project_id}/service_accounts/{service_account_id}/api_keys\u0026quot; endpoint (\u003ca href=\"https://github.com/openai/openai-python/commit/5a0094194eac9c605c8ca84d47d1c5518f8e2131\"\u003e5a00941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add owner_project_access to APIKeyListParams (\u003ca href=\"https://github.com/openai/openai-python/commit/f589d04bf9f377ecb1f54335ab3ab9d825b5dfee\"\u003ef589d04\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/980f176e83ee5d991bf9e8e4def80d9905ade5ec\"\u003e980f176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/2eae984315580cdbf9ceb14d6cb568c581baa768\"\u003e2eae984\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e preserve generated type compatibility (\u003ca href=\"https://github.com/openai/openai-python/commit/00bd72adbe03f4b5c4b89d91b8d317f11b58bbdf\"\u003e00bd72a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e remove beta annotation compatibility aliases (\u003ca href=\"https://github.com/openai/openai-python/commit/99dbd15ff3ad1628b94a729a6b688212d4655908\"\u003e99dbd15\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.45.0 (2026-07-09)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.45.0\"\u003ev2.44.0...v2.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e gpt-5.6-sol updates (\u003ca href=\"https://github.com/openai/openai-python/commit/039d1feb264a2dca7195ba5028e9fb47a5e04987\"\u003e039d1fe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore beta resource accessors (\u003ca href=\"https://github.com/openai/openai-python/commit/2dfc130b8f0fdb0049e075aac21aaef29482b4e3\"\u003e2dfc130\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/7b61351b014bb6ca4623ff6cce7f32f45038a92e\"\u003e7b61351\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/0e6adb15adc1e74087bcb402de7a75e4fbc0aecb\"\u003e\u003ccode\u003e0e6adb1\u003c/code\u003e\u003c/a\u003e release: 2.46.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3501\"\u003e#3501\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/f16fbbd2bd25dc1ff150b5f78dbd15ff6bab6d91\"\u003e\u003ccode\u003ef16fbbd\u003c/code\u003e\u003c/a\u003e release: 2.45.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3478\"\u003e#3478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.21 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch3\u003ePackaging changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer provide mypyc-accelerated wheels for macOS x86_64 [mypyc-wheels \u003ca href=\"https://redirect.github.com/python/mypy/issues/119\"\u003e#119\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/mypyc/mypy_mypyc-wheels/pull/119\"\u003emypyc/mypy_mypyc-wheels#119\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.1 to 4.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged \u003ccode\u003eByteReceiveStream.receive()\u003c/code\u003e implementations to raise a \u003ccode\u003eValueError\u003c/code\u003e when \u003ccode\u003emax_bytes\u003c/code\u003e is not a positive integer (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1191\"\u003e#1191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting \u003ccode\u003efloat(\u0026quot;inf\u0026quot;)\u003c/code\u003e when the limiter was instantiated outside of an event loop. The adapter setter checked for infinity by identity (\u003ccode\u003evalue is math.inf\u003c/code\u003e), so only the exact \u003ccode\u003emath.inf\u003c/code\u003e singleton was accepted, while every backend setter (using \u003ccode\u003emath.isinf()\u003c/code\u003e) accepts any positive infinity (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1189\"\u003e#1189\u003c/a\u003e; PR by \u003ca href=\"https://github.com/greymoth-jp\"\u003e\u003ccode\u003e@​greymoth-jp\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eto_process.run_sync()\u003c/code\u003e deadlocking when the worker function writes enough data to \u003ccode\u003esys.stderr\u003c/code\u003e to fill the (undrained) pipe buffer. The worker process now redirects \u003ccode\u003esys.stderr\u003c/code\u003e to \u003ccode\u003eos.devnull\u003c/code\u003e as well, matching the documented behavior\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eTLSStream.wrap()\u003c/code\u003e matching an internationalized (unicode) host name against the peer certificate using IDNA 2003 (via the standard library) instead of IDNA 2008, which could cause the host name to be matched against the wrong certificate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.open_process()\u003c/code\u003e (and \u003ccode\u003erun_process()\u003c/code\u003e) ignoring the \u003ccode\u003eextra_groups\u003c/code\u003e argument, as it mistakenly passed the value of the \u003ccode\u003egroup\u003c/code\u003e argument instead (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1209\"\u003e#1209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.acquire_nowait()\u003c/code\u003e and \u003ccode\u003eCapacityLimiter.acquire_nowait_on_behalf_of()\u003c/code\u003e raising \u003ccode\u003etrio.WouldBlock\u003c/code\u003e instead of \u003ccode\u003eanyio.WouldBlock\u003c/code\u003e on the \u003ccode\u003etrio\u003c/code\u003e backend when there are no tokens available (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1218\"\u003e#1218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens (\u003ccode\u003eborrowed_tokens\u003c/code\u003e exceeding \u003ccode\u003etotal_tokens\u003c/code\u003e and \u003ccode\u003eavailable_tokens\u003c/code\u003e going negative) when a non-blocking acquire was made in the window between a token being released and the notified waiter resuming. The freed token is now reserved for the woken waiter right away, so the non-blocking acquire correctly raises \u003ccode\u003eWouldBlock\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1170\"\u003e#1170\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed unnecessary CPU spin when delivering cancellation from \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio under certain conditions, including improper cancel scope nesting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1111\"\u003e#1111\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/c384f99687c64c59ed8a11c3a0f11a2d57daff71\"\u003e\u003ccode\u003ec384f99\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/dbba29d1ade7936f18fb71ba24aa92978673482a\"\u003e\u003ccode\u003edbba29d\u003c/code\u003e\u003c/a\u003e Fixed 100% CPU spin on cancel scope misuse (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1217\"\u003e#1217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6bbc6c33caabc13af5bc4256f745027cf8d5d7b8\"\u003e\u003ccode\u003e6bbc6c3\u003c/code\u003e\u003c/a\u003e Fix CapacityLimiter over-granting tokens on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1172\"\u003e#1172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f82b2537cbbe98f3df3f295499056ab7de0b15b\"\u003e\u003ccode\u003e6f82b25\u003c/code\u003e\u003c/a\u003e Refactored TestTLSStream.test_receive_invalid_max_bytes() to be less flaky\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/be24b0414f67f604bcbdd5ea3bcc56ab920d872e\"\u003e\u003ccode\u003ebe24b04\u003c/code\u003e\u003c/a\u003e Relaxed timeouts to fix test flakiness\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/81135065749b4f60c06619b9caaf0a11871c1ddf\"\u003e\u003ccode\u003e8113506\u003c/code\u003e\u003c/a\u003e Fix test flakiness caused by slow callback duration logging\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1e988b617b69588e33fecb75e36a9837245f562f\"\u003e\u003ccode\u003e1e988b6\u003c/code\u003e\u003c/a\u003e Fixed CapacityLimiter raising trio.WouldBlock instead of anyio.WouldBlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44713f345cd29dd4e7d76553c134543a1296cc62\"\u003e\u003ccode\u003e44713f3\u003c/code\u003e\u003c/a\u003e Pin setup-uv to a commit sha across downstream jobs (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1213\"\u003e#1213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f1b7301c8264b0d2e8d24a5788fd29e93dea4040\"\u003e\u003ccode\u003ef1b7301\u003c/code\u003e\u003c/a\u003e Fixed stderr writes in a worker subprocess causing a deadlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1207\"\u003e#1207\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/212be93c2cf2c841e753e95e5e2c543ee7feca90\"\u003e\u003ccode\u003e212be93\u003c/code\u003e\u003c/a\u003e Fix flaky test_tcp_listener_same_port using a hardcoded port (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1206\"\u003e#1206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.1...4.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.3 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.1/\"\u003ehttps://pypi.org/project/click/8.4.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-1\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-1\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/32\"\u003ehttps://github.com/pallets/click/milestone/32\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type conversion again. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3458\"\u003e#3458\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3484\"\u003e#3484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3277\"\u003e#3277\u003c/a\u003e # 3466\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion result. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3015\"\u003e#3015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3487\"\u003e#3487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our [Version Support Policy][version] on our website.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-06-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by {pr}\u003ccode\u003e3126\u003c/code\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. {issue}\u003ccode\u003e3502\u003c/code\u003e\n{issue}\u003ccode\u003e3043\u003c/code\u003e {pr}\u003ccode\u003e3504\u003c/code\u003e {pr}\u003ccode\u003e3508\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. {pr}\u003ccode\u003e3509\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n{issue}\u003ccode\u003e3059\u003c/code\u003e {pr}\u003ccode\u003e3507\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. {issue}\u003ccode\u003e3242\u003c/code\u003e {issue}\u003ccode\u003e2542\u003c/code\u003e {pr}\u003ccode\u003e3534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from {pr}\u003ccode\u003e3482\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e\n{pr}\u003ccode\u003e3533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. {pr}\u003ccode\u003e3578\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. {issue}\u003ccode\u003e2331\u003c/code\u003e {issue}\u003ccode\u003e1884\u003c/code\u003e {issue}\u003ccode\u003e3125\u003c/code\u003e {pr}\u003ccode\u003e3582\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.4.1\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-21\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type\nconversion again. {issue}\u003ccode\u003e3458\u003c/code\u003e {pr}\u003ccode\u003e3484\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. {issue}\u003ccode\u003e3277\u003c/code\u003e {pr}\u003ccode\u003e3466\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eEnum\u003c/code\u003e values used as \u003ccode\u003eChoice\u003c/code\u003e options produces a\nvalid completion result. {issue}\u003ccode\u003e3015\u003c/code\u003e {pr}\u003ccode\u003e3471\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. {issue}\u003ccode\u003e3487\u003c/code\u003e {pr}\u003ccode\u003e3493\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e {pr}\u003ccode\u003e3482\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eopen_url\u003c/code\u003e on Windows when the file path contains spaces.\n{issue}\u003ccode\u003e2994\u003c/code\u003e {pr}\u003ccode\u003e3478\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.4.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-17\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e{class}\u003ccode\u003eParamType\u003c/code\u003e typing improvements. {pr}\u003ccode\u003e3371\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e{class}\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.3...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.81.1 to 1.82.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.82.1\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.82.1 (glacier).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Backport][v1.82.x][Python] Update lower bound for protobuf from 6.33.5 to 7.35.1 by \u003ca href=\"https://github.com/asheshvidyut\"\u003e\u003ccode\u003e@​asheshvidyut\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42920\"\u003egrpc/grpc#42920\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/grpc/grpc/compare/v1.82.0...v1.82.1\"\u003ehttps://github.com/grpc/grpc/compare/v1.82.0...v1.82.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease v1.82.0\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.82.0 (glacier).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\nThis is release 1.82.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003eglacier\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[call creds] Add support for looking up and attaching regional access boundary policy metadata. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41594\"\u003e#41594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnregister CFStream callbacks during endpoint shutdown. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42211\"\u003e#42211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix fd 0 incorrectly treated as invalid across POSIX socket code. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41764\"\u003e#41764\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xDS] enable new ORCA-to-LRS propagation behavior (gRFC A85). (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42411\"\u003e#42411\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[RetryFilter::LegacyCallData]: avoid tripping abseil nullopt assertion. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42405\"\u003e#42405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds] Implement A114: WRR support for custom backend metrics. (\u003ca...\n\n_Description has been truncated_","html_url":"https://github.com/wlilley93/boltrig/pull/52","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/wlilley93%2Fboltrig/issues/52","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/52/packages"},{"uuid":"4925226325","node_id":"PR_kwDOTH3Q487zp48d","number":5,"state":"open","title":"Bump the python-minor-patch group across 1 directory with 3 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-20T02:12:14.000Z","updated_at":"2026-07-20T02:12:15.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python-minor-patch","update_count":3,"packages":[{"name":"typer","old_version":"0.26.8","new_version":"0.27.0","repository_url":"https://github.com/fastapi/typer"},{"name":"import-linter","old_version":"2.12","new_version":"2.13","repository_url":"https://github.com/seddonym/import-linter"},{"name":"ruff","old_version":"0.15.20","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 3 updates in the / directory: [typer](https://github.com/fastapi/typer), [import-linter](https://github.com/seddonym/import-linter) and [ruff](https://github.com/astral-sh/ruff).\n\nUpdates `typer` from 0.26.8 to 0.27.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/releases\"\u003etyper's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.0\u003c/h2\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e💥 Update metavar printing. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1863\"\u003e#1863\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1896\"\u003e#1896\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Bump ty to 0.0.53. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1877\"\u003e#1877\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1897\"\u003e#1897\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1873\"\u003e#1873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1895\"\u003e#1895\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1872\"\u003e#1872\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1883\"\u003e#1883\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1880\"\u003e#1880\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1874\"\u003e#1874\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1876\"\u003e#1876\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1879\"\u003e#1879\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump \u003ca href=\"https://github.com/crate-ci/typos\"\u003ehttps://github.com/crate-ci/typos\u003c/a\u003e from v1.46.0 to 1.47.2 in the pre-commit group across 1 directory. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1834\"\u003e#1834\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pydantic-settings from 2.14.1 to 2.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1849\"\u003e#1849\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/blob/master/docs/release-notes.md\"\u003etyper's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.0 (2026-07-15)\u003c/h2\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e💥 Update metavar printing. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1863\"\u003e#1863\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1896\"\u003e#1896\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Bump ty to 0.0.53. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1877\"\u003e#1877\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1897\"\u003e#1897\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1873\"\u003e#1873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1895\"\u003e#1895\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1872\"\u003e#1872\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1883\"\u003e#1883\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1880\"\u003e#1880\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1874\"\u003e#1874\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1876\"\u003e#1876\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1879\"\u003e#1879\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump \u003ca href=\"https://github.com/crate-ci/typos\"\u003ehttps://github.com/crate-ci/typos\u003c/a\u003e from v1.46.0 to 1.47.2 in the pre-commit group across 1 directory. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1834\"\u003e#1834\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pydantic-settings from 2.14.1 to 2.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1849\"\u003e#1849\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/60af34b60ab2650a74af32c6ce340c5cfbceb3d8\"\u003e\u003ccode\u003e60af34b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.27.0 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1899\"\u003e#1899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/efaf4d52a8f133c81b1c64a4fcd74a87970f8236\"\u003e\u003ccode\u003eefaf4d5\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/42196d479eb3d12b6d7c5daf47f18bdb1dc25cf6\"\u003e\u003ccode\u003e42196d4\u003c/code\u003e\u003c/a\u003e 💥 Update metavar printing (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1863\"\u003e#1863\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/3a3bd0f20a417835d4b4505a0bf834620e024cdb\"\u003e\u003ccode\u003e3a3bd0f\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/fa6caa9c0a5f46da93a050f897ca0007080ffe88\"\u003e\u003ccode\u003efa6caa9\u003c/code\u003e\u003c/a\u003e ⬆ Bump the python-packages group across 1 directory with 5 updates (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1896\"\u003e#1896\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/35b8990323473791dcf1fc366829069b7c236c3c\"\u003e\u003ccode\u003e35b8990\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/5c7e904ef0b240c2d96a188a378b4de730909363\"\u003e\u003ccode\u003e5c7e904\u003c/code\u003e\u003c/a\u003e ⬆️ Bump ty to 0.0.53 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1877\"\u003e#1877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/91b19a0163e1b3d19fcd4d9efe753e026d900add\"\u003e\u003ccode\u003e91b19a0\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/4336118652f29c80ba5194b80479b06c77f39891\"\u003e\u003ccode\u003e4336118\u003c/code\u003e\u003c/a\u003e ⬆ Bump the github-actions group across 1 directory with 4 updates (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1897\"\u003e#1897\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/9a5a42e40f66d43feb8a42d95d9685b172b07c90\"\u003e\u003ccode\u003e9a5a42e\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/typer/compare/0.26.8...0.27.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `import-linter` from 2.12 to 2.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/seddonym/import-linter/blob/main/docs/release_notes.md\"\u003eimport-linter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13 (2026-07-03)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd module counts option to the explore UI and \u003ccode\u003edrawgraph\u003c/code\u003e command.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/f544debbb0efe10092cd387032ea76b94a0acee0\"\u003e\u003ccode\u003ef544deb\u003c/code\u003e\u003c/a\u003e Release v2.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/ef5adf868962b073005b69abdd3ffb7b57457a2f\"\u003e\u003ccode\u003eef5adf8\u003c/code\u003e\u003c/a\u003e Add more tests for drawgraph\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/73ee730c16c25b4f659dd4ecc3b7cf8ac78eddc6\"\u003e\u003ccode\u003e73ee730\u003c/code\u003e\u003c/a\u003e Upgrade grimp 3.14 -\u0026gt; 3.15\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/6d0bffcd3255fb302e0e3a3371f585393f48e99d\"\u003e\u003ccode\u003e6d0bffc\u003c/code\u003e\u003c/a\u003e Add comma for thousands separator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/8b0e7df5298f0b56af73cc0e9695d0fd4d828f3c\"\u003e\u003ccode\u003e8b0e7df\u003c/code\u003e\u003c/a\u003e Document module counts option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/542e2c95155b96bdf33538481e0b33db9add7c02\"\u003e\u003ccode\u003e542e2c9\u003c/code\u003e\u003c/a\u003e Add a module count to the UI\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/seddonym/import-linter/compare/v2.12...v2.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.20 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/j2h4u/python-docker-service-template/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/j2h4u%2Fpython-docker-service-template/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"},{"uuid":"4920656165","node_id":"PR_kwDOQedBh87zcBP8","number":651,"state":"open","title":"chore(deps): bump the pip-backend-patch-minor group in /backend with 5 updates","user":"dependabot[bot]","labels":["dependencies","type:chore","area:backend","area:ci"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-19T00:33:49.000Z","updated_at":"2026-07-19T00:34:01.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"pip-backend-patch-minor","update_count":5,"packages":[{"name":"fastapi","old_version":"0.139.0","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"sentry-sdk","old_version":"2.64.0","new_version":"2.66.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.7","new_version":"3.31.0","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps the pip-backend-patch-minor group in /backend with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.139.0` | `0.139.2` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.64.0` | `2.66.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.15.22` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.2` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.7` | `3.31.0` |\n\nUpdates `fastapi` from 0.139.0 to 0.139.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.139.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16013\"\u003e#16013\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.139.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16011\"\u003e#16011\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being applied. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15995\"\u003e#15995\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16005\"\u003e#16005\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15996\"\u003e#15996\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16006\"\u003e#16006\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15999\"\u003e#15999\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16004\"\u003e#16004\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16001\"\u003e#16001\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16003\"\u003e#16003\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15998\"\u003e#15998\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16000\"\u003e#16000\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15997\"\u003e#15997\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16002\"\u003e#16002\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15990\"\u003e#15990\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15925\"\u003e#15925\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15797\"\u003e#15797\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update \u003ccode\u003ellm-prompt.md\u003c/code\u003e for Hindi. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15810\"\u003e#15810\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix language-specific translation prompt for Russian language. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15924\"\u003e#15924\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15981\"\u003e#15981\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15982\"\u003e#15982\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15983\"\u003e#15983\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15985\"\u003e#15985\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use \u003ccode\u003eFASTAPI_LATEST_CHANGES\u003c/code\u003e token in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15984\"\u003e#15984\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15873\"\u003e#15873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15874\"\u003e#15874\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15950\"\u003e#15950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15952\"\u003e#15952\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: add TutorCruncher. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15947\"\u003e#15947\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix notify translations checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15933\"\u003e#15933\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15932\"\u003e#15932\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove RapidProxy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15929\"\u003e#15929\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15928\"\u003e#15928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15926\"\u003e#15926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/866b7a3d0ce1025a3811f23aea4846d01a2b16a8\"\u003e\u003ccode\u003e866b7a3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16014\"\u003e#16014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b3effea754619f0c305af576be23a51865292a3\"\u003e\u003ccode\u003e7b3effe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7fe315c21afb8a57a2b559772e0f7ced7e5d071a\"\u003e\u003ccode\u003e7fe315c\u003c/code\u003e\u003c/a\u003e 🐛 Refactor router route building to make it thread-safe, mainly relevant for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c48e67b1ce9c03fc9bd4b1ac72350e51ad5a6e8a\"\u003e\u003ccode\u003ec48e67b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16012\"\u003e#16012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2acc4fbf155caf016e3bd2602c0d2ec52723e635\"\u003e\u003ccode\u003e2acc4fb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/eb75fd078e83aed935016bcdf0705cd58bbf0d0e\"\u003e\u003ccode\u003eeb75fd0\u003c/code\u003e\u003c/a\u003e 🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16011\"\u003e#16011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9b8410bdc9fa1fd679ea7e65b926535c7045ab87\"\u003e\u003ccode\u003e9b8410b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e24d44cce4092a33b64e9536e96e7608a7dcb9b8\"\u003e\u003ccode\u003ee24d44c\u003c/code\u003e\u003c/a\u003e 📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being ap...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/93b78f8646dea4543cc4d938f7e29b8547749a99\"\u003e\u003ccode\u003e93b78f8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b959b443577c5f2b870cdef13219b98aa32f8943\"\u003e\u003ccode\u003eb959b44\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.139.0...0.139.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.64.0 to 2.66.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.66.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(tracing) Promote trace_lifecycle and ignore_spans to top-level options by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6821\"\u003e#6821\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (HTTP clients) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6811\"\u003e#6811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (task queues) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6814\"\u003e#6814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (misc) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6815\"\u003e#6815\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (databases) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6808\"\u003e#6808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (web frameworks) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6810\"\u003e#6810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (django) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6809\"\u003e#6809\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(logging) Fix flaky test_logging_captured_warnings by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6824\"\u003e#6824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove flaky no cyclic garbage test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6817\"\u003e#6817\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove Claude permission settings by \u003ca href=\"https://github.com/cleptric\"\u003e\u003ccode\u003e@​cleptric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6806\"\u003e#6806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove \u003ccode\u003enullcontext\u003c/code\u003e to \u003ccode\u003esentry_sdk.utils\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6805\"\u003e#6805\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.65.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eHuey\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6779\"\u003e#6779\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on producer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6778\"\u003e#6778\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(arq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6767\"\u003e#6767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(dramatiq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6776\"\u003e#6776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(rq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6774\"\u003e#6774\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTake first sentry-trace header in case multiple are supplied by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6722\"\u003e#6722\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Avoid \u003ccode\u003eValueError\u003c/code\u003e in async middleware \u003ccode\u003eprocess_*\u003c/code\u003e hooks by \u003ca href=\"https://github.com/r0ro\"\u003e\u003ccode\u003e@​r0ro\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6698\"\u003e#6698\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scope) Drop None user attribute values in set_user by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6692\"\u003e#6692\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Don't overwrite user set during request in AuthenticationMiddleware by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6760\"\u003e#6760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.66.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(tracing) Promote trace_lifecycle and ignore_spans to top-level options by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6821\"\u003e#6821\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (HTTP clients) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6811\"\u003e#6811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (task queues) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6814\"\u003e#6814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (misc) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6815\"\u003e#6815\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (databases) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6808\"\u003e#6808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (web frameworks) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6810\"\u003e#6810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (django) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6809\"\u003e#6809\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(logging) Fix flaky test_logging_captured_warnings by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6824\"\u003e#6824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove flaky no cyclic garbage test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6817\"\u003e#6817\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove Claude permission settings by \u003ca href=\"https://github.com/cleptric\"\u003e\u003ccode\u003e@​cleptric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6806\"\u003e#6806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove \u003ccode\u003enullcontext\u003c/code\u003e to \u003ccode\u003esentry_sdk.utils\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6805\"\u003e#6805\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.65.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eHuey\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6779\"\u003e#6779\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on producer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6778\"\u003e#6778\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(arq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6767\"\u003e#6767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(dramatiq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6776\"\u003e#6776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(rq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6774\"\u003e#6774\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTake first sentry-trace header in case multiple are supplied by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6722\"\u003e#6722\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Avoid \u003ccode\u003eValueError\u003c/code\u003e in async middleware \u003ccode\u003eprocess_*\u003c/code\u003e hooks by \u003ca href=\"https://github.com/r0ro\"\u003e\u003ccode\u003e@​r0ro\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6698\"\u003e#6698\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scope) Drop None user attribute values in set_user by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6692\"\u003e#6692\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Don't overwrite user set during request in AuthenticationMiddleware by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6760\"\u003e#6760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5179f60b025693f381d6d93cd69817f32931825b\"\u003e\u003ccode\u003e5179f60\u003c/code\u003e\u003c/a\u003e update changelog with docs link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e4bcb59e5a87772b1a9dee6189889a2dcee8d776\"\u003e\u003ccode\u003ee4bcb59\u003c/code\u003e\u003c/a\u003e release: 2.66.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5ba869c03908edde69b2c6526bdd5f03a37bfef4\"\u003e\u003ccode\u003e5ba869c\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/efddaab9211769982e0c1874e2fb77b0db88b4cd\"\u003e\u003ccode\u003eefddaab\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/b199a9eea34d7107d81714ca2d1c759f3a6e7e0e\"\u003e\u003ccode\u003eb199a9e\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/d695a6eb6ab6a81251d1abec12b61456b786a566\"\u003e\u003ccode\u003ed695a6e\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/dbf5d03f30d97cffd12116e09a34df7b4c2fdafe\"\u003e\u003ccode\u003edbf5d03\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5c1403440a25999f7d6ce69fcb106205be0b8322\"\u003e\u003ccode\u003e5c14034\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e0d2c4a4c5e01452865d06d4cdcafb5823fef164\"\u003e\u003ccode\u003ee0d2c4a\u003c/code\u003e\u003c/a\u003e feat(tracing): Promote trace_lifecycle and ignore_spans to top-level options ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/baa423fa766a5ba990ad27b1d3b1231f4b265182\"\u003e\u003ccode\u003ebaa423f\u003c/code\u003e\u003c/a\u003e test(logging): Fix flaky test_logging_captured_warnings (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/6824\"\u003e#6824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.64.0...2.66.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.21 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\nincreased memory use during reporting for large projects. Now we use a\ndifferent approach that is both faster and slimmer than 7.15.0. Fixes \u003ccode\u003eissue 2229\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2229:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003ecoveragepy/coveragepy#2229\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-1:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/50d865908dfeb21a0bf1e6f05db578c11662f8dd\"\u003e\u003ccode\u003e50d8659\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b5eed20618cfae07b35328b09dab388e9900f409\"\u003e\u003ccode\u003eb5eed20\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/78cab6e1770e55951c84a78d80b90c60ccfba4d5\"\u003e\u003ccode\u003e78cab6e\u003c/code\u003e\u003c/a\u003e fix: reduce memory use during reporting. \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003e#2229\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2231\"\u003e#2231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b4c1fda244a04caaa940ae77dd476a8bedfbf38e\"\u003e\u003ccode\u003eb4c1fda\u003c/code\u003e\u003c/a\u003e build: bump version to 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/182b010b63a2661c86df1ca3b3f84ce8511ee435\"\u003e\u003ccode\u003e182b010\u003c/code\u003e\u003c/a\u003e perf: resolve sysmon branch events lazily, one pair at a time (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2221\"\u003e#2221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ee271ee21fdf4c169648ff4ad3e9dd9d163e5e7f\"\u003e\u003ccode\u003eee271ee\u003c/code\u003e\u003c/a\u003e perf: compute multiline maps cheaply in the sysmon core (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2220\"\u003e#2220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1441b960c698d591d3a22a2190635039320459de\"\u003e\u003ccode\u003e1441b96\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 6 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2225\"\u003e#2225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/dd806350de678c9e4f137ffdda5cb131d269019c\"\u003e\u003ccode\u003edd80635\u003c/code\u003e\u003c/a\u003e fix: escape context labels in html report inline script block (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2224\"\u003e#2224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.0...7.15.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.29.7 to 3.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.31.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(platform): support Termux/Android by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/678\"\u003etox-dev/filelock#678\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/673\"\u003etox-dev/filelock#673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs(mermaid): follow the light and dark theme toggle by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/674\"\u003etox-dev/filelock#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003easyncio: scope the reentrant-deadlock registry to the owning task by \u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocument every lock type, and stop evicting a marker we cannot read by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/672\"\u003etox-dev/filelock#672\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.1...3.30.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.1...3.30.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e📝 docs: separate changelog releases with a blank line by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/668\"\u003etox-dev/filelock#668\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix: tolerate NFSv3 stale handle in strict claim read by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/669\"\u003etox-dev/filelock#669\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMatch fork-reset protocol on the class object by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/671\"\u003etox-dev/filelock#671\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ereject non-finite lease duration in marker records by \u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/670\"\u003etox-dev/filelock#670\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.0...3.30.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.0...3.30.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🎨 style: readability cleanup across the library by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/598\"\u003etox-dev/filelock#598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(api): ignore lifetime on native OS locks by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/593\"\u003etox-dev/filelock#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(unix): don't mutate lock file before acquiring flock by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/594\"\u003etox-dev/filelock#594\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.0 (2026-07-18)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Termux/Android, whose CPython ships without \u003ccode\u003eos.link\u003c/code\u003e and reports \u003ccode\u003esys.platform == \u0026quot;android\u0026quot;\u003c/code\u003e. \u003ccode\u003eimport filelock\u003c/code\u003e and both \u003ccode\u003eFileLock\u003c/code\u003e and \u003ccode\u003eSoftFileLock\u003c/code\u003e now work there, \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e reports its missing\nhard-link support only when acquired, and process liveness reads \u003ccode\u003e/proc\u003c/code\u003e on Android instead of PID-only checks. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e no longer lets two processes hold the lock at once under heavy contention. A holder now keeps\nits intent claim for the whole hold, so a contender whose directory scan races the holder's freshly linked claim can no\nlonger miss it and win alongside it. A held lock now exposes both an \u003ccode\u003eintent\u003c/code\u003e and a \u003ccode\u003eheld\u003c/code\u003e claim. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.3 (2026-07-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eAsyncFileLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLock\u003c/code\u003e no longer raise a deadlock \u003ccode\u003eRuntimeError\u003c/code\u003e when a different asyncio task\nwaits for a lock they hold; the check now scopes holders to the owning task, so only a same-task reacquire is refused. :pr:\u003ccode\u003e676\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size. The widened body column sized itself in \u003ccode\u003eem\u003c/code\u003e against the reader's font size while the breakpoints that fold the layout resolve \u003ccode\u003eem\u003c/code\u003e against a fixed 16px, so a reader whose default font is larger than 16px had the right-hand table of contents clipped off the edge. The body column now flexes instead, and the right-hand table of contents hides only at the mobile breakpoint. :pr:\u003ccode\u003e673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eColor the mermaid diagrams from whichever theme is active. They previously carried a light palette baked into each\ndiagram's source, which stayed light on a dark page. :pr:\u003ccode\u003e674\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.2 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.SoftFileLease\u003c/code\u003e deleting a live marker whose \u003ccode\u003emode\u003c/code\u003e it does not implement. An unrecognized mode now names its owner instead of reading as malformed, so a record written by a newer filelock survives the grace window rather than being evicted after two seconds. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.StrictSoftFileLock\u003c/code\u003e and :class:\u003ccode\u003e~filelock.AsyncStrictSoftFileLock\u003c/code\u003e calling themselves a native OS lock when they warn that they ignore \u003ccode\u003elifetime\u003c/code\u003e; they now say a strict claim is only ever cleared by \u003ccode\u003eforce_break()\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCover every lock type in the tutorials and how-to guides, with examples drawn from projects that use filelock, and color the mermaid diagrams.\nCorrect the claims that \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e exposes \u003ccode\u003eowner\u003c/code\u003e, that :class:\u003ccode\u003e~filelock.SoftFileLock\u003c/code\u003e evicts a strict sentinel, that :class:\u003ccode\u003e~filelock.ReadWriteLock\u003c/code\u003e requires a \u003ccode\u003e.db\u003c/code\u003e extension, and that every log record is \u003ccode\u003eDEBUG\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.1 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e and \u003ccode\u003eAsyncStrictSoftFileLock\u003c/code\u003e no longer abort acquisition when a peer's claim vanishes as an\nNFSv3 stale filehandle instead of a clean removal; the reader revalidates and skips it, so strict locks hold mutual\nexclusion across independent NFSv3 client caches. :pr:\u003ccode\u003e669\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSoftFileLease\u003c/code\u003e reads a marker whose lease duration is \u003ccode\u003enan\u003c/code\u003e or \u003ccode\u003einf\u003c/code\u003e as malformed rather than as a valid lease,\nso such a marker ages out through the grace window instead of raising \u003ccode\u003eLeaseSettingsMismatch\u003c/code\u003e on every contender. :pr:\u003ccode\u003e670\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.0 (2026-07-16)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/3b66fdc1432e3b02e83525e61a99096aa09a933f\"\u003e\u003ccode\u003e3b66fdc\u003c/code\u003e\u003c/a\u003e Release 3.31.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/166b2b5d723a2e111be36a8b43e594a97141c0fd\"\u003e\u003ccode\u003e166b2b5\u003c/code\u003e\u003c/a\u003e ✨ feat(platform): support Termux/Android (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/678\"\u003e#678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/51bca89704e83ea6bed8462946c72835544dbc8f\"\u003e\u003ccode\u003e51bca89\u003c/code\u003e\u003c/a\u003e Release 3.30.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/fc277001fb6abaea57986dc52d9844d48a9ef2f6\"\u003e\u003ccode\u003efc27700\u003c/code\u003e\u003c/a\u003e asyncio: scope the reentrant-deadlock registry to the owning task (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/676\"\u003e#676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/8699861c86445e3a46ac185dc206a44183cd681a\"\u003e\u003ccode\u003e8699861\u003c/code\u003e\u003c/a\u003e 📝 docs(mermaid): follow the light and dark theme toggle (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1b8da43740e2484fd3c84009e4693213fe6d5300\"\u003e\u003ccode\u003e1b8da43\u003c/code\u003e\u003c/a\u003e Keep both tables of contents on screen at any browser font size (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9a71d061458d18742be9c55170dd4465f8edf1c7\"\u003e\u003ccode\u003e9a71d06\u003c/code\u003e\u003c/a\u003e Release 3.30.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0dfa1b20fb9d85051e3304d3674787bea297b2d1\"\u003e\u003ccode\u003e0dfa1b2\u003c/code\u003e\u003c/a\u003e Document every lock type, and stop evicting a marker we cannot read (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/47d435f9458a70da803001ebbd424ca03f1afe41\"\u003e\u003ccode\u003e47d435f\u003c/code\u003e\u003c/a\u003e Release 3.30.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9b7b3b14027a385f8c636b7ee2ecfd3d052bdca0\"\u003e\u003ccode\u003e9b7b3b1\u003c/code\u003e\u003c/a\u003e reject non-finite lease duration in marker records (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/670\"\u003e#670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.7...3.31.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/Prekzursil/momentstudio/pull/651","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Prekzursil%2Fmomentstudio/issues/651","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/651/packages"},{"uuid":"4913477136","node_id":"PR_kwDONNuaZc7zFfaI","number":125,"state":"closed","title":"build(deps): bump the lint-tools group with 2 updates","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-17T17:35:07.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-17T17:30:31.000Z","updated_at":"2026-07-17T17:35:09.000Z","time_to_close":276,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"lint-tools","update_count":2,"packages":[{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"ty","old_version":"0.0.59","new_version":"0.0.60","repository_url":"https://github.com/astral-sh/ty"}],"path":null,"ecosystem":"pip"},"body":"Bumps the lint-tools group with 2 updates: [ruff](https://github.com/astral-sh/ruff) and [ty](https://github.com/astral-sh/ty).\n\nUpdates `ruff` from 0.15.21 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ty` from 0.0.59 to 0.0.60\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ty/releases\"\u003ety's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.60\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-15.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExpand transparent callable workaround with overloads and \u003ccode\u003eAwaitable[T]\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26761\"\u003e#26761\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSeparate type-mapping caches by transformation mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26857\"\u003e#26857\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid recursive protocol union redundancy checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26689\"\u003e#26689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle recursive protocols in redundant-cast checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26708\"\u003e#26708\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLSP server\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent type that is written with a code span from being incorrectly re-wrapped during docstring Markdown rendering (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26723\"\u003e#26723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLibrary support\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePydantic: Support \u003ccode\u003epopulate_by_name\u003c/code\u003e and custom initializers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26764\"\u003e#26764\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePydantic: Warn about immediately discarded extra arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26762\"\u003e#26762\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDiagnostics\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow TypeGuard keyword arguments and remove \u003ccode\u003einvalid-type-guard-call\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26809\"\u003e#26809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport own-line suppression comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26785\"\u003e#26785\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCore type checking\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDerive descriptor setter domains for protocols (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26683\"\u003e#26683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle cycles in derived constraint relations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26814\"\u003e#26814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement unified generic call inference (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26141\"\u003e#26141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve constraints from bound receivers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26776\"\u003e#26776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProject exact-length narrowing through TypeVars (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26852\"\u003e#26852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve PEP 695 aliases in type[...] annotations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26842\"\u003e#26842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRetain sequence pattern narrowing in successful \u003ccode\u003ematch\u003c/code\u003e cases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26807\"\u003e#26807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport class and static protocol methods (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26574\"\u003e#26574\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport class objects satisfying instance-method protocols (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26789\"\u003e#26789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003etype[Protocol]\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26649\"\u003e#26649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSync vendored typeshed stubs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26840\"\u003e#26840\u003c/a\u003e). \u003ca href=\"https://github.com/python/typeshed/compare/b9090e99745ac1511d8efd828622b11a9a3623e8...b00c387c669cb50d5d388d77b74c2e832e147fe8\"\u003eTypeshed diff\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat transparent callable decorators consistently in class assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26720\"\u003e#26720\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompare overloaded protocol method returns pairwise (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26684\"\u003e#26684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExtend \u003ccode\u003ePathBounds\u003c/code\u003e fast-path to support both upper and lower bounds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26782\"\u003e#26782\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip \u003ccode\u003eSelf\u003c/code\u003e type scans for non-generic instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26703\"\u003e#26703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ty/blob/main/CHANGELOG.md\"\u003ety's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.60\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-15.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExpand transparent callable workaround with overloads and \u003ccode\u003eAwaitable[T]\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26761\"\u003e#26761\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSeparate type-mapping caches by transformation mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26857\"\u003e#26857\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid recursive protocol union redundancy checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26689\"\u003e#26689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle recursive protocols in redundant-cast checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26708\"\u003e#26708\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLSP server\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent type that is written with a code span from being incorrectly re-wrapped during docstring Markdown rendering (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26723\"\u003e#26723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLibrary support\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePydantic: Support \u003ccode\u003epopulate_by_name\u003c/code\u003e and custom initializers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26764\"\u003e#26764\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePydantic: Warn about immediately discarded extra arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26762\"\u003e#26762\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDiagnostics\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow TypeGuard keyword arguments and remove \u003ccode\u003einvalid-type-guard-call\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26809\"\u003e#26809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport own-line suppression comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26785\"\u003e#26785\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCore type checking\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDerive descriptor setter domains for protocols (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26683\"\u003e#26683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle cycles in derived constraint relations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26814\"\u003e#26814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement unified generic call inference (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26141\"\u003e#26141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve constraints from bound receivers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26776\"\u003e#26776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProject exact-length narrowing through TypeVars (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26852\"\u003e#26852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve PEP 695 aliases in type[...] annotations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26842\"\u003e#26842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRetain sequence pattern narrowing in successful \u003ccode\u003ematch\u003c/code\u003e cases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26807\"\u003e#26807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport class and static protocol methods (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26574\"\u003e#26574\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport class objects satisfying instance-method protocols (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26789\"\u003e#26789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003etype[Protocol]\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26649\"\u003e#26649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSync vendored typeshed stubs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26840\"\u003e#26840\u003c/a\u003e). \u003ca href=\"https://github.com/python/typeshed/compare/b9090e99745ac1511d8efd828622b11a9a3623e8...b00c387c669cb50d5d388d77b74c2e832e147fe8\"\u003eTypeshed diff\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat transparent callable decorators consistently in class assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26720\"\u003e#26720\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompare overloaded protocol method returns pairwise (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26684\"\u003e#26684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExtend \u003ccode\u003ePathBounds\u003c/code\u003e fast-path to support both upper and lower bounds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26782\"\u003e#26782\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip \u003ccode\u003eSelf\u003c/code\u003e type scans for non-generic instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26703\"\u003e#26703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mtshiba\"\u003e\u003ccode\u003e@​mtshiba\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/ae554ec78e195a51e89ef1d01b517914e186b544\"\u003e\u003ccode\u003eae554ec\u003c/code\u003e\u003c/a\u003e Bump version to 0.0.60 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/4008\"\u003e#4008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/4f78ec596f4c0b8a65ab5966d0791f57c39b69a2\"\u003e\u003ccode\u003e4f78ec5\u003c/code\u003e\u003c/a\u003e Update astral-sh/setup-uv action to v8.3.2 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3997\"\u003e#3997\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/0f9b58781df1cf3675ce8aca522bc86a6cf7bbd4\"\u003e\u003ccode\u003e0f9b587\u003c/code\u003e\u003c/a\u003e Update prek dependencies (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3999\"\u003e#3999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/9afd3736029e81973bf39f55cf980b2f99ed3b5d\"\u003e\u003ccode\u003e9afd373\u003c/code\u003e\u003c/a\u003e Update dependency prek to v0.4.8 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3998\"\u003e#3998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/391f499a8e92a2e086555e4a61df89d4fb510265\"\u003e\u003ccode\u003e391f499\u003c/code\u003e\u003c/a\u003e Update docker/build-push-action action to v7.3.0 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/4000\"\u003e#4000\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/990dfce9b8aba17b4dc1eefba2a1929ec85e9827\"\u003e\u003ccode\u003e990dfce\u003c/code\u003e\u003c/a\u003e Update docker/login-action action to v4.4.0 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/4001\"\u003e#4001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/1b1e87359d5759d523bd525539f78d530b5919e7\"\u003e\u003ccode\u003e1b1e873\u003c/code\u003e\u003c/a\u003e Update docker/metadata-action action to v6.2.0 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/4002\"\u003e#4002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/aece09f47215f624c8e21586e3d157a93b158409\"\u003e\u003ccode\u003eaece09f\u003c/code\u003e\u003c/a\u003e Update docker/setup-buildx-action action to v4.2.0 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/4003\"\u003e#4003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/astral-sh/ty/compare/0.0.59...0.0.60\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/stateful-y/kedro-dagster/pull/125","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/stateful-y%2Fkedro-dagster/issues/125","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/125/packages"},{"uuid":"4911576621","node_id":"PR_kwDOTblDEM7y_XxN","number":2,"state":"closed","title":"chore(deps): bump the python-minor-patch group with 4 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-17T15:01:34.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-17T13:04:38.000Z","updated_at":"2026-07-17T15:01:44.000Z","time_to_close":7016,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor-patch","update_count":4,"packages":[{"name":"httpx","old_version":"0.27.2","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"ruff","old_version":"0.6.9","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"bandit","old_version":"1.7.9","new_version":"1.9.4","repository_url":"https://github.com/PyCQA/bandit"},{"name":"pip-audit","old_version":"2.7.3","new_version":"2.10.1","repository_url":"https://github.com/pypa/pip-audit"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 4 updates: [httpx](https://github.com/encode/httpx), [ruff](https://github.com/astral-sh/ruff), [bandit](https://github.com/PyCQA/bandit) and [pip-audit](https://github.com/pypa/pip-audit).\n\nUpdates `httpx` from 0.27.2 to 0.28.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/releases\"\u003ehttpx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.28.1\u003c/h2\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.28.0\u003c/h2\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/HEAD/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/blob/master/CHANGELOG.md\"\u003ehttpx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eBe aware that the default \u003cem\u003eJSON request bodies now use a more compact representation\u003c/em\u003e. This is generally considered a prefered style, tho may require updates to test suites.\u003c/p\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations...\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/master/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/26d48e0634e6ee9cdc0533996db289ce4b430177\"\u003e\u003ccode\u003e26d48e0\u003c/code\u003e\u003c/a\u003e Version 0.28.1 (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3445\"\u003e#3445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/89599a9541af14bcf906fc4ed58ccbdf403802ba\"\u003e\u003ccode\u003e89599a9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003everify=False\u003c/code\u003e, \u003ccode\u003ecert=...\u003c/code\u003e case. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/8ecb86f0d74ffc52d4663214fae9526bee89358d\"\u003e\u003ccode\u003e8ecb86f\u003c/code\u003e\u003c/a\u003e Add test for request params behavior changes (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3440\"\u003e#3440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/0cb7e5a2e736628e2f506d259fcf0d48cd2bde82\"\u003e\u003ccode\u003e0cb7e5a\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 11 updates (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/15e21e9ea3cad4f06e22a7e704aabefdf43d2e29\"\u003e\u003ccode\u003e15e21e9\u003c/code\u003e\u003c/a\u003e Updating deprecated docstring Client() class (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3426\"\u003e#3426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/80960fa31918d7663c3f4c3ad61661cf0e80628f\"\u003e\u003ccode\u003e80960fa\u003c/code\u003e\u003c/a\u003e Version 0.28.0. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3419\"\u003e#3419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/a33c87852b8a0dddc65e5f739af1e0a6fca4b91f\"\u003e\u003ccode\u003ea33c878\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eextensions\u003c/code\u003e type annotation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3380\"\u003e#3380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/ce7e14da27abba6574be9b3ea7cd5990556a9343\"\u003e\u003ccode\u003ece7e14d\u003c/code\u003e\u003c/a\u003e Error on verify as str. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3418\"\u003e#3418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/47f4a96ffaaaa07dca1614409549b5d7a6e7af49\"\u003e\u003ccode\u003e47f4a96\u003c/code\u003e\u003c/a\u003e Handle empty zstd responses (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3412\"\u003e#3412\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/189fc4bcbe5f314128775dec66a616ac9a31ad48\"\u003e\u003ccode\u003e189fc4b\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md, fix typo(s) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3406\"\u003e#3406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/httpx/compare/0.27.2...0.28.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.6.9 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.6.9...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `bandit` from 1.7.9 to 1.9.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/PyCQA/bandit/releases\"\u003ebandit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.9.4\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore: fixed some typos in comments by \u003ca href=\"https://github.com/jakob1379\"\u003e\u003ccode\u003e@​jakob1379\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1351\"\u003ePyCQA/bandit#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/login-action from 3.6.0 to 3.7.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1353\"\u003ePyCQA/bandit#1353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/build-push-action from 6.18.0 to 6.19.2 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1357\"\u003ePyCQA/bandit#1357\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B613 crash when reading from stdin by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1361\"\u003ePyCQA/bandit#1361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInclude filename in nosec 'no failed test' warning by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1363\"\u003ePyCQA/bandit#1363\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B615 false positive when revision is set via variable by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1358\"\u003ePyCQA/bandit#1358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLower version guard in check_ast_node to Python 3.12 by \u003ca href=\"https://github.com/rcgray\"\u003e\u003ccode\u003e@​rcgray\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1355\"\u003ePyCQA/bandit#1355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B106 reporting wrong line number on multiline function calls by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1360\"\u003ePyCQA/bandit#1360\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jakob1379\"\u003e\u003ccode\u003e@​jakob1379\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1351\"\u003ePyCQA/bandit#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1361\"\u003ePyCQA/bandit#1361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rcgray\"\u003e\u003ccode\u003e@​rcgray\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1355\"\u003ePyCQA/bandit#1355\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.9.3...1.9.4\"\u003ehttps://github.com/PyCQA/bandit/compare/1.9.3...1.9.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.9.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1334\"\u003ePyCQA/bandit#1334\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1335\"\u003ePyCQA/bandit#1335\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B608 to detect \u003ccode\u003eVALUES(\u003c/code\u003e without space by \u003ca href=\"https://github.com/kfess\"\u003e\u003ccode\u003e@​kfess\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1337\"\u003ePyCQA/bandit#1337\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd check for hardcoded passwords in dicts. by \u003ca href=\"https://github.com/alanverresen\"\u003e\u003ccode\u003e@​alanverresen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1338\"\u003ePyCQA/bandit#1338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1341\"\u003ePyCQA/bandit#1341\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate tox tests for Python 3.10 by \u003ca href=\"https://github.com/willschlitzer\"\u003e\u003ccode\u003e@​willschlitzer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1346\"\u003ePyCQA/bandit#1346\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/setup-buildx-action from 3.11.1 to 3.12.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1347\"\u003ePyCQA/bandit#1347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLimit B614 to torch.load deserializers by \u003ca href=\"https://github.com/dibussoc\"\u003e\u003ccode\u003e@​dibussoc\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1348\"\u003ePyCQA/bandit#1348\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kfess\"\u003e\u003ccode\u003e@​kfess\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1337\"\u003ePyCQA/bandit#1337\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/alanverresen\"\u003e\u003ccode\u003e@​alanverresen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1338\"\u003ePyCQA/bandit#1338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/willschlitzer\"\u003e\u003ccode\u003e@​willschlitzer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1346\"\u003ePyCQA/bandit#1346\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dibussoc\"\u003e\u003ccode\u003e@​dibussoc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1348\"\u003ePyCQA/bandit#1348\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.9.2...1.9.3\"\u003ehttps://github.com/PyCQA/bandit/compare/1.9.2...1.9.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.9.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eArgparse Python 3.14 enhancements by \u003ca href=\"https://github.com/ericwb\"\u003e\u003ccode\u003e@​ericwb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1331\"\u003ePyCQA/bandit#1331\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCheck whether Constant value is str by \u003ca href=\"https://github.com/ericwb\"\u003e\u003ccode\u003e@​ericwb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1333\"\u003ePyCQA/bandit#1333\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.9.1...1.9.2\"\u003ehttps://github.com/PyCQA/bandit/compare/1.9.1...1.9.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.9.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMore Python version related fixes by \u003ca href=\"https://github.com/ericwb\"\u003e\u003ccode\u003e@​ericwb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1327\"\u003ePyCQA/bandit#1327\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/92ae8b82fb422a639f0ed8d99e96cea769594e08\"\u003e\u003ccode\u003e92ae8b8\u003c/code\u003e\u003c/a\u003e Fix B106 reporting wrong line number on multiline function calls (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1360\"\u003e#1360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/c8c8a55c3307333b8eb46cb2ef46d49b1fad6546\"\u003e\u003ccode\u003ec8c8a55\u003c/code\u003e\u003c/a\u003e Lower version guard in check_ast_node to Python 3.12 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1355\"\u003e#1355\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/8f2f9284fca830ca017b2e2cc3ddc2a7b74b7040\"\u003e\u003ccode\u003e8f2f928\u003c/code\u003e\u003c/a\u003e Fix B615 false positive when revision is set via variable (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1358\"\u003e#1358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/e27493f71c114e0e5dfc0a475d225d7f9f4a7e2b\"\u003e\u003ccode\u003ee27493f\u003c/code\u003e\u003c/a\u003e Include filename in nosec 'no failed test' warning (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1363\"\u003e#1363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/b69b336450301d424e5ba04c9a58e8d41b7169b6\"\u003e\u003ccode\u003eb69b336\u003c/code\u003e\u003c/a\u003e Fix B613 crash when reading from stdin (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1361\"\u003e#1361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/e418b798abcc3f2b00c07fd6315da8fe9aeead00\"\u003e\u003ccode\u003ee418b79\u003c/code\u003e\u003c/a\u003e Bump docker/build-push-action from 6.18.0 to 6.19.2 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1357\"\u003e#1357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/ff646fd7e0e34fb350196fc58448fad17178c27a\"\u003e\u003ccode\u003eff646fd\u003c/code\u003e\u003c/a\u003e Bump docker/login-action from 3.6.0 to 3.7.0 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1353\"\u003e#1353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/c0def6c7ebab60f98c28ba759d488f4fbe6dae89\"\u003e\u003ccode\u003ec0def6c\u003c/code\u003e\u003c/a\u003e chore: fixed some typos in comments (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1351\"\u003e#1351\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/765f00d3f202f83f61d03f882f80a2d5142d81f8\"\u003e\u003ccode\u003e765f00d\u003c/code\u003e\u003c/a\u003e Limit B614 to torch.load deserializers (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1348\"\u003e#1348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/06fbbab0df3374ffa8ef24c6f601b2d5e1d4d429\"\u003e\u003ccode\u003e06fbbab\u003c/code\u003e\u003c/a\u003e Bump docker/setup-buildx-action from 3.11.1 to 3.12.0 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1347\"\u003e#1347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.7.9...1.9.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pip-audit` from 2.7.3 to 2.10.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip-audit/releases\"\u003epip-audit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.10.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports the \u003ccode\u003e--osv-url URL\u003c/code\u003e flag, which can be used to\nretrieve vulnerabilities from a custom OSV service. This is useful for\norganizations that host their own mirror of the OSV database, or that\nhave custom OSV records\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/810\"\u003e#810\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports the Ecosyste.ms vulnerability service with\n\u003ccode\u003e--vulnerability-service=esms\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/903\"\u003e#903\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe minimum version of Python is now 3.10\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/905\"\u003e#905\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed a bug where \u003ccode\u003epip-audit\u003c/code\u003e would fail to parse \u003ccode\u003epyproject.toml\u003c/code\u003e files\ncontaining TOML 1.0.0 features\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/910\"\u003e#910\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCycloneDX JSON/XML output now correctly links vulnerabilities to their\naffected components via the \u003ccode\u003eaffects\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/980\"\u003e#980\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.9.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports \u003ca href=\"https://peps.python.org/pep-0751/\"\u003ePEP 751\u003c/a\u003e\nlockfiles. These lockfiles can be audited in \u0026quot;project\u0026quot; mode by\npassing \u003ccode\u003e--locked\u003c/code\u003e to \u003ccode\u003epip-audit\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/888\"\u003e#888\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.8.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epip-audit\u003c/code\u003e now allows some CLI flags to be configured via environment\nvariables (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/755\"\u003e#755\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip-audit/blob/main/CHANGELOG.md\"\u003epip-audit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[2.10.1]\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.10.0]\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports the \u003ccode\u003e--osv-url URL\u003c/code\u003e flag, which can be used to\nretrieve vulnerabilities from a custom OSV service. This is useful for\norganizations that host their own mirror of the OSV database, or that\nhave custom OSV records\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/810\"\u003e#810\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports the Ecosyste.ms vulnerability service with\n\u003ccode\u003e--vulnerability-service=esms\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/903\"\u003e#903\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe minimum version of Python is now 3.10\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/905\"\u003e#905\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed a bug where \u003ccode\u003epip-audit\u003c/code\u003e would fail to parse \u003ccode\u003epyproject.toml\u003c/code\u003e files\ncontaining TOML 1.0.0 features\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/910\"\u003e#910\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCycloneDX JSON/XML output now correctly links vulnerabilities to their\naffected components via the \u003ccode\u003eaffects\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/980\"\u003e#980\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.9.0]\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports \u003ca href=\"https://peps.python.org/pep-0751/\"\u003ePEP 751\u003c/a\u003e\nlockfiles. These lockfiles can be audited in \u0026quot;project\u0026quot; mode by\npassing \u003ccode\u003e--locked\u003c/code\u003e to \u003ccode\u003epip-audit\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/888\"\u003e#888\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.8.0]\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/8894eb8cee033531a1fbd9f2fb160892531c14e3\"\u003e\u003ccode\u003e8894eb8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1056\"\u003e#1056\u003c/a\u003e from pypa/copilot/release-2101\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/1c625b7f4fd5790e6a05723b2ad9e670629a061d\"\u003e\u003ccode\u003e1c625b7\u003c/code\u003e\u003c/a\u003e Update version in README.md to 2.10.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/fd2094bb7b58438176d65722d77c021750a16f84\"\u003e\u003ccode\u003efd2094b\u003c/code\u003e\u003c/a\u003e Prep 2.10.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/58d24880a0053c9ec3ce7e3c35aef6d51d600921\"\u003e\u003ccode\u003e58d2488\u003c/code\u003e\u003c/a\u003e build(deps): bump github/codeql-action from 4.35.2 to 4.36.1 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1052\"\u003e#1052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/8df942058831baec6258f712d42a0bcb03729134\"\u003e\u003ccode\u003e8df9420\u003c/code\u003e\u003c/a\u003e build(deps): bump zizmorcore/zizmor-action from 0.5.3 to 0.5.6 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/3f618d3cde900cd89545d6a3fa4d41612f3b83df\"\u003e\u003ccode\u003e3f618d3\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1053\"\u003e#1053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/4849132c9ec7a2b0b160ec4276408659d0cdcede\"\u003e\u003ccode\u003e4849132\u003c/code\u003e\u003c/a\u003e Restrict OIDC token to publish job (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/c1eb69a71306be7a3ffbbf2bdb59a4cb4eeaa414\"\u003e\u003ccode\u003ec1eb69a\u003c/code\u003e\u003c/a\u003e Fix KeyError when OSV affected entry omits optional \u003ccode\u003eranges\u003c/code\u003e field (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/68de07fb9637027f61df7df2620da93f9deb11ec\"\u003e\u003ccode\u003e68de07f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1054\"\u003e#1054\u003c/a\u003e from pypa/fix/1047\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/ef31c9ea7ae844d6f9c1f85efceb9d4a2533ef5a\"\u003e\u003ccode\u003eef31c9e\u003c/code\u003e\u003c/a\u003e Formatting fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/pip-audit/compare/v2.7.3...v2.10.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/Anurag-tech22/Stadium-core/pull/2","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anurag-tech22%2FStadium-core/issues/2","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/2/packages"},{"uuid":"4908944143","node_id":"PR_kwDONp5CHc7y2yVC","number":603,"state":"open","title":"Chore [deps:pip]: bump ruff from 0.15.21 to 0.15.22 in /arpa-exporter","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-17T07:04:50.000Z","updated_at":"2026-07-17T07:11:24.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Chore [deps:pip]","packages":[{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"}],"path":"/arpa-exporter","ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.21 to 0.15.22.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=pip\u0026previous-version=0.15.21\u0026new-version=0.15.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/navapbc/arpa-reporter/pull/603","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/navapbc%2Farpa-reporter/issues/603","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/603/packages"},{"uuid":"4907253387","node_id":"PR_kwDOTbCX787yxX1Z","number":4,"state":"closed","title":"Bump ruff from 0.15.21 to 0.15.22","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-17T01:28:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-17T01:26:33.000Z","updated_at":"2026-07-17T01:28:49.000Z","time_to_close":128,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.21 to 0.15.22.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=uv\u0026previous-version=0.15.21\u0026new-version=0.15.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/callum-baillie/vaydeer-studio-linux/pull/4","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/callum-baillie%2Fvaydeer-studio-linux/issues/4","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4/packages"},{"uuid":"4905846364","node_id":"PR_kwDOJCACl87ys5fh","number":653,"state":"open","title":"build(deps-dev): bump ruff from 0.15.20 to 0.15.21","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-16T20:43:39.000Z","updated_at":"2026-07-16T20:46:45.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps-dev)","packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.20 to 0.15.21.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=uv\u0026previous-version=0.15.20\u0026new-version=0.15.21)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/Ponte-Energy-Partners/peprock/pull/653","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ponte-Energy-Partners%2Fpeprock/issues/653","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/653/packages"},{"uuid":"4903628533","node_id":"PR_kwDOTLI9wM7yluM0","number":28,"state":"closed","title":"build(python): bump ruff from 0.15.20 to 0.15.22 in /packages/python","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-17T18:25:37.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-16T15:35:06.000Z","updated_at":"2026-07-17T18:25:45.000Z","time_to_close":96631,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(python)","packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"}],"path":"/packages/python","ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.20 to 0.15.22.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=uv\u0026previous-version=0.15.20\u0026new-version=0.15.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/openakb/spec/pull/28","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/openakb%2Fspec/issues/28","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/28/packages"},{"uuid":"4903509212","node_id":"PR_kwDOFC14o87ylU6e","number":1317,"state":"open","title":"chore(deps): bump ruff from 0.15.21 to 0.15.22","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-16T15:21:43.000Z","updated_at":"2026-07-16T15:22:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.21 to 0.15.22.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=uv\u0026previous-version=0.15.21\u0026new-version=0.15.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/mikeyhodl/cryptography/pull/1317","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikeyhodl%2Fcryptography/issues/1317","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1317/packages"},{"uuid":"4891179232","node_id":"PR_kwDOTVGB887x9E1o","number":134,"state":"closed","title":"chore(deps): bump the python-dependencies group in /backend with 29 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-07-16T00:22:44.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-15T09:30:51.000Z","updated_at":"2026-07-16T00:25:51.000Z","time_to_close":53513,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-dependencies","update_count":29,"packages":[{"name":"uvicorn","old_version":"0.41.0","new_version":"0.51.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"sqlalchemy","old_version":"2.0.35","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"asyncpg","old_version":"0.29.0","new_version":"0.31.0","repository_url":"https://github.com/MagicStack/asyncpg"},{"name":"alembic","old_version":"1.13.2","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"redis","old_version":"5.0.8","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"bcrypt","old_version":"3.2.2","new_version":"5.0.0","repository_url":"https://github.com/pyca/bcrypt"},{"name":"httpx","old_version":"0.27.2","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"pandas","old_version":"2.2.3","new_version":"3.0.3","repository_url":"https://github.com/pandas-dev/pandas"},{"name":"numpy","old_version":"2.1.1","new_version":"2.5.1","repository_url":"https://github.com/numpy/numpy"},{"name":"scipy","old_version":"1.14.1","new_version":"1.18.0","repository_url":"https://github.com/scipy/scipy"},{"name":"slowapi","old_version":"0.1.9","new_version":"0.1.10","repository_url":"https://github.com/laurents/slowapi"},{"name":"apscheduler","old_version":"3.10.4","new_version":"3.11.3","repository_url":"https://github.com/agronholm/apscheduler"},{"name":"pytz","old_version":"2024.2","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"beautifulsoup4","old_version":"4.12.3","new_version":"4.15.0"},{"name":"yfinance","old_version":"0.2.66","new_version":"1.5.1","repository_url":"https://github.com/ranaroussi/yfinance"},{"name":"anthropic","old_version":"0.97.0","new_version":"0.116.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"claude-agent-sdk","old_version":"0.1.66","new_version":"0.2.119","repository_url":"https://github.com/anthropics/claude-agent-sdk-python"},{"name":"websockets","old_version":"13.1","new_version":"16.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"prometheus-client","old_version":"0.21.0","new_version":"0.25.0","repository_url":"https://github.com/prometheus/client_python"},{"name":"python-json-logger","old_version":"2.0.7","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"pytest-asyncio","old_version":"1.3.0","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"pytest-cov","old_version":"7.0.0","new_version":"7.1.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"diff-cover","old_version":"10.0.0","new_version":"10.3.0","repository_url":"https://github.com/Bachmann1234/diff-cover"},{"name":"anyio","old_version":"4.6.0","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"aiosqlite","old_version":"0.20.0","new_version":"0.22.1","repository_url":"https://github.com/omnilib/aiosqlite"},{"name":"ruff","old_version":"0.6.9","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"1.11.2","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps the python-dependencies group in /backend with 29 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.41.0` | `0.51.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.35` | `2.0.51` |\n| [asyncpg](https://github.com/MagicStack/asyncpg) | `0.29.0` | `0.31.0` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.13.2` | `1.18.5` |\n| [redis](https://github.com/redis/redis-py) | `5.0.8` | `8.0.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.4` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [bcrypt](https://github.com/pyca/bcrypt) | `3.2.2` | `5.0.0` |\n| [httpx](https://github.com/encode/httpx) | `0.27.2` | `0.28.1` |\n| [pandas](https://github.com/pandas-dev/pandas) | `2.2.3` | `3.0.3` |\n| [numpy](https://github.com/numpy/numpy) | `2.1.1` | `2.5.1` |\n| [scipy](https://github.com/scipy/scipy) | `1.14.1` | `1.18.0` |\n| [slowapi](https://github.com/laurents/slowapi) | `0.1.9` | `0.1.10` |\n| [apscheduler](https://github.com/agronholm/apscheduler) | `3.10.4` | `3.11.3` |\n| [pytz](https://github.com/stub42/pytz) | `2024.2` | `2026.2` |\n| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.12.3` | `4.15.0` |\n| [yfinance](https://github.com/ranaroussi/yfinance) | `0.2.66` | `1.5.1` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.97.0` | `0.116.0` |\n| [claude-agent-sdk](https://github.com/anthropics/claude-agent-sdk-python) | `0.1.66` | `0.2.119` |\n| [websockets](https://github.com/python-websockets/websockets) | `13.1` | `16.1` |\n| [prometheus-client](https://github.com/prometheus/client_python) | `0.21.0` | `0.25.0` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `2.0.7` | `4.1.0` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `1.3.0` | `1.4.0` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `7.0.0` | `7.1.0` |\n| [diff-cover](https://github.com/Bachmann1234/diff-cover) | `10.0.0` | `10.3.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.6.0` | `4.14.2` |\n| [aiosqlite](https://github.com/omnilib/aiosqlite) | `0.20.0` | `0.22.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.6.9` | `0.15.21` |\n| [mypy](https://github.com/python/mypy) | `1.11.2` | `2.3.0` |\n\nUpdates `uvicorn` from 0.41.0 to 0.51.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.51.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers with overlap on SIGHUP for near-zero-downtime reloads by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3025\"\u003eKludex/uvicorn#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove colorama from the standard extra by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3027\"\u003eKludex/uvicorn#3027\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansio implementation by \u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMemoize trusted host checks to avoid re-parsing the client IP per request by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2970\"\u003eKludex/uvicorn#2970\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the \u003ccode\u003easgi\u003c/code\u003e scope sub-dict per connection by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2976\"\u003eKludex/uvicorn#2976\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBuild a fresh \u003ccode\u003easgi\u003c/code\u003e scope dict per request by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2977\"\u003eKludex/uvicorn#2977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace click.style with an internal ANSI style helper by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2981\"\u003eKludex/uvicorn#2981\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid copying single-frame WebSocket payloads in websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2983\"\u003eKludex/uvicorn#2983\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecate the legacy websockets implementation and default \u003ccode\u003eauto\u003c/code\u003e to websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2985\"\u003eKludex/uvicorn#2985\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExit with a dedicated code on startup failure and stop the supervisor when a worker can't boot by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3001\"\u003eKludex/uvicorn#3001\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip the eager app import in the parent when spawning workers by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3012\"\u003eKludex/uvicorn#3012\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.49.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump httptools minimum version to 0.8.0 by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2962\"\u003eKludex/uvicorn#2962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2971\"\u003eKludex/uvicorn#2971\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.47.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2919\"\u003eKludex/uvicorn#2919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2920\"\u003eKludex/uvicorn#2920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2927\"\u003eKludex/uvicorn#2927\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.51.0 (July 8, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers one at a time on \u003ccode\u003eSIGHUP\u003c/code\u003e, bringing each replacement up before retiring the old worker, so reloads no longer drop requests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003ecolorama\u003c/code\u003e from the \u003ccode\u003estandard\u003c/code\u003e extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.2 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ewebsockets\u0026gt;=13.0\u003c/code\u003e, which the default \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation needs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.1 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3019\"\u003e#3019\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.0 (July 4, 2026)\u003c/h2\u003e\n\u003cp\u003eIf you use WebSockets, note that \u003ccode\u003e--ws auto\u003c/code\u003e now picks the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation. You shouldn't need it, but you can pin \u003ccode\u003e--ws websockets\u003c/code\u003e to get the deprecated legacy one back.\u003c/p\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExit with the dedicated code 3 on any startup failure: app loading, socket bind and lifespan startup errors previously exited with a mix of 0, 1 and 3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3001\"\u003e#3001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop the multiprocess supervisor when a worker exits with code 3 instead of restarting it forever (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3001\"\u003e#3001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefault \u003ccode\u003e--ws auto\u003c/code\u003e to \u003ccode\u003ewebsockets-sansio\u003c/code\u003e when websockets is installed (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip the eager app import in the parent process with \u003ccode\u003e--reload\u003c/code\u003e or \u003ccode\u003e--workers\u003c/code\u003e, fixing a memory regression introduced in 0.47.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBuild a fresh \u003ccode\u003easgi\u003c/code\u003e scope dict per request (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache the \u003ccode\u003easgi\u003c/code\u003e scope sub-dict per connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2976\"\u003e#2976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid copying single-frame WebSocket payloads in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2983\"\u003e#2983\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMemoize trusted host checks in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eclick.style\u003c/code\u003e with an internal ANSI style helper (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2981\"\u003e#2981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate the legacy \u003ccode\u003ewebsockets\u003c/code\u003e implementation; use \u003ccode\u003ewebsockets-sansio\u003c/code\u003e or \u003ccode\u003ewsproto\u003c/code\u003e instead (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.49.0 (June 3, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003ehttptools\u003c/code\u003e minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (reverses the 0.48.0 behavior of ignoring them) (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e4d0b05eb8c6459b7ba27ad13a2c2f4f8d4ece50\"\u003e\u003ccode\u003ee4d0b05\u003c/code\u003e\u003c/a\u003e Version 0.51.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3028\"\u003e#3028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/944e43ddbf715aea7c587f2738cd94c3f9106110\"\u003e\u003ccode\u003e944e43d\u003c/code\u003e\u003c/a\u003e Remove colorama from the standard extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2e787704f2610133059e76d56bbd60f48edd34a3\"\u003e\u003ccode\u003e2e78770\u003c/code\u003e\u003c/a\u003e Restart workers with overlap on SIGHUP for near-zero-downtime reloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a1b570cf577d512bfd396b64d72313233e9c3325\"\u003e\u003ccode\u003ea1b570c\u003c/code\u003e\u003c/a\u003e Version 0.50.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3022\"\u003e#3022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/83c7da7332ac3100171c258071de40d5dde35e13\"\u003e\u003ccode\u003e83c7da7\u003c/code\u003e\u003c/a\u003e Require websockets\u0026gt;=13.0 for the default sansio implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b4d011668a75d02370353f34de6dea59692dcad2\"\u003e\u003ccode\u003eb4d0116\u003c/code\u003e\u003c/a\u003e Version 0.50.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3020\"\u003e#3020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2a9151d0e763df2c56da2bfe8c5dcead4fe5a276\"\u003e\u003ccode\u003e2a9151d\u003c/code\u003e\u003c/a\u003e Split comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1bf3ab42e3aba1cf4acd1ef0c29d8ad9a599d333\"\u003e\u003ccode\u003e1bf3ab4\u003c/code\u003e\u003c/a\u003e Cover the excluded-directory branch in \u003ccode\u003eFileFilter\u003c/code\u003e with a direct test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3014\"\u003e#3014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/837b5f960dbe2f03e9f12feb9955ce2217211ad8\"\u003e\u003ccode\u003e837b5f9\u003c/code\u003e\u003c/a\u003e Deflake multiprocess, reload, and signal supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2975\"\u003e#2975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/21d2c16fd162ce0e92b5c35f4aadca63a8b12e2d\"\u003e\u003ccode\u003e21d2c16\u003c/code\u003e\u003c/a\u003e Version 0.50.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3013\"\u003e#3013\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.41.0...0.51.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.35 to 2.0.51\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.51\u003c/h1\u003e\n\u003cp\u003eReleased: June 15, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003e_orm.subqueryload()\u003c/code\u003e combined with\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e and \u003ccode\u003ePropComparator.and_()\u003c/code\u003e would\nsilently drop the additional filter criteria, causing all related objects\nto be loaded instead of only those matching the filter.  The\n\u003ccode\u003eLoaderCriteriaOption\u003c/code\u003e was being constructed against the base\nentity rather than the effective entity indicated by\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e.  Pull request courtesy Arya Rizky.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13207\"\u003e#13207\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed bug where a failure during \u003ccode\u003etpc_prepare()\u003c/code\u003e within\n\u003ccode\u003e_orm.Session.commit()\u003c/code\u003e for a two-phase session would raise\n\u003ccode\u003eIllegalStateChangeError\u003c/code\u003e instead of the original database\nexception.  The internal \u003ccode\u003e_prepare_impl()\u003c/code\u003e method's error handler\nwas unable to invoke \u003ccode\u003e_orm.SessionTransaction.rollback()\u003c/code\u003e due\nto a state-change guard, preventing proper cleanup and masking the\nunderlying error.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13356\"\u003e#13356\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eengine\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[engine] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003eResult.freeze()\u003c/code\u003e would lose track of ambiguous\ncolumn names present in the original \u003ccode\u003eCursorResult\u003c/code\u003e, causing\nkey-based access on the thawed result to silently return a value instead of\nraising \u003ccode\u003eInvalidRequestError\u003c/code\u003e.  The\n\u003ccode\u003eSimpleResultMetaData\u003c/code\u003e now accepts and propagates ambiguous key\ninformation so that frozen, thawed, and pickled results raise consistently\nfor duplicate column names.  Pull request courtesy Saurabh Kohli.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/9427\"\u003e#9427\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003esql\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[sql] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003e_sql.StatementLambdaElement\u003c/code\u003e would proxy\nattribute access through the cached \u0026quot;expected\u0026quot; expression rather than the\nresolved expression, causing stale closure-bound parameter values to be\nused when a lambda statement was extended with non-lambda criteria such as\nan additional \u003ccode\u003e.where()\u003c/code\u003e clause.  Courtesy cjc0013.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/10827\"\u003e#10827\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asyncpg` from 0.29.0 to 0.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/MagicStack/asyncpg/releases\"\u003easyncpg's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.31.0\u003c/h2\u003e\n\u003cp\u003eEnable Python 3.14 with experimental subinterpreter/freethreading\nsupport.\u003c/p\u003e\n\u003ch1\u003eImprovements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd Python 3.14 support, experimental subinterpreter/freethreading support (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1279\"\u003e#1279\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 9e42642b)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAvoid performing type introspection on known types (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1243\"\u003e#1243\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 5c9986c4)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMake \u003ccode\u003eprepare()\u003c/code\u003e not use named statements by default when cache is disabled (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1245\"\u003e#1245\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 5b14653e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement connection service file functionality (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1223\"\u003e#1223\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/AndrewJackson2020\"\u003e\u003ccode\u003e@​AndrewJackson2020\u003c/code\u003e\u003c/a\u003e in 1d63bb15)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix multi port connection string issue (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1222\"\u003e#1222\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/AndrewJackson2020\"\u003e\u003ccode\u003e@​AndrewJackson2020\u003c/code\u003e\u003c/a\u003e in 01c0db7b)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAvoid leaking connections if _can_use_connection fails (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1269\"\u003e#1269\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/yuliy-openai\"\u003e\u003ccode\u003e@​yuliy-openai\u003c/code\u003e\u003c/a\u003e in e94302d2)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eOther\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for EOL Python 3.8 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1281\"\u003e#1281\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 6c2c4904)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.30.0\u003c/h2\u003e\n\u003cp\u003eSupport Python 3.13 and PostgreSQL 17.\u003c/p\u003e\n\u003ch1\u003eImprovements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eImplement GSSAPI authentication\n(by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in 1d4e5680 for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement SSPI authentication\n(by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in 1aab2094 for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd initial typings\n(by \u003ca href=\"https://github.com/bryanforbes\"\u003e\u003ccode\u003e@​bryanforbes\u003c/code\u003e\u003c/a\u003e in d42432bf for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAllow building with Cython 3\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/71775a67277fc0aa5bd2b9f15e848826d7078c4d\"\u003e\u003ccode\u003e71775a6\u003c/code\u003e\u003c/a\u003e asyncpg v0.31.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/508cae6441968ef7613a623fece7083cce66c2b3\"\u003e\u003ccode\u003e508cae6\u003c/code\u003e\u003c/a\u003e Test on PostgreSQL 18 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1290\"\u003e#1290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/e534e5f15c73525a6509143b3828335517360f1b\"\u003e\u003ccode\u003ee534e5f\u003c/code\u003e\u003c/a\u003e Bump cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/07fe5122a680f5768e39fc28d68c94b185037a52\"\u003e\u003ccode\u003e07fe512\u003c/code\u003e\u003c/a\u003e Bump pgproto\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/648b35f18199ebf2a30009376a6e9060cf7ad789\"\u003e\u003ccode\u003e648b35f\u003c/code\u003e\u003c/a\u003e Bump Cython to 3.2.1 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1288\"\u003e#1288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/9e42642b9110d206706697921b6e697a0972649d\"\u003e\u003ccode\u003e9e42642\u003c/code\u003e\u003c/a\u003e Add Python 3.14 support, experimental subinterpreter/freethreading support (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/6fe1c494ef5c3069fa9149c48bf9f8f2cd69f95e\"\u003e\u003ccode\u003e6fe1c49\u003c/code\u003e\u003c/a\u003e Move development deps away from extras and into dependency groups (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1280\"\u003e#1280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/7a548166c2b23561915c481bd332013e3a415cfb\"\u003e\u003ccode\u003e7a54816\u003c/code\u003e\u003c/a\u003e Fix a couple of missed Python version guards\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/6c2c4904e61b2cd2f502540730a24e246cff2ebd\"\u003e\u003ccode\u003e6c2c490\u003c/code\u003e\u003c/a\u003e Drop support for EOL Python 3.8 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1281\"\u003e#1281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/4c60ae890d1f3800f889679657357f91a6923568\"\u003e\u003ccode\u003e4c60ae8\u003c/code\u003e\u003c/a\u003e Bump version to 0.31.0.dev0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/MagicStack/asyncpg/compare/v0.29.0...v0.31.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.13.2 to 1.18.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.18.5\u003c/h1\u003e\n\u003cp\u003eReleased: June 25, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [commands]\u003c/strong\u003e Added \u003ccode\u003e--splice\u003c/code\u003e support to the \u003ccode\u003emerge()\u003c/code\u003e command. Previously, the\nmerge command would suggest using \u003ccode\u003e--splice\u003c/code\u003e when attempting to merge\nnon-head revisions, but the flag was not actually accepted by the command.\nThe \u003ccode\u003esplice\u003c/code\u003e parameter is now available in both the command-line\ninterface and the \u003ccode\u003ecommand.merge()\u003c/code\u003e function, matching the existing\nsupport in \u003ccode\u003ecommand.revision()\u003c/code\u003e.  Pull request courtesy Kadir Can\nOzden.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1712\"\u003e#1712\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [environment]\u003c/strong\u003e Added \u003ccode\u003eScriptDirectory.get_heads.consider_depends_on\u003c/code\u003e\nparameter to \u003ccode\u003eScriptDirectory.get_heads()\u003c/code\u003e. When set to \u003ccode\u003eTrue\u003c/code\u003e,\nhead revisions that are also a dependency of another revision via\n\u003ccode\u003edepends_on\u003c/code\u003e are excluded from the result, matching the effective\nheads that would be present in the \u003ccode\u003ealembic_version\u003c/code\u003e table after\nrunning all upgrades.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1806\"\u003e#1806\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [autogenerate]\u003c/strong\u003e Fixed rendering of dialect keyword arguments containing\n\u003ccode\u003e~sqlalchemy.schema.Column\u003c/code\u003e objects within sequences, such as\n\u003ccode\u003epostgresql_include\u003c/code\u003e.  These were previously rendered using \u003ccode\u003erepr()\u003c/code\u003e,\nproducing invalid Python in the generated migration scripts.  Column\nobjects within list or tuple values are now correctly rendered as their\nstring column names.  Pull request courtesy Ajay Singh.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1258\"\u003e#1258\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [mysql]\u003c/strong\u003e Implemented type comparison for \u003ccode\u003eENUM\u003c/code\u003e datatypes on MySQL, which\nchecks that the individual enum values are equivalent.  If additional\nentries are on either side, this generates a diff.  Changes of order do not\ngenerate a diff.  Pull request courtesy Furkan Köykıran.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1745\"\u003e#1745\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/779\"\u003e#779\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [operations]\u003c/strong\u003e Fixed bug where the \u003ccode\u003einline_references\u003c/code\u003e parameter of\n\u003ccode\u003eOperations.add_column()\u003c/code\u003e did not include foreign key referential\nactions such as \u003ccode\u003eON DELETE\u003c/code\u003e, \u003ccode\u003eON UPDATE\u003c/code\u003e, \u003ccode\u003eDEFERRABLE\u003c/code\u003e,\n\u003ccode\u003eINITIALLY\u003c/code\u003e, and \u003ccode\u003eMATCH\u003c/code\u003e when rendering the inline \u003ccode\u003eREFERENCES\u003c/code\u003e\nclause.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.0.8 to 8.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.0.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix Unix socket maintenance notification handling and tests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4097\"\u003e#4097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix async cluster node connection release on write errors (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4111\"\u003e#4111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed async MultiDBClient with underlying RedisCluster (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4108\"\u003e#4108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix hiredis readiness checks for high file descriptors (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4115\"\u003e#4115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(search): parse RESP3 FT.SEARCH responses with bytes-typed keys (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4109\"\u003e#4109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing pubsub's listen method to be blocking. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4119\"\u003e#4119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(asyncio): release pooled connection when Pipeline.reset() is cancelled (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4123\"\u003e#4123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid per-check fd allocation in hiredis _socket_can_read() — use poll() instead of a per-call selector (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4118\"\u003e#4118\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating PyJWT dependency. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4100\"\u003e#4100\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate CI badge in README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4099\"\u003e#4099\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing url query argument parser for ssl_min_version (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4047\"\u003e#4047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eci: least-privilege permissions on spellcheck (read) and stale-issues (job-level write for actions/stale) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4080\"\u003e#4080\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumping github-versions actions (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4102\"\u003e#4102\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating lib version + supported Redis versions in README.md + updating the Redis versions in CI test matrix (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4092\"\u003e#4092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/violuke\"\u003e\u003ccode\u003e@​violuke\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/mokashang\"\u003e\u003ccode\u003e@​mokashang\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/arpitjain099\"\u003e\u003ccode\u003e@​arpitjain099\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/coredumperror\"\u003e\u003ccode\u003e@​coredumperror\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e8.0.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync Cluster PubSub\u003c/h3\u003e\n\u003cp\u003eThis release introduces full \u003cstrong\u003easyncio Cluster PubSub support\u003c/strong\u003e, bringing shard-channel capabilities (\u003ccode\u003eSSUBSCRIBE\u003c/code\u003e, \u003ccode\u003eSUNSUBSCRIBE\u003c/code\u003e, \u003ccode\u003eSPUBLISH\u003c/code\u003e) to the async \u003ccode\u003eRedisCluster\u003c/code\u003e client. The new \u003ccode\u003eClusterPubSub\u003c/code\u003e class in \u003ccode\u003eredis.asyncio.cluster\u003c/code\u003e automatically routes shard-channel subscriptions to the correct cluster node based on key-slot hashing, manages per-node PubSub connections, and supports round-robin message retrieval across nodes. Users can create a cluster pubsub instance via \u003ccode\u003eRedisCluster.pubsub()\u003c/code\u003e and use \u003ccode\u003essubscribe()\u003c/code\u003e, \u003ccode\u003esunsubscribe()\u003c/code\u003e, and \u003ccode\u003eget_sharded_message()\u003c/code\u003e just as they would with the sync cluster client.\u003c/p\u003e\n\u003ch3\u003eKeyspace and subkey notifications\u003c/h3\u003e\n\u003cp\u003eRedis Keyspace Notifications are now supported for standalone and cluster deployments in both sync and async modes. New classes — \u003ccode\u003eKeyspaceNotifications\u003c/code\u003e, \u003ccode\u003eClusterKeyspaceNotifications\u003c/code\u003e, \u003ccode\u003eAsyncKeyspaceNotifications\u003c/code\u003e, and \u003ccode\u003eAsyncClusterKeyspaceNotifications\u003c/code\u003e — provide a high-level API for keyspace/keyevent subscriptions and subkey notification families: \u003ccode\u003esubkeyspace\u003c/code\u003e, \u003ccode\u003esubkeyevent\u003c/code\u003e, \u003ccode\u003esubkeyspaceitem\u003c/code\u003e, and \u003ccode\u003esubkeyspaceevent\u003c/code\u003e. Convenience methods like \u003ccode\u003esubscribe_keyspace()\u003c/code\u003e, \u003ccode\u003esubscribe_keyevent()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyspace()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyevent()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyspaceitem()\u003c/code\u003e, and \u003ccode\u003esubscribe_subkeyspaceevent()\u003c/code\u003e simplify common patterns, with channel classes for both key and subkey channels.\u003c/p\u003e\n\u003cp\u003eIn cluster mode, subscriptions are managed across primary nodes because each node emits notifications only for keys it owns, with built-in topology-change handling. Sync \u003ccode\u003erun_in_thread()\u003c/code\u003e and async \u003ccode\u003elisten()\u003c/code\u003e workflows are supported.\u003c/p\u003e\n\u003ch3\u003eRedis Array commands(\u003ca href=\"https://redis.io/docs/latest/develop/data-types/arrays/\"\u003ehttps://redis.io/docs/latest/develop/data-types/arrays/\u003c/a\u003e)\u003c/h3\u003e\n\u003cp\u003eredis-py now supports \u003ca href=\"https://redis.io/docs/latest/develop/data-types/arrays/\"\u003eRedis Arrays\u003c/a\u003e, a preview Redis data type for sparse, index-addressable sequences of strings. New \u003ccode\u003eAR*\u003c/code\u003e command helpers cover indexed reads/writes, range scans, deletion, cursor-based insertion, ring-buffer writes, metadata, text search, and aggregation, including \u003ccode\u003eARGET\u003c/code\u003e, \u003ccode\u003eARSET\u003c/code\u003e, \u003ccode\u003eARMGET\u003c/code\u003e, \u003ccode\u003eARMSET\u003c/code\u003e, \u003ccode\u003eARSCAN\u003c/code\u003e, \u003ccode\u003eARGREP\u003c/code\u003e, \u003ccode\u003eARRING\u003c/code\u003e, and \u003ccode\u003eAROP\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eType Hints Improvements (breaking changes)\u003c/h3\u003e\n\u003cp\u003eThe \u003ccode\u003e@overload\u003c/code\u003e pattern has been applied systematically across \u003cstrong\u003ecore commands\u003c/strong\u003e (\u003ccode\u003ecore.py\u003c/code\u003e), \u003cstrong\u003eVectorSet commands\u003c/strong\u003e, and \u003cstrong\u003emodule commands\u003c/strong\u003e (Search, JSON, TimeSeries, Bloom filters) to provide distinct return types for sync and async clients. Previously, methods returned a combined \u003ccode\u003eResponseT\u003c/code\u003e (i.e., \u003ccode\u003eUnion[Awaitable[Any], Any]\u003c/code\u003e), which caused static analysis tools like mypy and Pyright to flag false positives. Now, sync clients see concrete return types (e.g., \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003ebool\u003c/code\u003e, \u003ccode\u003elist[str]\u003c/code\u003e) while async clients see \u003ccode\u003eAwaitable[...]\u003c/code\u003e wrappers. This is a \u003cstrong\u003ebreaking change for type-checking only\u003c/strong\u003e—runtime behavior is unchanged, but code relying on the old union return types in type annotations may need updates. Two new protocol types, \u003ccode\u003eSyncClientProtocol\u003c/code\u003e and \u003ccode\u003eAsyncClientProtocol\u003c/code\u003e, are used in overload signatures to enable this distinction.\u003c/p\u003e\n\u003ch3\u003eRESP3 by default with opt-in unified responses\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7c0fd118c48a7a863d0a0262d858d02c001c4b73\"\u003e\u003ccode\u003e7c0fd11\u003c/code\u003e\u003c/a\u003e Updating lib version to 8.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/b7a4d7d137b680737664e131598c6dab796a5a10\"\u003e\u003ccode\u003eb7a4d7d\u003c/code\u003e\u003c/a\u003e Avoid per-check fd allocation in hiredis \u003ccode\u003e_socket_can_read()\u003c/code\u003e — use \u003ccode\u003epoll()\u003c/code\u003e ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/eec778ef52fd0a2b40b86d881721b1c9226257d4\"\u003e\u003ccode\u003eeec778e\u003c/code\u003e\u003c/a\u003e fix(asyncio): release pooled connection when Pipeline.reset() is cancelled (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/08e01bbf9f2ce8c950f93db918f0883cb6218e5e\"\u003e\u003ccode\u003e08e01bb\u003c/code\u003e\u003c/a\u003e Fixing pubsub's listen method to be blocking. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4119\"\u003e#4119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/3d5257a04bd54b994372ecd9ffddb7814f4a9755\"\u003e\u003ccode\u003e3d5257a\u003c/code\u003e\u003c/a\u003e fix(search): parse RESP3 FT.SEARCH responses with bytes-typed keys (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4109\"\u003e#4109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/cce28ffa69666439cd8dfeb4dbb9fd313dd8272b\"\u003e\u003ccode\u003ecce28ff\u003c/code\u003e\u003c/a\u003e Fix hiredis readiness checks for high file descriptors (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4115\"\u003e#4115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e20691c83042a9049dea22b72b74595263e07145\"\u003e\u003ccode\u003ee20691c\u003c/code\u003e\u003c/a\u003e Fixed async MultiDBClient with underlying RedisCluster (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4108\"\u003e#4108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/ea37fccf9aff261cd78e072f26b729e797644440\"\u003e\u003ccode\u003eea37fcc\u003c/code\u003e\u003c/a\u003e Fix async cluster node connection release on write errors (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4111\"\u003e#4111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/f4146fa8c763fb9cb31f4e2a52f76030e9bebd77\"\u003e\u003ccode\u003ef4146fa\u003c/code\u003e\u003c/a\u003e Updating lib version + supported Redis versions in README.md + updating the R...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d47674e48542fcac807a739f358b45e4a5e2f099\"\u003e\u003ccode\u003ed47674e\u003c/code\u003e\u003c/a\u003e Bumping github-versions actions (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4102\"\u003e#4102\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v5.0.8...v8.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.12.5 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `email-validator` from 2.2.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/JoshData/python-email-validator/releases\"\u003eemail-validator's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe package name is changed from using an underscore (email_validator) to a dash (email-validator) to match PyPi's normalized package name.\u003c/li\u003e\n\u003cli\u003eThe library no longer checks that the local part is at most 64 characters because a more careful reading of RFC 5321 indicates the limit is optional and such email addresses have been found in the wild. However the check can be restored using a new \u003ccode\u003estrict=True\u003c/code\u003e parameter, and the overall 254 character email address length limit is still in place.\u003c/li\u003e\n\u003cli\u003eNew EmailSyntaxError messages are used for some exiting syntax errors related to @-sign homoglyphs and invalid characters in internationalized domains.\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003eallow_display_name=True\u003c/code\u003e, display names are now returned with Unicode NFC normalization.\u003c/li\u003e\n\u003cli\u003eTypeError is now raised if something other than str (or bytes) is passed as the email address.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/JoshData/python-email-validator/blob/main/CHANGELOG.md\"\u003eemail-validator's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.3.0 (August 26, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe package name is changed from using an underscore (email_validator) to a dash (email-validator) to match PyPi's normalized package name.\u003c/li\u003e\n\u003cli\u003eThe library no longer checks that the local part is at most 64 characters because a more careful reading of RFC 5321 indicates the limit is optional and such email addresses have been found in the wild. However the check can be restored using a new \u003ccode\u003estrict=True\u003c/code\u003e parameter, and the overall 254 character email address length limit is still in place.\u003c/li\u003e\n\u003cli\u003eNew EmailSyntaxError messages are used for some exiting syntax errors related to @-sign homoglyphs and invalid characters in internationalized domains.\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003eallow_display_name=True\u003c/code\u003e, display names are now returned with Unicode NFC normalization.\u003c/li\u003e\n\u003cli\u003eTypeError is now raised if something other than str (or bytes) is passed as the email address.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/030a63a183a6a66450e98381ca9a23ab9769706a\"\u003e\u003ccode\u003e030a63a\u003c/code\u003e\u003c/a\u003e Version 2.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/e943a0f07f5c130b4a419e0cd79f705f36bf24fe\"\u003e\u003ccode\u003ee943a0f\u003c/code\u003e\u003c/a\u003e Raise TypeError when an invalid argument is passed for email, closes \u003ca href=\"https://redirect.github.com/JoshData/python-email-validator/issues/155\"\u003e#155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/f90d256045dc1ccbcffd5514189267d14a9e3ea1\"\u003e\u003ccode\u003ef90d256\u003c/code\u003e\u003c/a\u003e Remove local part length check unless new strict flag is given, fixes \u003ca href=\"https://redirect.github.com/JoshData/python-email-validator/issues/158\"\u003e#158\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/98800bac023b8713351393a5043034065f1ea6cb\"\u003e\u003ccode\u003e98800ba\u003c/code\u003e\u003c/a\u003e Add explicit checks for internationalized domain name characters invalid unde...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/936aead3bf5c608f8561954e0d2955b7f97bfdad\"\u003e\u003ccode\u003e936aead\u003c/code\u003e\u003c/a\u003e Fix final syntax checks on normalized internationalized domains checking the ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/8043de49596f08d54a07e2bc7c442ced074216a6\"\u003e\u003ccode\u003e8043de4\u003c/code\u003e\u003c/a\u003e NFC-normalize display names per UTS \u003ca href=\"https://redirect.github.com/JoshData/python-email-validator/issues/39\"\u003e#39\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/bc08faa2a74b51a9e7ba7ff4f995c0b475cb5b12\"\u003e\u003ccode\u003ebc08faa\u003c/code\u003e\u003c/a\u003e Add one-off error messages for full-width-at and small-commercial-at which ar...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/a1c90ab58fb0f5d969a8351a68ca15bff068527c\"\u003e\u003ccode\u003ea1c90ab\u003c/code\u003e\u003c/a\u003e Split exceptions_types.py into exceptions.py and types.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/dbcf07cc5c8066c14b6dc58d2dbb4a1e582eeefd\"\u003e\u003ccode\u003edbcf07c\u003c/code\u003e\u003c/a\u003e Change package name from using underscore to dash to match PyPi normalized pa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/7c22208ee5b82c377e960ddcea5293691eadc6cc\"\u003e\u003ccode\u003e7c22208\u003c/code\u003e\u003c/a\u003e Support ALLOW_DISPLAY_NAME and ALLOW_EMPTY_LOCAL in the CLI (\u003ca href=\"https://redirect.github.com/JoshData/python-email-validator/issues/145\"\u003e#145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/JoshData/python-email-validator/compare/v2.2.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `bcrypt` from 3.2.2 to 5.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/bcrypt/blob/main/CHANGELOG.rst\"\u003ebcrypt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBumped MSRV to 1.74.\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.14 and free-threaded Python 3.14.\u003c/li\u003e\n\u003cli\u003eAdded support for Windows on ARM.\u003c/li\u003e\n\u003cli\u003ePassing \u003ccode\u003ehashpw\u003c/code\u003e a password longer than 72 bytes now raises a\n\u003ccode\u003eValueError\u003c/code\u003e. Previously the password was silently truncated, following the\nbehavior of the original OpenBSD \u003ccode\u003ebcrypt\u003c/code\u003e implementation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.7.\u003c/li\u003e\n\u003cli\u003eWe now support free-threaded Python 3.13.\u003c/li\u003e\n\u003cli\u003eWe now support PyPy 3.11.\u003c/li\u003e\n\u003cli\u003eWe now publish wheels for free-threaded Python 3.13, for PyPy 3.11 on\n\u003ccode\u003emanylinux\u003c/code\u003e, and for ARMv7l on \u003ccode\u003emanylinux\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump Rust dependency versions - this should resolve crashes on Python 3.13\nfree-threaded builds.\u003c/li\u003e\n\u003cli\u003eWe no longer build \u003ccode\u003emanylinux\u003c/code\u003e wheels for PyPy 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump Rust dependency versions\u003c/li\u003e\n\u003cli\u003eRemoved the \u003ccode\u003eBCRYPT_ALLOW_RUST_163\u003c/code\u003e environment variable.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.1.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump Rust dependency versions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.1.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePublish both \u003ccode\u003epy37\u003c/code\u003e and \u003ccode\u003epy39\u003c/code\u003e wheels. This should resolve some errors\nrelating to initializing a module multiple times per process.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.1.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed the type signature on the \u003ccode\u003ekdf\u003c/code\u003e method.\u003c/li\u003e\n\u003cli\u003eFixed packaging bug on Windows.\u003c/li\u003e\n\u003cli\u003eFixed incompatibility with passlib package detection assumptions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/5060bce7e6c27f55e89d5b0d22b7ae0437a362f7\"\u003e\u003ccode\u003e5060bce\u003c/code\u003e\u003c/a\u003e 5.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/e43f568265df7e1aabbaddccc336dbf3ea675df8\"\u003e\u003ccode\u003ee43f568\u003c/code\u003e\u003c/a\u003e Bump actions/cache from 4.2.4 to 4.3.0 (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1077\"\u003e#1077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/fc9f680a96a0d8e9df4c5a1a4d991fd961a90adb\"\u003e\u003ccode\u003efc9f680\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.175 to 0.2.176 in /src/_bcrypt (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1075\"\u003e#1075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/633f46fbb33d8abfe5b9cb0c12eed79878fbff06\"\u003e\u003ccode\u003e633f46f\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1073\"\u003e#1073\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/a2fefbbcff8d46cfd00efa8d2c13956b388d6bec\"\u003e\u003ccode\u003ea2fefbb\u003c/code\u003e\u003c/a\u003e Remove pypy310 builds (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/f60707e18f3f9728f2c6f4ce97fb8fc90721c7d3\"\u003e\u003ccode\u003ef60707e\u003c/code\u003e\u003c/a\u003e Bump wasi from 0.14.5+wasi-0.2.4 to 0.14.7+wasi-0.2.4 in /src/_bcrypt (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1071\"\u003e#1071\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/c790eed8fa205403e1ea0587cf9178e866c940f3\"\u003e\u003ccode\u003ec790eed\u003c/code\u003e\u003c/a\u003e Bump unicode-ident from 1.0.18 to 1.0.19 in /src/_bcrypt (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1070\"\u003e#1070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/122cbdc6895fd70c044a2f4ad7845c2a56b93096\"\u003e\u003ccode\u003e122cbdc\u003c/code\u003e\u003c/a\u003e Bump target-lexicon from 0.13.2 to 0.13.3 in /src/_bcrypt (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/2bd208d6c5cadba2f983280ec21cc8cf977904d0\"\u003e\u003ccode\u003e2bd208d\u003c/code\u003e\u003c/a\u003e Bump wasi from 0.14.4+wasi-0.2.4 to 0.14.5+wasi-0.2.4 in /src/_bcrypt (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1068\"\u003e#1068\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/e1aa9e883090e0267bd7b38964fe852f70a99b88\"\u003e\u003ccode\u003ee1aa9e8\u003c/code\u003e\u003c/a\u003e remove poinless cargo cache paths from CI (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1067\"\u003e#1067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/bcrypt/compare/3.2.2...5.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx` from 0.27.2 to 0.28.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/releases\"\u003ehttpx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.28.1\u003c/h2\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.28.0\u003c/h2\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/HEAD/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/blob/master/CHANGELOG.md\"\u003ehttpx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eBe aware that the default \u003cem\u003eJSON request bodies now use a more compact representation\u003c/em\u003e. This is generally considered a prefered style, tho may require updates to test suites.\u003c/p\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations...\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/master/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/26d48e0634e6ee9cdc0533996db289ce4b430177\"\u003e\u003ccode\u003e26d48e0\u003c/code\u003e\u003c/a\u003e Version 0.28.1 (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3445\"\u003e#3445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/89599a9541af14bcf906fc4ed58ccbdf403802ba\"\u003e\u003ccode\u003e89599a9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003everify=False\u003c/code\u003e, \u003ccode\u003ecert=...\u003c/code\u003e case. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/8ecb86f0d74ffc52d4663214fae9526bee89358d\"\u003e\u003ccode\u003e8ecb86f\u003c/code\u003e\u003c/a\u003e Add test for request params behavior changes (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3440\"\u003e#3440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/0cb7e5a2e736628e2f506d259fcf0d48cd2bde82\"\u003e\u003ccode\u003e0cb7e5a\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 11 updates (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/15e21e9ea3cad4f06e22a7e704aabefdf43d2e29\"\u003e\u003ccode\u003e15e21e9\u003c/code\u003e\u003c/a\u003e Updating deprecated docstring Client() class (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3426\"\u003e#3426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/80960fa31918d7663c3f4c3ad61661cf0e80628f\"\u003e\u003ccode\u003e80960fa\u003c/code\u003e\u003c/a\u003e Version 0.28.0. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3419\"\u003e#3419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/a33c87852b8a0dddc65e5f739af1e0a6fca4b91f\"\u003e\u003ccode\u003ea33c878\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eextensions\u003c/code\u003e type annotation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3380\"\u003e#3380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/ce7e14da27abba6574be9b3ea7cd5990556a9343\"\u003e\u003ccode\u003ece7e14d\u003c/code\u003e\u003c/a\u003e Error on verify as str. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3418\"\u003e#3418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/47f4a96ffaaaa07dca1614409549b5d7a6e7af49\"\u003e\u003ccode\u003e47f4a96\u003c/code\u003e\u003c/a\u003e Handle empty zstd responses (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3412\"\u003e#3412\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/189fc4bcbe5f314128775dec66a616ac9a31ad48\"\u003e\u003ccode\u003e189fc4b\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md, fix typo(s) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3406\"\u003e#3406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/httpx/compare/0.27.2...0.28.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pandas` from 2.2.3 to 3.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pandas-dev/pandas/releases\"\u003epandas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epandas 3.0.3\u003c/h2\u003e\n\u003cp\u003eWe are pleased to announce the release of pandas 3.0.3.\nThis is a patch release in the 3.0.x series and includes some regression fixes and bug fixes. We recommend that all users of the 3.0.x series upgrade to this version.\u003c/p\u003e\n\u003cp\u003eSee the \u003ca href=\"https://pandas.pydata.org/docs/whatsnew/v3.0.3.html\"\u003efull whatsnew\u003c/a\u003e for a list of all the changes.\u003c/p\u003e\n\u003cp\u003ePandas 3.0 supports Python 3.11 and higher.\nThe release can be installed from PyPI:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pandas==3.0.*\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOr from conda-forge\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003econda install -c conda-forge pandas=3.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePlease report any issues with the release on the \u003ca href=\"https://github.com/pandas-dev/pandas/issues\"\u003epandas issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThanks to all the contributors who made this release possible.\u003c/p\u003e\n\u003ch2\u003epandas 3.0.2\u003c/h2\u003e\n\u003cp\u003eWe are pleased to announce the release of pandas 3.0.2.\nThis is a patch release in the 3.0.x series and includes some regression fixes and bug fixes. We recommend that all users of the 3.0.x series upgrade to this version.\u003c/p\u003e\n\u003cp\u003eSee the \u003ca href=\"https://pandas.pydata.org/docs/dev/whatsnew/v3.0.2.html\"\u003efull whatsnew\u003c/a\u003e for a list of all the changes.\u003c/p\u003e\n\u003cp\u003ePandas 3.0 supports Python 3.11 and higher.\nThe release can be installed from PyPI:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pandas==3.0.*\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOr from conda-forge\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003econda install -c conda-forge pandas=3.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePlease report any issues with the release on the \u003ca href=\"https://github.com/pandas-dev/pandas/issues\"\u003epandas issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThanks to all the contributors who made this release possible.\u003c/p\u003e\n\u003ch2\u003epandas 3.0.1\u003c/h2\u003e\n\u003cp\u003eWe are pleased to announce the release of pandas 3.0.1.\nThis is a patch release in the 3.0.x series and includes some regression fixes and bug fixes. We recommend that all users of the 3.0.x series upgrade to this version.\u003c/p\u003e\n\u003cp\u003eSee the \u003ca href=\"https://pandas.pydata.org/docs/dev/whatsnew/v3.0.1.html\"\u003efull whatsnew\u003c/a\u003e for a list of all the changes.\u003c/p\u003e\n\u003cp\u003ePandas 3.0.0 supports Python 3.11 and higher.\nThe release can be installed from PyPI:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pandas==3.0.*\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOr from conda-forge\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/72f2fea91530b5abb3cf2100cb22d84e504695c0\"\u003e\u003ccode\u003e72f2fea\u003c/code\u003e\u003c/a\u003e RLS: 3.0.3 (\u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65590\"\u003e#65590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/2897590094c2b6e3962d01a82665936f30be563d\"\u003e\u003ccode\u003e2897590\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65436\"\u003e#65436\u003c/a\u003e on branch 3.0.x (Account for privatization of matplotlib `...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/49894b5b6037c50f6444504070d9b1e8e514001a\"\u003e\u003ccode\u003e49894b5\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65499\"\u003e#65499\u003c/a\u003e on branch 3.0.x (BUG: fix check if pyarrow is installed in...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/1c6d1e30cc4b80bedb769a8b3731b0788f69c9dc\"\u003e\u003ccode\u003e1c6d1e3\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] PERF: remove special casing for zoneinfo in tz_localize_to_u...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/2a547116afc46d88d4e6584670fd793949222a1e\"\u003e\u003ccode\u003e2a54711\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/64379\"\u003e#64379\u003c/a\u003e on branch 3.0.x (PERF: improve performance with ZoneInfo t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/036bb7c0e7160b9d5a7f6bd26a9fc00921fa6977\"\u003e\u003ccode\u003e036bb7c\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65482\"\u003e#65482\u003c/a\u003e on branch 3.0.x (PERF: don't call unique on dtypes for che...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/bf4c182b09251f5b469e8e246ae3ea3e1ae07164\"\u003e\u003ccode\u003ebf4c182\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65410\"\u003e#65410\u003c/a\u003e on branch 3.0.x (TST: also convert str index to object in ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/dd02d75ce219135f9f3f65c13644d4be35585d42\"\u003e\u003ccode\u003edd02d75\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] BUG: keep fsspec OpenFile alive for chained URL reads (\u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/6547\"\u003e#6547\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/aef3d0f6698667262c6d6ffc69180b280b0fa86a\"\u003e\u003ccode\u003eaef3d0f\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] CI: lowercase types-pymysql/types-pyyaml to fix mamba 2.6.0 ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/bb8e24876273a14322047f4b89e648f6a4abebae\"\u003e\u003ccode\u003ebb8e248\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65399\"\u003e#65399\u003c/a\u003e on branch 3.0.x (DOC: fix source link for classes in the r...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pandas-dev/pandas/compare/v2.2.3...v3.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.1.1 to 2.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.1 (July 4, 2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.1 ...\n\n_Description has been truncated_","html_url":"https://github.com/x812033727/FinceptWeb99/pull/134","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/x812033727%2FFinceptWeb99/issues/134","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/134/packages"},{"uuid":"4888628618","node_id":"PR_kwDOTX5FXM7x03wJ","number":15,"state":"closed","title":"chore(deps-dev): bump ruff from 0.15.20 to 0.15.21 in /backend in the backend-dependencies group","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-15T02:29:26.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-15T02:05:23.000Z","updated_at":"2026-07-15T02:29:33.000Z","time_to_close":1443,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps-dev)","packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":"/backend in the backend-dependencies group","ecosystem":"pip"},"body":"Bumps the backend-dependencies group in /backend with 1 update: [ruff](https://github.com/astral-sh/ruff).\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=pip\u0026previous-version=0.15.20\u0026new-version=0.15.21)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/byeok99/Sai42/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/byeok99%2FSai42/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"4888529311","node_id":"PR_kwDOS0cVoc7x0jtz","number":17,"state":"closed","title":"Bump ruff from 0.15.17 to 0.15.21","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-18T00:43:20.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-15T01:43:28.000Z","updated_at":"2026-07-18T00:43:22.000Z","time_to_close":255592,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"ruff","old_version":"0.15.17","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.17 to 0.15.21.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.17...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=pip\u0026previous-version=0.15.17\u0026new-version=0.15.21)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/nickkats1/Agentic-Chatbot/pull/17","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickkats1%2FAgentic-Chatbot/issues/17","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/17/packages"},{"uuid":"4886079563","node_id":"PR_kwDOH8gfRs7xsmsL","number":249,"state":"closed","title":"Bump the all-dependencies group with 23 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-15T01:18:47.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-14T18:47:23.000Z","updated_at":"2026-07-15T01:18:49.000Z","time_to_close":23484,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"all-dependencies","update_count":23,"packages":[{"name":"pygments","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/pygments/pygments"},{"name":"docutils","old_version":"0.22.3","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"snowballstemmer","old_version":"3.0.1","new_version":"3.1.1","repository_url":"https://github.com/snowballstem/snowball"},{"name":"babel","old_version":"2.17.0","new_version":"2.18.0","repository_url":"https://github.com/python-babel/babel"},{"name":"imagesize","old_version":"1.4.1","new_version":"2.0.0","repository_url":"https://github.com/shibukawa/imagesize_py"},{"name":"requests","old_version":"2.32.5","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"roman-numerals","old_version":"3.1.0","new_version":"4.1.0","repository_url":"https://github.com/AA-Turner/roman-numerals"},{"name":"packaging","old_version":"25.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"ruff","old_version":"0.14.9","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"build","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/pypa/build"},{"name":"pypi-attestations","old_version":"0.0.28","new_version":"0.0.29","repository_url":"https://github.com/pypi/pypi-attestations"},{"name":"pytest","old_version":"9.0.1","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"cython","old_version":"3.2.2","new_version":"3.2.8","repository_url":"https://github.com/cython/cython"},{"name":"setuptools","old_version":"80.9.0","new_version":"83.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"mypy","old_version":"1.19.1","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"pyrefly","old_version":"0.44.0","new_version":"1.1.1","repository_url":"https://github.com/facebook/pyrefly"},{"name":"pyright","old_version":"1.1.407","new_version":"1.1.411","repository_url":"https://github.com/RobertCraigie/pyright-python"},{"name":"ty","old_version":"0.0.1a30","new_version":"0.0.59","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-colorama","old_version":"0.4.15.20250801","new_version":"0.4.15.20260508","repository_url":"https://github.com/python/typeshed"},{"name":"types-defusedxml","old_version":"0.7.0.20250822","new_version":"0.7.0.20260504","repository_url":"https://github.com/python/typeshed"},{"name":"types-docutils","old_version":"0.22.3.20251115","new_version":"0.22.3.20260712","repository_url":"https://github.com/python/typeshed"},{"name":"types-requests","old_version":"2.32.4.20250913","new_version":"2.33.0.20260712","repository_url":"https://github.com/python/typeshed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the all-dependencies group with 23 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pygments](https://github.com/pygments/pygments) | `2.19.2` | `2.20.0` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.22.3` | `0.23` |\n| [snowballstemmer](https://github.com/snowballstem/snowball) | `3.0.1` | `3.1.1` |\n| [babel](https://github.com/python-babel/babel) | `2.17.0` | `2.18.0` |\n| [imagesize](https://github.com/shibukawa/imagesize_py) | `1.4.1` | `2.0.0` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.34.2` |\n| [roman-numerals](https://github.com/AA-Turner/roman-numerals) | `3.1.0` | `4.1.0` |\n| [packaging](https://github.com/pypa/packaging) | `25.0` | `26.2` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.14.9` | `0.15.21` |\n| [build](https://github.com/pypa/build) | `1.3.0` | `1.5.1` |\n| [pypi-attestations](https://github.com/pypi/pypi-attestations) | `0.0.28` | `0.0.29` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.1` | `9.1.1` |\n| [cython](https://github.com/cython/cython) | `3.2.2` | `3.2.8` |\n| [setuptools](https://github.com/pypa/setuptools) | `80.9.0` | `83.0.0` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [mypy](https://github.com/python/mypy) | `1.19.1` | `2.3.0` |\n| [pyrefly](https://github.com/facebook/pyrefly) | `0.44.0` | `1.1.1` |\n| [pyright](https://github.com/RobertCraigie/pyright-python) | `1.1.407` | `1.1.411` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a30` | `0.0.59` |\n| [types-colorama](https://github.com/python/typeshed) | `0.4.15.20250801` | `0.4.15.20260508` |\n| [types-defusedxml](https://github.com/python/typeshed) | `0.7.0.20250822` | `0.7.0.20260504` |\n| [types-docutils](https://github.com/python/typeshed) | `0.22.3.20251115` | `0.22.3.20260712` |\n| [types-requests](https://github.com/python/typeshed) | `2.32.4.20250913` | `2.33.0.20260712` |\n\nUpdates `pygments` from 2.19.2 to 2.20.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygments/pygments/releases\"\u003epygments's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.20.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNew lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRell (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003earchetype: Fix catastrophic backtracking in GUID and ID patterns (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3064\"\u003e#3064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eASN.1: Recognize minus sign and fix range operator (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3014\"\u003e#3014\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eC++: Add C++26 keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e), add integer literal suffixes (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eComponentPascal: Fix \u003ccode\u003eanalyse_text\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3028\"\u003e#3028\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3032\"\u003e#3032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCoq renamed to Rocq (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2883\"\u003e#2883\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2908\"\u003e#2908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCython: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2932\"\u003e#2932\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDebian control: Improve architecture parsing (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3052\"\u003e#3052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDevicetree: Add support for overlay/fragments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3021\"\u003e#3021\u003c/a\u003e), add bytestring support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3022\"\u003e#3022\u003c/a\u003e), fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3057\"\u003e#3057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFennel: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHaskell: Handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/1795\"\u003e#1795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eJava: Add module keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLean4: Add operators \u003ccode\u003e]'\u003c/code\u003e, \u003ccode\u003e]?\u003c/code\u003e, \u003ccode\u003e]!\u003c/code\u003e  (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2946\"\u003e#2946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLESS: Support single-line comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLilyPond: Update to 2.25.29 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLLVM: Support C-style comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3023\"\u003e#3023\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2978\"\u003e#2978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLua(u): Fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3047\"\u003e#3047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMacaulay2: Update to 1.25.05 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2893\"\u003e#2893\u003c/a\u003e), 1.25.11 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2988\"\u003e#2988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMathematica: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2957\"\u003e#2957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emeson: Add additional operators (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMySQL: Update keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eorg-Mode: Support both schedule and deadline (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2899\"\u003e#2899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePHP: Add \u003ccode\u003e__PROPERTY__\u003c/code\u003e magic constant (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2924\"\u003e#2924\u003c/a\u003e), add reserved keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3002\"\u003e#3002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePostgreSQL: Add more keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprotobuf: Fix namespace tokenization (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2929\"\u003e#2929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython: Add \u003ccode\u003et\u003c/code\u003e-string support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2973\"\u003e#2973\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3009\"\u003e#3009\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTablegen: Fix infinite loop (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2972\"\u003e#2972\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTera Term macro: Add commands introduced in v5.3 through v5.6 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTOML: Support TOML 1.1.0 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3026\"\u003e#3026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTurtle: Allow empty comment lines (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2980\"\u003e#2980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eXML: Added \u003ccode\u003e.xbrl\u003c/code\u003e as file ending (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2890\"\u003e#2890\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2891\"\u003e#2891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop Python 3.8, and add Python 3.14 as a supported version (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2987\"\u003e#2987\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to \u003ccode\u003eautopygmentize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2894\"\u003e#2894\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eonedark\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ertt\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2895\"\u003e#2895\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCache entry points to improve performance (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003exterm-256\u003c/code\u003e color table (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3043\"\u003e#3043\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003ekwargs\u003c/code\u003e dictionary getting mutated on each call (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3044\"\u003e#3044\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygments/pygments/blob/master/CHANGES\"\u003epygments's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.20.0\u003c/h2\u003e\n\u003cp\u003e(released March 29th, 2026)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNew lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRell (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003earchetype: Fix catastrophic backtracking in GUID and ID patterns (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3064\"\u003e#3064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eASN.1: Recognize minus sign and fix range operator (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3014\"\u003e#3014\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eC++: Add C++26 keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e), add integer literal suffixes (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eComponentPascal: Fix \u003ccode\u003eanalyse_text\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3028\"\u003e#3028\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3032\"\u003e#3032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCoq renamed to Rocq (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2883\"\u003e#2883\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2908\"\u003e#2908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCython: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2932\"\u003e#2932\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDebian control: Improve architecture parsing (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3052\"\u003e#3052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDevicetree: Add support for overlay/fragments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3021\"\u003e#3021\u003c/a\u003e), add bytestring support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3022\"\u003e#3022\u003c/a\u003e), fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3057\"\u003e#3057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFennel: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHaskell: Handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/1795\"\u003e#1795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eJava: Add module keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLean4: Add operators \u003ccode\u003e]'\u003c/code\u003e, \u003ccode\u003e]?\u003c/code\u003e, \u003ccode\u003e]!\u003c/code\u003e  (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2946\"\u003e#2946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLESS: Support single-line comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLilyPond: Update to 2.25.29 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLLVM: Support C-style comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3023\"\u003e#3023\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2978\"\u003e#2978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLua(u): Fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3047\"\u003e#3047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMacaulay2: Update to 1.25.05 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2893\"\u003e#2893\u003c/a\u003e), 1.25.11 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2988\"\u003e#2988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMathematica: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2957\"\u003e#2957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emeson: Add additional operators (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMySQL: Update keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eorg-Mode: Support both schedule and deadline (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2899\"\u003e#2899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePHP: Add \u003ccode\u003e__PROPERTY__\u003c/code\u003e magic constant (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2924\"\u003e#2924\u003c/a\u003e), add reserved keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3002\"\u003e#3002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePostgreSQL: Add more keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprotobuf: Fix namespace tokenization (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2929\"\u003e#2929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython: Add \u003ccode\u003et\u003c/code\u003e-string support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2973\"\u003e#2973\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3009\"\u003e#3009\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTablegen: Fix infinite loop (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2972\"\u003e#2972\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTera Term macro: Add commands introduced in v5.3 through v5.6 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTOML: Support TOML 1.1.0 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3026\"\u003e#3026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTurtle: Allow empty comment lines (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2980\"\u003e#2980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eXML: Added \u003ccode\u003e.xbrl\u003c/code\u003e as file ending (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2890\"\u003e#2890\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2891\"\u003e#2891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop Python 3.8, and add Python 3.14 as a supported version (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2987\"\u003e#2987\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to \u003ccode\u003eautopygmentize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2894\"\u003e#2894\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eonedark\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ertt\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2895\"\u003e#2895\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCache entry points to improve performance (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003exterm-256\u003c/code\u003e color table (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3043\"\u003e#3043\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003ekwargs\u003c/code\u003e dictionary getting mutated on each call (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3044\"\u003e#3044\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/708197d82827ba2d5ca78bcbb653c7102ce86dcd\"\u003e\u003ccode\u003e708197d\u003c/code\u003e\u003c/a\u003e Fix underline length.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/1d4538ae8621d766ecc91ff59caf76ab75983abc\"\u003e\u003ccode\u003e1d4538a\u003c/code\u003e\u003c/a\u003e Prepare 2.20 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/2ceaee4e634eebae2d10a47fd05406871f6bac8f\"\u003e\u003ccode\u003e2ceaee4\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/e3a3c54b58c7f80bc4db887e471d4f91c77844ed\"\u003e\u003ccode\u003ee3a3c54\u003c/code\u003e\u003c/a\u003e Fix Haskell lexer: handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/d7c3453e342dac319f58e4091f4ef183cc49d802\"\u003e\u003ccode\u003ed7c3453\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3071\"\u003e#3071\u003c/a\u003e from pygments/harden-html-formatter\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/0f97e7c37d44abfa4ddfddf44a3290fdad586034\"\u003e\u003ccode\u003e0f97e7c\u003c/code\u003e\u003c/a\u003e Harden the HTML formatter against CSS.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/9f981b2ba42b88ca5bdcebf12cd01efd7cd80aec\"\u003e\u003ccode\u003e9f981b2\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/1d889151024e9a53f3702a60558b29b070306e9e\"\u003e\u003ccode\u003e1d88915\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/c3d93adb9827fc054c3c12b47bde31c781a36a93\"\u003e\u003ccode\u003ec3d93ad\u003c/code\u003e\u003c/a\u003e Fix ASN.1 lexer: recognize minus sign and fix range operator (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/4f06bcf8a5ba3f2b5bda24a26ccf041a1a65d91e\"\u003e\u003ccode\u003e4f06bcf\u003c/code\u003e\u003c/a\u003e fix bad behaving backtracking regex in CommonLispLexer\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygments/pygments/compare/2.19.2...2.20.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `docutils` from 0.22.3 to 0.23\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/rtfd/recommonmark/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `snowballstemmer` from 3.0.1 to 3.1.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/snowballstem/snowball/blob/main/NEWS\"\u003esnowballstemmer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eSnowball 3.1.1 (2026-06-03)\u003c/h1\u003e\n\u003ch2\u003eCompiler changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix a segmentation fault after reporting an error for a string command\nnot followed by a string variable name or string literal.  Bug introduced\nin 3.1.0.  Patch from Jerry James (\u003ca href=\"https://redirect.github.com/snowballstem/snowball/issues/287\"\u003e#287\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCompiler command-line options:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEmit an error for \u003ccode\u003e-o -\u003c/code\u003e/\u003ccode\u003e-output -\u003c/code\u003e.  Output to stdout is not supported\nbecause we need to generate multiple files for some target languages.\nWe were interpreting \u003ccode\u003e-\u003c/code\u003e as a base filename to append extensions to, so\nwe'd create \u003ccode\u003e-.c\u003c/code\u003e and \u003ccode\u003e-.h\u003c/code\u003e for C, but creating filenames that start with\n\u003ccode\u003e-\u003c/code\u003e seems unhelpful.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eGeneric code generation changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVariable localisation was failing to check the expression on the RHS of an\ninteger test for uses of a variable, so could incorrectly localise an\ninteger variable whose value should have persisted between calls to a\nfunction.  This bug won't realistically manifest in real world Snowball\ncode.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOptimisations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eInline some routines which are only used once.  This is done for routines\nconsisting of a single non-compound command (or cases such as \u003ccode\u003enot \u0026lt;boolean\u0026gt;\u003c/code\u003e and \u003ccode\u003egoto \u0026lt;grouping\u0026gt;\u003c/code\u003e which we internally synthesise a\nnon-compound command for).  Localisation of variables happens after\ninlining, so variables can now be localised in more cases.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003etest next\u003c/code\u003e and \u003ccode\u003enot next\u003c/code\u003e are both now simplified to a comparison between\n\u003ccode\u003ecursor\u003c/code\u003e and \u003ccode\u003elimit\u003c/code\u003e (like \u003ccode\u003enot atlimit\u003c/code\u003e and \u003ccode\u003eatlimit\u003c/code\u003e).  We already\nnormalise \u003ccode\u003ehop 1\u003c/code\u003e to \u003ccode\u003enext\u003c/code\u003e, so \u003ccode\u003etest hop 1\u003c/code\u003e and \u003ccode\u003enot hop 1\u003c/code\u003e are also\nsimplified in this way.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSimplify \u003ccode\u003enot\u003c/code\u003e applied to an integer test by removing the \u003ccode\u003enot\u003c/code\u003e and\nflipping the sense of the test (e.g. \u003ccode\u003enot $(x \u0026gt; y)\u003c/code\u003e becomes \u003ccode\u003e$(x \u0026lt;= y)\u003c/code\u003e)\nwhich results in simpler generated code.  More usefully in real world code,\nthis also results in simpler generated code for \u003ccode\u003enot atlimit\u003c/code\u003e (since\n\u003ccode\u003eatlimit\u003c/code\u003e is converted \u003ccode\u003e$(cursor \u0026gt;= limit)\u003c/code\u003e or \u003ccode\u003e$(cursor \u0026lt;= limit)\u003c/code\u003e\n(depending on the current direction).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/cd195b51e948a902a4312f023f4a14392516a543\"\u003e\u003ccode\u003ecd195b5\u003c/code\u003e\u003c/a\u003e Update for 3.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/80d885c983019967339bbea003e0a8f724ba0f58\"\u003e\u003ccode\u003e80d885c\u003c/code\u003e\u003c/a\u003e NEWS: Update draft entry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/5346c74eaedfdd9495ccc8afd5d6957da9e95258\"\u003e\u003ccode\u003e5346c74\u003c/code\u003e\u003c/a\u003e C++: Compile runtime as C++\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/537f9702e635f8dad03441775aebe53565492ed7\"\u003e\u003ccode\u003e537f970\u003c/code\u003e\u003c/a\u003e python: Add classifier for 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/3aeb013c9ffd2f2df15c6ef9cc956a7f825e4fd2\"\u003e\u003ccode\u003e3aeb013\u003c/code\u003e\u003c/a\u003e python: Skip Natural Language :: Sesotho classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/91fa20b842db0f422ea02d26d59f518dbae72c63\"\u003e\u003ccode\u003e91fa20b\u003c/code\u003e\u003c/a\u003e NEWS: Update draft entry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/a04abeb4f95eed8757b5107694fa0424c7026a79\"\u003e\u003ccode\u003ea04abeb\u003c/code\u003e\u003c/a\u003e Don't use extern \u0026quot;C\u0026quot; for functions which can throw\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/49bb623cb9b0ca05267d939c2e2f56c10b63dc6c\"\u003e\u003ccode\u003e49bb623\u003c/code\u003e\u003c/a\u003e C++: Hook up properly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/7ab50ed5f4ed99f08d897100633345e488e07a05\"\u003e\u003ccode\u003e7ab50ed\u003c/code\u003e\u003c/a\u003e CI: Fix coverage job\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/5f0a33cc278f0973f5c987fdcf8aa1d1afa6ba95\"\u003e\u003ccode\u003e5f0a33c\u003c/code\u003e\u003c/a\u003e NEWS: Add draft entry\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/snowballstem/snowball/compare/v3.0.1...v3.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.17.0 to 2.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.18.0\u003c/h2\u003e\n\u003cp\u003eHappy 2026! Like last year's release (ahem...), this one too is being made from FOSDEM 2026, in Brussels, Belgium. 🇧🇪\nWe'll aspire for a less glacial release cycle for 2.19. 😁\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for the detailed change log.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-babel/babel/compare/v2.17.0...v2.18.0\"\u003ehttps://github.com/python-babel/babel/compare/v2.17.0...v2.18.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.18.0\u003c/h2\u003e\n\u003cp\u003eHappy 2026! This release is, coincidentally, also being made from FOSDEM.\u003c/p\u003e\n\u003cp\u003eWe will aspire for a slightly less glacial release cadence in this year;\nthere are interesting features in the pipeline.\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Core: Add `babel.core.get_cldr_version()` by @akx in :gh:`1242`\n* Core: Use CLDR 47 by @tomasr8 in :gh:`1210`\n* Core: Use canonical IANA zone names in zone_territories by @akx in :gh:`1220`\n* Messages: Improve extract performance via ignoring directories early during os.walk by @akx in :gh:`968`\n* Messages: Merge in per-format keywords and auto_comments by @akx in :gh:`1243`\n* Messages: Update keywords for extraction of dpgettext and dnpgettext by @mardiros in :gh:`1235`\n* Messages: Validate all plurals in Python format checker by @tomasr8 in :gh:`1188`\n* Time: Use standard library `timezone` instead of `FixedOffsetTimezone` by @akx in :gh:`1203`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCore: Fix formatting for \u0026quot;Empty locale identifier\u0026quot; exception added in \u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1164\"\u003e#1164\u003c/a\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1184\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCore: Improve handling of no-inheritance-marker in timezone data by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1194\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCore: Make the number pattern regular expression more efficient by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1213\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Keep translator comments next to the translation function call by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1196\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eNumbers: Fix KeyError that occurred when formatting compact currencies of exactly one thousand in several locales  by \u003ca href=\"https://github.com/bartbroere\"\u003e\u003ccode\u003e@​bartbroere\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1246\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Core: Avoid unnecessary uses of `map()` by @akx in :gh:`1180`\n* Messages: Have init-catalog create directories too by @akx in :gh:`1244`\n* Messages: Optimizations for read_po by @akx in :gh:`1200`\n* Messages: Use pathlib.Path() in catalog frontend; improve test coverage by @akx in :gh:`1204`\n\u003cp\u003eInfrastructure and documentation\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCI: Renovate CI \u0026amp; lint tools by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1228\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCI: Tighten up CI with Zizmor by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1230\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCI: make job permissions explicit by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1227\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Add SECURITY.md by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1229\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Remove u string prefix from docs by \u003ca href=\"https://github.com/verhovsky\"\u003e\u003ccode\u003e@​verhovsky\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1174\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Update dates.rst with current unicode.org tr35 link by \u003ca href=\"https://github.com/clach04\"\u003e\u003ccode\u003e@​clach04\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1189\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Add some PyPI classifiers by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1186\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Apply reformatting by hand and with Ruff by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1202\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Test on and declare support for Python 3.14 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1233\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/56c63caf50b18b152541b5dcafd51f645d867074\"\u003e\u003ccode\u003e56c63ca\u003c/code\u003e\u003c/a\u003e Prepare for 2.18.0 (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1248\"\u003e#1248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/73015a1217b90398fe76dcdc3b6e110ce26eb6d3\"\u003e\u003ccode\u003e73015a1\u003c/code\u003e\u003c/a\u003e Add user-agent to CLDR downloader (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1247\"\u003e#1247\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/29bd3624463f9b8694d09a308f67f353373c76af\"\u003e\u003ccode\u003e29bd362\u003c/code\u003e\u003c/a\u003e Fix formatting compact currencies of exactly one thousand in several locales ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/851db43b2b175c6bdf69ae6977cd6ad642506046\"\u003e\u003ccode\u003e851db43\u003c/code\u003e\u003c/a\u003e Reuse InitCatalog's guts in UpdateCatalog (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1244\"\u003e#1244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/fd00e60adf7e0c74821a77ff2a8b564e9985fd8e\"\u003e\u003ccode\u003efd00e60\u003c/code\u003e\u003c/a\u003e Extract: Merge in per-format keywords and auto_comments (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1243\"\u003e#1243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/12a14b6b3f09b6f5c8c745791dd4928f1d58fda0\"\u003e\u003ccode\u003e12a14b6\u003c/code\u003e\u003c/a\u003e Add dpgettext and dnpgettext support (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1235\"\u003e#1235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/7110e6206fd5ddc66db9613935fea8b8c668b7d5\"\u003e\u003ccode\u003e7110e62\u003c/code\u003e\u003c/a\u003e Use canonical IANA zone names in zone_territories (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1220\"\u003e#1220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/e91c3467b0f3bdc4433eab6820819fe69784c2bf\"\u003e\u003ccode\u003ee91c346\u003c/code\u003e\u003c/a\u003e Improve extract performance via ignoring directories early during os.walk (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/968\"\u003e#968\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/0c4f37838c3cb34cf527dd9890c1b69e98db1354\"\u003e\u003ccode\u003e0c4f378\u003c/code\u003e\u003c/a\u003e Convert Unittest testcases with setup/teardown to fixtures (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1240\"\u003e#1240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/218c96ee305aad95bccb6402af4b4be60ad17ab1\"\u003e\u003ccode\u003e218c96e\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003ebabel.core.get_cldr_version()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1242\"\u003e#1242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-babel/babel/compare/v2.17.0...v2.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `imagesize` from 1.4.1 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/5ab28d47b96d6a0738ec036034919a739b4d64da\"\u003e\u003ccode\u003e5ab28d4\u003c/code\u003e\u003c/a\u003e bump module version to 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/63d6afb8e24b9f9d599f7a15fa50ebc7964ad7c7\"\u003e\u003ccode\u003e63d6afb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/shibukawa/imagesize_py/issues/82\"\u003e#82\u003c/a\u003e from shibukawa/codex/update-readme-and-setup-instructi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/294606629eaf3950290de90a4b1ab9aaed7c89c3\"\u003e\u003ccode\u003e2946066\u003c/code\u003e\u003c/a\u003e docs: clarify EXIF orientation formats in v2.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/53eff2e3ab713b81883003bbd4eca586cc592431\"\u003e\u003ccode\u003e53eff2e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/shibukawa/imagesize_py/issues/81\"\u003e#81\u003c/a\u003e from shibukawa/codex/refactor-code-to-reduce-duplication\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/ac14f2af0208f9d57780d86ff619a32f80b90109\"\u003e\u003ccode\u003eac14f2a\u003c/code\u003e\u003c/a\u003e Refactor duplicated JPEG segment parsing logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/48ab954c707642d06081c8b5eae53b61b410715a\"\u003e\u003ccode\u003e48ab954\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/shibukawa/imagesize_py/issues/80\"\u003e#80\u003c/a\u003e from shibukawa/codex/add-avif-exif-rotation-support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/5cada1084cc21621541216810ecaf4514ca0e60b\"\u003e\u003ccode\u003e5cada10\u003c/code\u003e\u003c/a\u003e Add AVIF EXIF rotation support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/232c6d5204e38d5a288114c098304cc2f8358f69\"\u003e\u003ccode\u003e232c6d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/shibukawa/imagesize_py/issues/79\"\u003e#79\u003c/a\u003e from shibukawa/codex/add-heic/heif-support-and-rotation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/324c970eb6c8d5326a6e3e16216ed2d498358219\"\u003e\u003ccode\u003e324c970\u003c/code\u003e\u003c/a\u003e Add HEIC/HEIF size and rotation support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/7b7bb5f720401332eba12e93ad2e31d1bbc01cd4\"\u003e\u003ccode\u003e7b7bb5f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/shibukawa/imagesize_py/issues/78\"\u003e#78\u003c/a\u003e from shibukawa/codex/add-pypi-link-and-python-version-...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/shibukawa/imagesize_py/compare/1.4.1...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.32.5 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `roman-numerals` from 3.1.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/AA-Turner/roman-numerals/releases\"\u003eroman-numerals's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.1.0\u003c/h2\u003e\n\u003cp\u003eroman-numerals 4.1.0\u003c/p\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003cp\u003eroman-numerals 4.0.0\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/AA-Turner/roman-numerals/blob/master/CHANGES.rst\"\u003eroman-numerals's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.1.0 (released 17 Dec 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eRestore LICENCE.rst in the roman-numerals-py meta-package\u003c/li\u003e\n\u003cli\u003eAdd some debug assertions for unsafe blocks\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.0.0 (released 16 Dec 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eRename Python package to \u003ccode\u003eroman-numerals\u003c/code\u003e on PyPI.\u003c/li\u003e\n\u003cli\u003ePublish \u003ccode\u003eroman-numerals-py\u003c/code\u003e as a meta-package that depends\non \u003ccode\u003eroman-numerals\u003c/code\u003e and installs no modules.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eDeclare support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eIncrease the minimum supported Rust version (MSRV) to 1.81.0.\u003c/li\u003e\n\u003cli\u003eImplement the \u003ccode\u003ecore::error::Error\u003c/code\u003e trait for all error types.\u003c/li\u003e\n\u003cli\u003eImplement the \u003ccode\u003ecore::fmt\u003c/code\u003e traits in \u003ccode\u003eno-std\u003c/code\u003e mode.\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003eFrom\u0026lt;RomanNumeral\u0026gt;\u003c/code\u003e for most integer types.\u003c/li\u003e\n\u003cli\u003ePublish the \u003ccode\u003eroman-numerals-rs\u003c/code\u003e crate using \u003ccode\u003eTrusted Publishing \u0026lt;https://crates.io/docs/trusted-publishing\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/53c9c4eac63b91728fba3c26329163ee57654d21\"\u003e\u003ccode\u003e53c9c4e\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/a3793b83fab7064107ac56a482a6fa93bc9c5048\"\u003e\u003ccode\u003ea3793b8\u003c/code\u003e\u003c/a\u003e Add more SAFETY notes and debug assertions to unsafe blocks (\u003ca href=\"https://redirect.github.com/AA-Turner/roman-numerals/issues/106\"\u003e#106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/46d346e2d08b634856c79783e404616b65626ba7\"\u003e\u003ccode\u003e46d346e\u003c/code\u003e\u003c/a\u003e Adjust annotations in light of PEP 649\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/b8fae405d948415f7397ae4f64569c53cb623105\"\u003e\u003ccode\u003eb8fae40\u003c/code\u003e\u003c/a\u003e Adjust an example in the README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/a88464130711ad5e8d56e6ff747d17068ae17534\"\u003e\u003ccode\u003ea884641\u003c/code\u003e\u003c/a\u003e Restore LICENCE.rst in the roman-numerals-py meta-package\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/c3e1b6b4e6e02e5e19c26dc6f72bbb7b1060cca5\"\u003e\u003ccode\u003ec3e1b6b\u003c/code\u003e\u003c/a\u003e Release v4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/c335cb63ed97e684a4e9453639bfc7e9f487bb41\"\u003e\u003ccode\u003ec335cb6\u003c/code\u003e\u003c/a\u003e Add publishing step for the \u003ccode\u003eroman-numerals-py\u003c/code\u003e meta-package (\u003ca href=\"https://redirect.github.com/AA-Turner/roman-numerals/issues/105\"\u003e#105\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/649f6e62e7bd24123d7dd489609ae47168aaeb1b\"\u003e\u003ccode\u003e649f6e6\u003c/code\u003e\u003c/a\u003e Add Trusted Publishing workflow for crates.io (\u003ca href=\"https://redirect.github.com/AA-Turner/roman-numerals/issues/104\"\u003e#104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/ffa4dd1b33eae62f1bd1d44549e10a528b8f1f58\"\u003e\u003ccode\u003effa4dd1\u003c/code\u003e\u003c/a\u003e rust: Refactor tests (\u003ca href=\"https://redirect.github.com/AA-Turner/roman-numerals/issues/103\"\u003e#103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/26b41561c1d9813104548777b5ed9622d7125b38\"\u003e\u003ccode\u003e26b4156\u003c/code\u003e\u003c/a\u003e Simplify ASCII detection closures (\u003ca href=\"https://redirect.github.com/AA-Turner/roman-numerals/issues/102\"\u003e#102\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/AA-Turner/roman-numerals/compare/v3.1.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `packaging` from 25.0 to 26.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/releases\"\u003epackaging's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten by \u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) by \u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1168\"\u003epypa/packaging#1168\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1170\"\u003epypa/packaging#1170\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1171\"\u003epypa/packaging#1171\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: re-export ExceptionGroup for now by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1164\"\u003epypa/packaging#1164\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: add errors section and fix missing details by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1159\"\u003epypa/packaging#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(dev): document property-based test suite by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1167\"\u003epypa/packaging#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in DirectUrl documentation by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1169\"\u003epypa/packaging#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(specifiers): add is_unsatisfiable() usage example by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1166\"\u003epypa/packaging#1166\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1158\"\u003epypa/packaging#1158\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1174\"\u003epypa/packaging#1174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse native uv integration in rtd by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1175\"\u003epypa/packaging#1175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/packaging/compare/26.1...26.2\"\u003ehttps://github.com/pypa/packaging/compare/26.1...26.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e26.1\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cdel\u003ePEP 783: add handling for Emscripten wheel tags by \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/804\"\u003epypa/packaging#804\u003c/a\u003e\u003c/del\u003e (old name used in implementation, will be fixed in next release)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag by \u003ca href=\"https://github.com/ngoldbaum\"\u003e\u003ccode\u003e@​ngoldbaum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1099\"\u003epypa/packaging#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePEP 723: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package by \u003ca href=\"https://github.com/sirosen\"\u003e\u003ccode\u003e@​sirosen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1065\"\u003epypa/packaging#1065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/944\"\u003epypa/packaging#944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1071\"\u003epypa/packaging#1071\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1119\"\u003epypa/packaging#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1110\"\u003epypa/packaging#1110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e by \u003ca href=\"https://github.com/frostming\"\u003e\u003ccode\u003e@​frostming\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1068\"\u003epypa/packaging#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1146\"\u003epypa/packaging#1146\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1078\"\u003epypa/packaging#1078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1150\"\u003epypa/packaging#1150\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026lt;V.postN\u003c/code\u003e to match spec by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1140\"\u003epypa/packaging#1140\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/blob/main/CHANGELOG.rst\"\u003epackaging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e26.2 - 2026-04-24\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nFixes:\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten in (:pull:\u003ccode\u003e1160\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\u003cbr /\u003e\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\u003cbr /\u003e\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) (:pull:\u003ccode\u003e1163\u003c/code\u003e, :pull:\u003ccode\u003e1168\u003c/code\u003e, :pull:\u003ccode\u003e1170\u003c/code\u003e, :pull:\u003ccode\u003e1171\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRe-export \u003ccode\u003eExceptionGroup\u003c/code\u003e in metadata for now in (:pull:\u003ccode\u003e1164\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd errors section and fix missing details in (:pull:\u003ccode\u003e1159\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDocument our property-based test suite in (:pull:\u003ccode\u003e1167\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix a \u003ccode\u003eDirectUrl\u003c/code\u003e typo in (:pull:\u003ccode\u003e1169\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd example of \u003ccode\u003eis_unsatisfiable\u003c/code\u003e in (:pull:\u003ccode\u003e1166\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor in (:pull:\u003ccode\u003e1158\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees in (:pull:\u003ccode\u003e1174\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eUse new native ReadTheDocs uv integration in (:pull:\u003ccode\u003e1175\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e26.1 - 2026-04-14\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePEP 783: add handling for Emscripten wheel tags in (:pull:\u003ccode\u003e804\u003c/code\u003e) (old name used in implementation, fixed in next release)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag in (:pull:\u003ccode\u003e1099\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 735: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package in (:pull:\u003ccode\u003e1065\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module in (:pull:\u003ccode\u003e944\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module in (:pull:\u003ccode\u003e1071\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) in (:pull:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags in (:pull:\u003ccode\u003e1110\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e in (:pull:\u003ccode\u003e1068\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's in (:pull:\u003ccode\u003e1146\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e in (:pull:\u003ccode\u003e1078\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e in (:pull:\u003ccode\u003e1150\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026lt;V.postN\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1140\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNarrow exclusion of post-releases for \u003ccode\u003e\u0026gt;V\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1141\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003eformat_full_version\u003c/code\u003e to \u003ccode\u003e_format_full_version\u003c/code\u003e to make it visibly private in (:pull:\u003ccode\u003e1125\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict local version to ASCII in (:pull:\u003ccode\u003e1102\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePylock (PEP 751) updates:\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/84a87ee42483d7352f9502d78a9553da8859aa7a\"\u003e\u003ccode\u003e84a87ee\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4a616b65bed23c8c6d58e6b0fc1a4434d4ff1f14\"\u003e\u003ccode\u003e4a616b6\u003c/code\u003e\u003c/a\u003e docs: a few more updates to prepare for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1176\"\u003e#1176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/9de6f44f1e82d4595edf3aad1c4f6f98c85935a0\"\u003e\u003ccode\u003e9de6f44\u003c/code\u003e\u003c/a\u003e ci: use native uv integration in rtd (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1175\"\u003e#1175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/bc76e14debd1a2799d1ca8f9d9c9823f35bfa466\"\u003e\u003ccode\u003ebc76e14\u003c/code\u003e\u003c/a\u003e chore: update changelog for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1161\"\u003e#1161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/3f00091c08f0aa830e33ed7db00f16f11c8ac97f\"\u003e\u003ccode\u003e3f00091\u003c/code\u003e\u003c/a\u003e tests: add a pickle check (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1174\"\u003e#1174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/48a8a069805291186522de3eff73ea80a8ca96ad\"\u003e\u003ccode\u003e48a8a06\u003c/code\u003e\u003c/a\u003e fix: make Requirements/Markers pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1171\"\u003e#1171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/823b44ed1f904084a77ae3adf0ef130af6365f84\"\u003e\u003ccode\u003e823b44e\u003c/code\u003e\u003c/a\u003e fix: make Tags pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1170\"\u003e#1170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4bed32d920ca7211dd65fdf0a1ee06376e9c4733\"\u003e\u003ccode\u003e4bed32d\u003c/code\u003e\u003c/a\u003e fix: make Specifier / SpecifierSet pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1168\"\u003e#1168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/963118e37caae97bc8b72f72956c7fb4ca9857ec\"\u003e\u003ccode\u003e963118e\u003c/code\u003e\u003c/a\u003e fix: re-export ExceptionGroup for now (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1164\"\u003e#1164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/66e34a80256c96dea11da143682950c84b8133bb\"\u003e\u003ccode\u003e66e34a8\u003c/code\u003e\u003c/a\u003e docs(specifiers): add is_unsatisfiable() usage example (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1166\"\u003e#1166\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/packaging/compare/25.0...26.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.14.9 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/as...\n\n_Description has been truncated_","html_url":"https://github.com/sailfishos-mirror/sphinx/pull/249","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/sailfishos-mirror%2Fsphinx/issues/249","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/249/packages"},{"uuid":"4884369875","node_id":"PR_kwDOQ6OR-M7xnBGL","number":47,"state":"open","title":"ci: bump the pip-all group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python","ai-contributed","ai-failed"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-14T15:03:23.000Z","updated_at":"2026-07-14T15:24:04.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"ci: bump","group_name":"pip-all","update_count":20,"packages":[{"name":"ultralytics","old_version":"8.4.89","new_version":"8.4.95","repository_url":"https://github.com/ultralytics/ultralytics"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.68.4","repository_url":"https://github.com/tqdm/tqdm"},{"name":"boto3","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/boto/boto3"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"boto3-stubs","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"botocore","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/boto/botocore"},{"name":"build","old_version":"1.5.0","new_version":"1.5.1","repository_url":"https://github.com/pypa/build"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"cuda-pathfinder","old_version":"1.5.5","new_version":"1.5.6","repository_url":"https://github.com/NVIDIA/cuda-python"},{"name":"filelock","old_version":"3.29.5","new_version":"3.29.7","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"grpcio","old_version":"1.82.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"librt","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/mypyc/librt"},{"name":"mypy-boto3-ec2","old_version":"1.43.39","new_version":"1.43.46","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"mypy-boto3-lambda","old_version":"1.43.37","new_version":"1.43.47","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"narwhals","old_version":"2.23.0","new_version":"2.24.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"s3transfer","old_version":"0.19.0","new_version":"0.19.1","repository_url":"https://github.com/boto/s3transfer"},{"name":"types-requests","old_version":"2.33.0.20260518","new_version":"2.33.0.20260712","repository_url":"https://github.com/python/typeshed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-all group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ultralytics](https://github.com/ultralytics/ultralytics) | `8.4.89` | `8.4.95` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.68.4` |\n| [boto3](https://github.com/boto/boto3) | `1.43.40` | `1.43.47` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.15.21` |\n| [boto3-stubs](https://github.com/youtype/mypy_boto3_builder) | `1.43.40` | `1.43.47` |\n| [botocore](https://github.com/boto/botocore) | `1.43.40` | `1.43.47` |\n| [build](https://github.com/pypa/build) | `1.5.0` | `1.5.1` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.1` |\n| [cuda-pathfinder](https://github.com/NVIDIA/cuda-python) | `1.5.5` | `1.5.6` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.5` | `3.29.7` |\n| [grpcio](https://github.com/grpc/grpc) | `1.82.0` | `1.82.1` |\n| [librt](https://github.com/mypyc/librt) | `0.12.0` | `0.13.0` |\n| [mypy-boto3-ec2](https://github.com/youtype/mypy_boto3_builder) | `1.43.39` | `1.43.46` |\n| [mypy-boto3-lambda](https://github.com/youtype/mypy_boto3_builder) | `1.43.37` | `1.43.47` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.23.0` | `2.24.0` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.19.0` | `0.19.1` |\n| [types-requests](https://github.com/python/typeshed) | `2.33.0.20260518` | `2.33.0.20260712` |\n\n\nUpdates `ultralytics` from 8.4.89 to 8.4.95\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ultralytics/ultralytics/releases\"\u003eultralytics's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.4.95 - Fix restricted loading of training checkpoints (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25154\"\u003e#25154\u003c/a\u003e)\u003c/h2\u003e\n\u003ch2\u003e🌟 Summary\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ev8.4.95 improves training reliability, RT-DETR detection limits, input compatibility, and dataset usability—headlined by safer checkpoint loading for Platform GPU jobs.\u003c/strong\u003e 🚀\u003c/p\u003e\n\u003ch2\u003e📊 Key Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e🔒 Fixed restricted training checkpoint loading\u003c/strong\u003e — Raw checkpoints produced by Platform GPU workers no longer include training-only loss objects or NumPy scalar metadata that can be rejected by secure \u003ccode\u003eweights_only=True\u003c/code\u003e loading.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🎯 Improved RT-DETR \u003ccode\u003emax_det\u003c/code\u003e support\u003c/strong\u003e — The detection limit is now correctly applied during native prediction, validation, and model exports, including CoreML and other deployment formats.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🖼️ Expanded NumPy input compatibility\u003c/strong\u003e — NumPy images with grayscale, gray-plus-alpha, BGR, or BGRA channels are now normalized to match the model’s expected channel count.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🔢 Fixed uint8 tensor preprocessing\u003c/strong\u003e — Integer image tensors are handled without invalid floating-point dtype operations, while existing floating-point normalization behavior is preserved.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📦 Reduced automatic COCO downloads\u003c/strong\u003e — COCO detection, segmentation, and pose datasets no longer download the optional 7 GB \u003ccode\u003etest2017.zip\u003c/code\u003e by default. Standard downloads are now approximately 20.2–20.3 GB instead of about 27 GB.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🧪 Made segmentation conversion deterministic\u003c/strong\u003e — Mask files are processed in sorted filename order, improving repeatability across runs.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📈 Corrected pose metric curve labels\u003c/strong\u003e — Removed duplicate box labels so pose metrics align correctly with dashboards such as Weights \u0026amp; Biases.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📝 Clarified prediction and embedding return types\u003c/strong\u003e — Documentation and type hints now accurately indicate that streaming returns an iterator, while non-streaming calls return lists.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🛠️ Simplified edge-case handling\u003c/strong\u003e — Empty segmentation inputs now return a valid zero box immediately.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📚 Updated examples and training documentation\u003c/strong\u003e — The \u003ccode\u003eObjectCounter\u003c/code\u003e example now uses its returned results object, and automatic dataset download behavior is described more precisely.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🎯 Purpose \u0026amp; Impact\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eMore dependable cloud training:\u003c/strong\u003e Platform GPU workers can save, resume, and load raw training checkpoints more reliably, reducing avoidable job failures. ✅\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMore predictable deployment:\u003c/strong\u003e RT-DETR exports and validation now respect \u003ccode\u003emax_det\u003c/code\u003e, helping control output size, latency, and downstream processing requirements.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFewer input-related errors:\u003c/strong\u003e Applications using NumPy arrays or \u003ccode\u003euint8\u003c/code\u003e tensors can handle a wider range of camera and image formats without manual channel conversion.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFaster, lighter dataset setup:\u003c/strong\u003e Most COCO users save roughly 7 GB of storage and download time because test images without public ground truth are excluded.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMore reproducible data preparation:\u003c/strong\u003e Deterministic mask ordering makes conversion results and debugging more consistent.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eClearer analytics:\u003c/strong\u003e Correct pose labels prevent mislabeled or missing metric panels in experiment tracking tools.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNo major model architecture change:\u003c/strong\u003e This release focuses on reliability, compatibility, export behavior, and documentation rather than introducing a new model family. YOLO26 remains the latest recommended Ultralytics model for general use. 🌟\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStop coco.yaml and coco-pose.yaml from downloading test2017.zip by default by \u003ca href=\"https://github.com/raimbekovm\"\u003e\u003ccode\u003e@​raimbekovm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25136\"\u003eultralytics/ultralytics#25136\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse ObjectCounter results in the usage example by \u003ca href=\"https://github.com/parthivdholaria\"\u003e\u003ccode\u003e@​parthivdholaria\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23417\"\u003eultralytics/ultralytics#23417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eProcess segmentation masks in deterministic order by \u003ca href=\"https://github.com/AlexRTer\"\u003e\u003ccode\u003e@​AlexRTer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24390\"\u003eultralytics/ultralytics#24390\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify empty segment handling in segment2box by \u003ca href=\"https://github.com/1548093028\"\u003e\u003ccode\u003e@​1548093028\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23770\"\u003eultralytics/ultralytics#23770\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize uint8 tensor sources without dtype errors by \u003ca href=\"https://github.com/jahsef\"\u003e\u003ccode\u003e@​jahsef\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23743\"\u003eultralytics/ultralytics#23743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify automatic dataset downloads in training docs by \u003ca href=\"https://github.com/vedantparnaik\"\u003e\u003ccode\u003e@​vedantparnaik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24155\"\u003eultralytics/ultralytics#24155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify streamed prediction return types by \u003ca href=\"https://github.com/thiliapr\"\u003e\u003ccode\u003e@​thiliapr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24391\"\u003eultralytics/ultralytics#24391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify streamed embedding return types by \u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24134\"\u003eultralytics/ultralytics#24134\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ePoseMetrics.curves\u003c/code\u003e returning duplicated box labels by \u003ca href=\"https://github.com/JESUSROYETH\"\u003e\u003ccode\u003e@​JESUSROYETH\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25148\"\u003eultralytics/ultralytics#25148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize NumPy channel count to the model in \u003ccode\u003eLoadPilAndNumpy\u003c/code\u003e by \u003ca href=\"https://github.com/JESUSROYETH\"\u003e\u003ccode\u003e@​JESUSROYETH\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25151\"\u003eultralytics/ultralytics#25151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(rtdetr): honor max_det in decoder exports and validation by \u003ca href=\"https://github.com/Hasnaathussain\"\u003e\u003ccode\u003e@​Hasnaathussain\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25153\"\u003eultralytics/ultralytics#25153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix restricted loading of training checkpoints by \u003ca href=\"https://github.com/glenn-jocher\"\u003e\u003ccode\u003e@​glenn-jocher\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25154\"\u003eultralytics/ultralytics#25154\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thiliapr\"\u003e\u003ccode\u003e@​thiliapr\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24391\"\u003eultralytics/ultralytics#24391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/parthivdholaria\"\u003e\u003ccode\u003e@​parthivdholaria\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23417\"\u003eultralytics/ultralytics#23417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jahsef\"\u003e\u003ccode\u003e@​jahsef\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23743\"\u003eultralytics/ultralytics#23743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vedantparnaik\"\u003e\u003ccode\u003e@​vedantparnaik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24155\"\u003eultralytics/ultralytics#24155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/1548093028\"\u003e\u003ccode\u003e@​1548093028\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23770\"\u003eultralytics/ultralytics#23770\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexRTer\"\u003e\u003ccode\u003e@​AlexRTer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24390\"\u003eultralytics/ultralytics#24390\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24134\"\u003eultralytics/ultralytics#24134\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/f5f5d43d0bd2e6dd03e5a073eb3bf9687c7c6e4a\"\u003e\u003ccode\u003ef5f5d43\u003c/code\u003e\u003c/a\u003e Fix restricted loading of training checkpoints (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25154\"\u003e#25154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/cdccf05c7c094d011078d933244b809ef6e970b9\"\u003e\u003ccode\u003ecdccf05\u003c/code\u003e\u003c/a\u003e fix(rtdetr): honor max_det in decoder exports and validation (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25153\"\u003e#25153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/bacd7ccc90148f365ac89547e3e5d0c9c8cf206a\"\u003e\u003ccode\u003ebacd7cc\u003c/code\u003e\u003c/a\u003e Normalize NumPy channel count to the model in \u003ccode\u003eLoadPilAndNumpy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25151\"\u003e#25151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/c1ad93990c48120454eb9b9290fd6ce4743c7072\"\u003e\u003ccode\u003ec1ad939\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ePoseMetrics.curves\u003c/code\u003e returning duplicated box labels (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25148\"\u003e#25148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5e31e316d729b4781be067792fec46929a86ced3\"\u003e\u003ccode\u003e5e31e31\u003c/code\u003e\u003c/a\u003e Clarify streamed embedding return types (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24134\"\u003e#24134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/4fbd0882c88c25430a7c4bc23f69b92b294787ab\"\u003e\u003ccode\u003e4fbd088\u003c/code\u003e\u003c/a\u003e Clarify streamed prediction return types (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24391\"\u003e#24391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5eb325fa86a00faa3261f0e1530d8161d22ada15\"\u003e\u003ccode\u003e5eb325f\u003c/code\u003e\u003c/a\u003e Clarify automatic dataset downloads in training docs (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24155\"\u003e#24155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/71ca45a7b5d1e21d3416ce7e646200af4af41c8f\"\u003e\u003ccode\u003e71ca45a\u003c/code\u003e\u003c/a\u003e Normalize uint8 tensor sources without dtype errors (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/23743\"\u003e#23743\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/6754b6ecd5f3aa2d435db3c0bd9b0b9d24501f49\"\u003e\u003ccode\u003e6754b6e\u003c/code\u003e\u003c/a\u003e Simplify empty segment handling in segment2box (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/23770\"\u003e#23770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5acbce655cb6981759c1847c0c95d1a9be18ecd8\"\u003e\u003ccode\u003e5acbce6\u003c/code\u003e\u003c/a\u003e Process segmentation masks in deterministic order (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24390\"\u003e#24390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ultralytics/ultralytics/compare/v8.4.89...v8.4.95\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tqdm` from 4.68.3 to 4.68.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tqdm/tqdm/releases\"\u003etqdm's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003etqdm v4.68.4 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003etrim to \u003ccode\u003encols\u003c/code\u003e even when \u003ccode\u003e'{bar}' not in bar_format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1717\"\u003e#1717\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1767\"\u003e#1767\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003etqdm.write\u003c/code\u003e when \u003ccode\u003estdout=None\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1768\"\u003e#1768\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/53d096e77c28005b4f9fe1e9d6274ae311bf87e7\"\u003e\u003ccode\u003e53d096e\u003c/code\u003e\u003c/a\u003e bump version, merge pull request \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1768\"\u003e#1768\u003c/a\u003e from its-Sohan/fix/write-stdout-none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/74ff9929dfec128972eb68f9ff27ae40fae6a21c\"\u003e\u003ccode\u003e74ff992\u003c/code\u003e\u003c/a\u003e fix: prevent tqdm.write from crashing when sys.stdout is none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/3757d0d13ec86d73a838b55fc35ef89bc42a3461\"\u003e\u003ccode\u003e3757d0d\u003c/code\u003e\u003c/a\u003e Merge pull requests \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1717\"\u003e#1717\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1767\"\u003e#1767\u003c/a\u003e (fixes \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/55156ce4bed3457956d0557558b9bfb1c2de8a33\"\u003e\u003ccode\u003e55156ce\u003c/code\u003e\u003c/a\u003e fix: apply disp_trim to all format_meter return paths (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tqdm/tqdm/compare/v4.68.3...v4.68.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/11b997885803acb3a479c94338dcacbcfc107c64\"\u003e\u003ccode\u003e11b9978\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.47'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2a7cd54ca2b92b57deab9127ad73f11a162e634c\"\u003e\u003ccode\u003e2a7cd54\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/16f140d9d3b18e9957525c3ec2aa2af883f815d6\"\u003e\u003ccode\u003e16f140d\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c7888d6ae67b712df9be3462eeacd2c74e9e0c44\"\u003e\u003ccode\u003ec7888d6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/7db70eaaa1f3e68da7a6f590373a13b905c42849\"\u003e\u003ccode\u003e7db70ea\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1479621e3e478cfaa89f3b3327702865f0370968\"\u003e\u003ccode\u003e1479621\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.46\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/54abdb4aba7b980bf2fafd0d4e1043491eb6e63d\"\u003e\u003ccode\u003e54abdb4\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/75de6377d0a23c3468bfd8fc1740000599d73691\"\u003e\u003ccode\u003e75de637\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d3449aa60a089a207491d34f4a6f158bac78de50\"\u003e\u003ccode\u003ed3449aa\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/497253d2edd8f134e3af77d12916b89acb0857ba\"\u003e\u003ccode\u003e497253d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.45\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.40...1.43.47\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch3\u003ePackaging changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer provide mypyc-accelerated wheels for macOS x86_64 [mypyc-wheels \u003ca href=\"https://redirect.github.com/python/mypy/issues/119\"\u003e#119\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/mypyc/mypy_mypyc-wheels/pull/119\"\u003emypyc/mypy_mypyc-wheels#119\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3-stubs` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/youtype/mypy_boto3_builder/releases\"\u003eboto3-stubs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.8.0 - Python 3.8 runtime is back\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e \u003ccode\u003einstall_requires\u003c/code\u003e section is calculated based on dependencies in use, so \u003ccode\u003etyping-extensions\u003c/code\u003e version is set properly\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Replaced \u003ccode\u003etyping\u003c/code\u003e imports with \u003ccode\u003ecollections.abc\u003c/code\u003e with a fallback to \u003ccode\u003etyping\u003c/code\u003e for Python \u0026lt;3.9\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Added aliases for \u003ccode\u003ebuiltins.list\u003c/code\u003e, \u003ccode\u003ebuiltins.set\u003c/code\u003e, \u003ccode\u003ebuiltins.dict\u003c/code\u003e, and \u003ccode\u003ebuiltins.type\u003c/code\u003e, so Python 3.8 runtime should work as expected again (reported by \u003ca href=\"https://github.com/YHallouard\"\u003e\u003ccode\u003e@​YHallouard\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/youtype/mypy_boto3_builder/issues/340\"\u003e#340\u003c/a\u003e and \u003ca href=\"https://github.com/Omri-Ben-Yair\"\u003e\u003ccode\u003e@​Omri-Ben-Yair\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/youtype/mypy_boto3_builder/issues/336\"\u003e#336\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Unions use the same type annotations as the rest of the structures due to proper fallbacks\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e Universal input/output shapes were not replaced properly in service subresources\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[docs]\u003c/code\u003e Simplified doc links rendering for services\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e Cleaned up unnecessary imports in \u003ccode\u003eclient.pyi\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[builder]\u003c/code\u003e Import records with fallback are always rendered\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/youtype/mypy_boto3_builder/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `botocore` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/d5dccf3a48f775e729a550d81b4fe97d483ce2d7\"\u003e\u003ccode\u003ed5dccf3\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.47'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c4c3d0390f16ab46a67a072f94848deb0ac5bdac\"\u003e\u003ccode\u003ec4c3d03\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e8a69b4d1a7500ed3d8b623939ad8f7fb7bd9b92\"\u003e\u003ccode\u003ee8a69b4\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eefc25b1761c84e1e7e3fa237750daa79d7afbc6\"\u003e\u003ccode\u003eeefc25b\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/4249fcd7341f5d0168b038ce9ab30f98b1232c4e\"\u003e\u003ccode\u003e4249fcd\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/dbc7a739c17fac3a6d01d0e7b7e11b9faae4b580\"\u003e\u003ccode\u003edbc7a73\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/089203a13a3117eabaf8ca1f963b9665564888bf\"\u003e\u003ccode\u003e089203a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.46\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/601925e542e1cd3fcf2a861cbc0d1c0dbfacd92e\"\u003e\u003ccode\u003e601925e\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7831fa13c52d69b9f1caf2a85b0ef20dffa66ddf\"\u003e\u003ccode\u003e7831fa1\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/af6622c7a0c7d583fae766f96809ab856ce91a85\"\u003e\u003ccode\u003eaf6622c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.40...1.43.47\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.5.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(cli): accept sdist tarball as srcdir argument by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1057\"\u003epypa/build#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: drop 3.9 branches for version_info checks by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1059\"\u003epypa/build#1059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: skip test_uv_install_strips_pythonpath with missing uv by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1063\"\u003epypa/build#1063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove myself from codeowners by \u003ca href=\"https://github.com/FFY00\"\u003e\u003ccode\u003e@​FFY00\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1066\"\u003epypa/build#1066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: safe_extractall to use pathlib.Path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1060\"\u003epypa/build#1060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: secure GitHub Actions workflows by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1068\"\u003epypa/build#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings forwarding in build_package and build_package_via_sdist by \u003ca href=\"https://github.com/terminalchai\"\u003e\u003ccode\u003e@​terminalchai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1058\"\u003epypa/build#1058\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump virtualenv from 20.17 to 20.36.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1076\"\u003epypa/build#1076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump wheel from 0.36.0 to 0.38.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1075\"\u003epypa/build#1075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump pip from 22.3 to 26.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1074\"\u003epypa/build#1074\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: enforce lazy imports with flake8-lazy by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1088\"\u003epypa/build#1088\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(deps): show wanted vs found in missing-deps error by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1082\"\u003epypa/build#1082\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: align action pin version comments by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1091\"\u003epypa/build#1091\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update isolated env example to use DefaultIsolatedEnv by \u003ca href=\"https://github.com/shenxianpeng\"\u003e\u003ccode\u003e@​shenxianpeng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1090\"\u003epypa/build#1090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: compact test_parse_args with a typed make_kwargs helper by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1092\"\u003epypa/build#1092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(typing): ban explicit Any across src and tests by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1093\"\u003epypa/build#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): warn on valueless config settings by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1081\"\u003epypa/build#1081\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): add --sdist-extract-dir to reuse compiler caches by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1085\"\u003epypa/build#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⚠️ feat(util): deprecate project_wheel_metadata by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1084\"\u003epypa/build#1084\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump pre-commit tags by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1095\"\u003epypa/build#1095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat: report resolved build dependency versions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1086\"\u003epypa/build#1086\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(env): control the isolated build environment location by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1083\"\u003epypa/build#1083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): machine-readable build report, and metadata from a wheel by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1080\"\u003epypa/build#1080\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): drain verbose subprocess output without a worker thread by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1098\"\u003epypa/build#1098\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(cli): minor cleanups in builder and CLI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1099\"\u003epypa/build#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): reject a file as --env-dir and drop a mutable default by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1100\"\u003epypa/build#1100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add classifier for 3.15 (testing on beta already) by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1104\"\u003epypa/build#1104\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add lockfiles to gitignore by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1101\"\u003epypa/build#1101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add check-dist by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1103\"\u003epypa/build#1103\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): surface debug paths when a backend build fails by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1087\"\u003epypa/build#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: shorten changelog entries to concise highlights by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1105\"\u003epypa/build#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): raise dependency floors to 3.10 minimums and drop pytest cap by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1107\"\u003epypa/build#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump mypy, restrict pytest 9.1.0 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1108\"\u003epypa/build#1108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(cli): fix CLI warnings being written to stdout instead of stderr by \u003ca href=\"https://github.com/ymyzk\"\u003e\u003ccode\u003e@​ymyzk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1111\"\u003epypa/build#1111\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump vulnerable dependency floors (virtualenv, wheel) by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1113\"\u003epypa/build#1113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: default --installer to pip in argparse by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1117\"\u003epypa/build#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: build correct dest path in Windows symlink support probe by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1118\"\u003epypa/build#1118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: derive dist-info directory from wheel contents, not filename by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1119\"\u003epypa/build#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use LF instead of os.linesep when writing pip/uv requirements files by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1120\"\u003epypa/build#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: decide color support per output stream, not solely from stdout by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1123\"\u003epypa/build#1123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: open the wheel only once in metadata_path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1126\"\u003epypa/build#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: minor robustness fixes from code review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1121\"\u003epypa/build#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: simplify code paths found in review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1124\"\u003epypa/build#1124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eperf: memoize check_dependency by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1122\"\u003epypa/build#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: isolate color tests from NO_COLOR and FORCE_COLOR by \u003ca href=\"https://github.com/Yearnzq\"\u003e\u003ccode\u003e@​Yearnzq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1128\"\u003epypa/build#1128\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.5.1 (2026-07-09)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache\nreuse across rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds\n\u003cul\u003e\n\u003cli\u003eby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the\n\u0026quot;Debug a failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrain verbose subprocess output inline instead of using a \u003ccode\u003eThreadPoolExecutor\u003c/code\u003e, which silently swallowed logging\nerrors - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1098\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eReject a file passed as \u003ccode\u003e--env-dir\u003c/code\u003e with a clear error instead of a raw \u003ccode\u003eFileExistsError\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e\n(:issue:\u003ccode\u003e1100\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eEmit CLI warnings to stderr instead of stdout, so they no longer corrupt \u003ccode\u003e--metadata\u003c/code\u003e JSON output on stdout - by\n:user:\u003ccode\u003eymyzk\u003c/code\u003e (:issue:\u003ccode\u003e1111\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix the Windows symlink support probe always returning \u003ccode\u003eFalse\u003c/code\u003e due to a stale object interpolated into the\ndestination path - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emetadata_path\u003c/code\u003e's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by\n:user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWrite pip/uv requirements and constraints files with \u003ccode\u003e\\n\u003c/code\u003e instead of \u003ccode\u003eos.linesep\u003c/code\u003e, avoiding doubled \u003ccode\u003e\\r\\r\\n\u003c/code\u003e\nline endings on Windows - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1120\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eBatch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable\ndefault build-system table between builders, keep the original error when isolated-environment setup fails early, and\nraise \u003ccode\u003eBuildException\u003c/code\u003e for an invalid wheel - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDecide color support independently for stdout and stderr instead of only checking \u003ccode\u003estdout.isatty()\u003c/code\u003e, so redirecting\none stream no longer disables or leaks ANSI colors on the other - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1123\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eDeprecations and Removals\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate :func:\u003ccode\u003ebuild.util.project_wheel_metadata\u003c/code\u003e; use \u003ccode\u003epython -m build --metadata\u003c/code\u003e instead - by\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/d08fcd723500a7d676867144e1e7a22b650aeb7d\"\u003e\u003ccode\u003ed08fcd7\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/135801c502a7b36e25628d7c3ea9042fe8afa138\"\u003e\u003ccode\u003e135801c\u003c/code\u003e\u003c/a\u003e test: isolate color tests from NO_COLOR and FORCE_COLOR (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/820d4e5638eda9aa744528ab6b9a0e4be98d7d41\"\u003e\u003ccode\u003e820d4e5\u003c/code\u003e\u003c/a\u003e perf: memoize check_dependency (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/6c03264d186ce7a6c9f1e1990408a3a215dc7610\"\u003e\u003ccode\u003e6c03264\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/43c337a6bf55cbf2737bf938f3968be46ebc48b7\"\u003e\u003ccode\u003e43c337a\u003c/code\u003e\u003c/a\u003e refactor: simplify code paths found in review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1124\"\u003e#1124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/260ae22ee29fbca9b452a1b44cf3aacd09bb9250\"\u003e\u003ccode\u003e260ae22\u003c/code\u003e\u003c/a\u003e fix: minor robustness fixes from code review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/100e86e5e4f99167416b1d98783fc095223e0b8f\"\u003e\u003ccode\u003e100e86e\u003c/code\u003e\u003c/a\u003e refactor: open the wheel only once in metadata_path (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1126\"\u003e#1126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/272db6ce3474299b763674550ba0075954177ed3\"\u003e\u003ccode\u003e272db6c\u003c/code\u003e\u003c/a\u003e fix: decide color support per output stream, not solely from stdout (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1123\"\u003e#1123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/bc4ca7c7cb2033d7fecbfe82f8b3d7df7376572f\"\u003e\u003ccode\u003ebc4ca7c\u003c/code\u003e\u003c/a\u003e fix: use LF instead of os.linesep when writing pip/uv requirements files (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1120\"\u003e#1120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/16d8143d9979fc5432b8b1effb1dc3f6048c7840\"\u003e\u003ccode\u003e16d8143\u003c/code\u003e\u003c/a\u003e fix: derive dist-info directory from wheel contents, not filename (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.5.0...1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.4.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/cc6840753f17f00dea4e339ce37507747217e916\"\u003e\u003ccode\u003ecc68407\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/772\"\u003e#772\u003c/a\u003e from jawah/fix-regression-fallback-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/152b923c87e212e11c9591ff0a29ff35df719c91\"\u003e\u003ccode\u003e152b923\u003c/code\u003e\u003c/a\u003e chore: release 3.4.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2bc26076a86704fc19bc2ae811615b169373dea6\"\u003e\u003ccode\u003e2bc2607\u003c/code\u003e\u003c/a\u003e fix: unicodedecodeerror in fallback path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/be252d70c9f45846f0e851cc4d1829328540c825\"\u003e\u003ccode\u003ebe252d7\u003c/code\u003e\u003c/a\u003e chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/71c7bdd25514e5631c17be397abb6a2974b26e5b\"\u003e\u003ccode\u003e71c7bdd\u003c/code\u003e\u003c/a\u003e chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/768\"\u003e#768\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aeea391cc95761f1353b3914afcdee7a6e7589da\"\u003e\u003ccode\u003eaeea391\u003c/code\u003e\u003c/a\u003e chore(deps): bump pypa/cibuildwheel from 3.4.1 to 4.1.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/758\"\u003e#758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a6f8febd210c129ea741e6562fc06ee1ac437487\"\u003e\u003ccode\u003ea6f8feb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/770\"\u003e#770\u003c/a\u003e from jawah/unblock-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/528e16ce9105d10ea6cc66d41f237ba3c64c4392\"\u003e\u003ccode\u003e528e16c\u003c/code\u003e\u003c/a\u003e chore: add osv-scanner.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5993498b06d0bcb0cc1aaab1255742fef39a5aca\"\u003e\u003ccode\u003e5993498\u003c/code\u003e\u003c/a\u003e chore: ast_serialize musl missing prebuilt riscv,s390x,ppc64le\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aa2ddd8fb788b98a815f25c37609e919105d1dbb\"\u003e\u003ccode\u003eaa2ddd8\u003c/code\u003e\u003c/a\u003e Release 3.4.8 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.4.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: ...\n\n_Description has been truncated_","html_url":"https://github.com/rssrn/birdbird/pull/47","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/rssrn%2Fbirdbird/issues/47","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/47/packages"},{"uuid":"4874721173","node_id":"PR_kwDOK8S49c7xHoEK","number":100,"state":"open","title":":arrow_up: Bump the all group with 8 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-13T14:42:07.000Z","updated_at":"2026-07-13T14:45:23.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":":arrow_up: Bump","group_name":"all","update_count":8,"packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"build","old_version":"1.5.0","new_version":"1.5.1","repository_url":"https://github.com/pypa/build"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.5","new_version":"3.29.7","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"librt","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/mypyc/librt"}],"path":null,"ecosystem":"pip"},"body":"Bumps the all group with 8 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.15.21` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [build](https://github.com/pypa/build) | `1.5.0` | `1.5.1` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.5` | `3.29.7` |\n| [librt](https://github.com/mypyc/librt) | `0.12.0` | `0.13.0` |\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003efor\u003c/code\u003e loop over list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21686\"\u003e21686\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix memory safety of \u003ccode\u003elist.count\u003c/code\u003e on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21680\"\u003e21680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003evec\u003c/code\u003e creation from list memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21681\"\u003e21681\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.5.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(cli): accept sdist tarball as srcdir argument by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1057\"\u003epypa/build#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: drop 3.9 branches for version_info checks by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1059\"\u003epypa/build#1059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: skip test_uv_install_strips_pythonpath with missing uv by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1063\"\u003epypa/build#1063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove myself from codeowners by \u003ca href=\"https://github.com/FFY00\"\u003e\u003ccode\u003e@​FFY00\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1066\"\u003epypa/build#1066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: safe_extractall to use pathlib.Path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1060\"\u003epypa/build#1060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: secure GitHub Actions workflows by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1068\"\u003epypa/build#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings forwarding in build_package and build_package_via_sdist by \u003ca href=\"https://github.com/terminalchai\"\u003e\u003ccode\u003e@​terminalchai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1058\"\u003epypa/build#1058\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump virtualenv from 20.17 to 20.36.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1076\"\u003epypa/build#1076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump wheel from 0.36.0 to 0.38.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1075\"\u003epypa/build#1075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump pip from 22.3 to 26.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1074\"\u003epypa/build#1074\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: enforce lazy imports with flake8-lazy by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1088\"\u003epypa/build#1088\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(deps): show wanted vs found in missing-deps error by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1082\"\u003epypa/build#1082\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: align action pin version comments by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1091\"\u003epypa/build#1091\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update isolated env example to use DefaultIsolatedEnv by \u003ca href=\"https://github.com/shenxianpeng\"\u003e\u003ccode\u003e@​shenxianpeng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1090\"\u003epypa/build#1090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: compact test_parse_args with a typed make_kwargs helper by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1092\"\u003epypa/build#1092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(typing): ban explicit Any across src and tests by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1093\"\u003epypa/build#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): warn on valueless config settings by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1081\"\u003epypa/build#1081\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): add --sdist-extract-dir to reuse compiler caches by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1085\"\u003epypa/build#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⚠️ feat(util): deprecate project_wheel_metadata by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1084\"\u003epypa/build#1084\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump pre-commit tags by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1095\"\u003epypa/build#1095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat: report resolved build dependency versions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1086\"\u003epypa/build#1086\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(env): control the isolated build environment location by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1083\"\u003epypa/build#1083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): machine-readable build report, and metadata from a wheel by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1080\"\u003epypa/build#1080\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): drain verbose subprocess output without a worker thread by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1098\"\u003epypa/build#1098\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(cli): minor cleanups in builder and CLI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1099\"\u003epypa/build#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): reject a file as --env-dir and drop a mutable default by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1100\"\u003epypa/build#1100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add classifier for 3.15 (testing on beta already) by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1104\"\u003epypa/build#1104\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add lockfiles to gitignore by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1101\"\u003epypa/build#1101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add check-dist by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1103\"\u003epypa/build#1103\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): surface debug paths when a backend build fails by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1087\"\u003epypa/build#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: shorten changelog entries to concise highlights by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1105\"\u003epypa/build#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): raise dependency floors to 3.10 minimums and drop pytest cap by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1107\"\u003epypa/build#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump mypy, restrict pytest 9.1.0 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1108\"\u003epypa/build#1108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(cli): fix CLI warnings being written to stdout instead of stderr by \u003ca href=\"https://github.com/ymyzk\"\u003e\u003ccode\u003e@​ymyzk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1111\"\u003epypa/build#1111\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump vulnerable dependency floors (virtualenv, wheel) by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1113\"\u003epypa/build#1113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: default --installer to pip in argparse by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1117\"\u003epypa/build#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: build correct dest path in Windows symlink support probe by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1118\"\u003epypa/build#1118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: derive dist-info directory from wheel contents, not filename by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1119\"\u003epypa/build#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use LF instead of os.linesep when writing pip/uv requirements files by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1120\"\u003epypa/build#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: decide color support per output stream, not solely from stdout by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1123\"\u003epypa/build#1123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: open the wheel only once in metadata_path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1126\"\u003epypa/build#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: minor robustness fixes from code review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1121\"\u003epypa/build#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: simplify code paths found in review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1124\"\u003epypa/build#1124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eperf: memoize check_dependency by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1122\"\u003epypa/build#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: isolate color tests from NO_COLOR and FORCE_COLOR by \u003ca href=\"https://github.com/Yearnzq\"\u003e\u003ccode\u003e@​Yearnzq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1128\"\u003epypa/build#1128\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.5.1 (2026-07-09)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache reuse\nacross rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds -\nby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the \u0026quot;Debug\na failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrain verbose subprocess output inline instead of using a \u003ccode\u003eThreadPoolExecutor\u003c/code\u003e, which silently swallowed logging\nerrors - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1098\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eReject a file passed as \u003ccode\u003e--env-dir\u003c/code\u003e with a clear error instead of a raw \u003ccode\u003eFileExistsError\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1100\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eEmit CLI warnings to stderr instead of stdout, so they no longer corrupt \u003ccode\u003e--metadata\u003c/code\u003e JSON output on stdout - by\n:user:\u003ccode\u003eymyzk\u003c/code\u003e (:issue:\u003ccode\u003e1111\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix the Windows symlink support probe always returning \u003ccode\u003eFalse\u003c/code\u003e due to a stale object interpolated into the destination\npath - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emetadata_path\u003c/code\u003e's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by\n:user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWrite pip/uv requirements and constraints files with \u003ccode\u003e\\n\u003c/code\u003e instead of \u003ccode\u003eos.linesep\u003c/code\u003e, avoiding doubled \u003ccode\u003e\\r\\r\\n\u003c/code\u003e line\nendings on Windows - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1120\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eBatch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable\ndefault build-system table between builders, keep the original error when isolated-environment setup fails early, and\nraise \u003ccode\u003eBuildException\u003c/code\u003e for an invalid wheel - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDecide color support independently for stdout and stderr instead of only checking \u003ccode\u003estdout.isatty()\u003c/code\u003e, so redirecting\none stream no longer disables or leaks ANSI colors on the other - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1123\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eDeprecations and Removals\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate :func:\u003ccode\u003ebuild.util.project_wheel_metadata\u003c/code\u003e; use \u003ccode\u003epython -m build --metadata\u003c/code\u003e instead - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e557\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWarn on config settings without a value (e.g. \u003ccode\u003e-C--my-flag\u003c/code\u003e); use \u003ccode\u003e-C--my-flag=\u003c/code\u003e instead for compatibility with pip\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/d08fcd723500a7d676867144e1e7a22b650aeb7d\"\u003e\u003ccode\u003ed08fcd7\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/135801c502a7b36e25628d7c3ea9042fe8afa138\"\u003e\u003ccode\u003e135801c\u003c/code\u003e\u003c/a\u003e test: isolate color tests from NO_COLOR and FORCE_COLOR (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/820d4e5638eda9aa744528ab6b9a0e4be98d7d41\"\u003e\u003ccode\u003e820d4e5\u003c/code\u003e\u003c/a\u003e perf: memoize check_dependency (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/6c03264d186ce7a6c9f1e1990408a3a215dc7610\"\u003e\u003ccode\u003e6c03264\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/43c337a6bf55cbf2737bf938f3968be46ebc48b7\"\u003e\u003ccode\u003e43c337a\u003c/code\u003e\u003c/a\u003e refactor: simplify code paths found in review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1124\"\u003e#1124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/260ae22ee29fbca9b452a1b44cf3aacd09bb9250\"\u003e\u003ccode\u003e260ae22\u003c/code\u003e\u003c/a\u003e fix: minor robustness fixes from code review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/100e86e5e4f99167416b1d98783fc095223e0b8f\"\u003e\u003ccode\u003e100e86e\u003c/code\u003e\u003c/a\u003e refactor: open the wheel only once in metadata_path (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1126\"\u003e#1126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/272db6ce3474299b763674550ba0075954177ed3\"\u003e\u003ccode\u003e272db6c\u003c/code\u003e\u003c/a\u003e fix: decide color support per output stream, not solely from stdout (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1123\"\u003e#1123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/bc4ca7c7cb2033d7fecbfe82f8b3d7df7376572f\"\u003e\u003ccode\u003ebc4ca7c\u003c/code\u003e\u003c/a\u003e fix: use LF instead of os.linesep when writing pip/uv requirements files (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1120\"\u003e#1120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/16d8143d9979fc5432b8b1effb1dc3f6048c7840\"\u003e\u003ccode\u003e16d8143\u003c/code\u003e\u003c/a\u003e fix: derive dist-info directory from wheel contents, not filename (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.5.0...1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.4.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/cc6840753f17f00dea4e339ce37507747217e916\"\u003e\u003ccode\u003ecc68407\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/772\"\u003e#772\u003c/a\u003e from jawah/fix-regression-fallback-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/152b923c87e212e11c9591ff0a29ff35df719c91\"\u003e\u003ccode\u003e152b923\u003c/code\u003e\u003c/a\u003e chore: release 3.4.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2bc26076a86704fc19bc2ae811615b169373dea6\"\u003e\u003ccode\u003e2bc2607\u003c/code\u003e\u003c/a\u003e fix: unicodedecodeerror in fallback path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/be252d70c9f45846f0e851cc4d1829328540c825\"\u003e\u003ccode\u003ebe252d7\u003c/code\u003e\u003c/a\u003e chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/71c7bdd25514e5631c17be397abb6a2974b26e5b\"\u003e\u003ccode\u003e71c7bdd\u003c/code\u003e\u003c/a\u003e chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/768\"\u003e#768\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aeea391cc95761f1353b3914afcdee7a6e7589da\"\u003e\u003ccode\u003eaeea391\u003c/code\u003e\u003c/a\u003e chore(deps): bump pypa/cibuildwheel from 3.4.1 to 4.1.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/758\"\u003e#758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a6f8febd210c129ea741e6562fc06ee1ac437487\"\u003e\u003ccode\u003ea6f8feb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/770\"\u003e#770\u003c/a\u003e from jawah/unblock-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/528e16ce9105d10ea6cc66d41f237ba3c64c4392\"\u003e\u003ccode\u003e528e16c\u003c/code\u003e\u003c/a\u003e chore: add osv-scanner.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5993498b06d0bcb0cc1aaab1255742fef39a5aca\"\u003e\u003ccode\u003e5993498\u003c/code\u003e\u003c/a\u003e chore: ast_serialize musl missing prebuilt riscv,s390x,ppc64le\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aa2ddd8fb788b98a815f25c37609e919105d1dbb\"\u003e\u003ccode\u003eaa2ddd8\u003c/code\u003e\u003c/a\u003e Release 3.4.8 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.4.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/182b010b63a2661c86df1ca3b3f84ce8511ee435\"\u003e\u003ccode\u003e182b010\u003c/code\u003e\u003c/a\u003e perf: resolve sysmon branch events lazily, one pair at a time (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2221\"\u003e#2221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ee271ee21fdf4c169648ff4ad3e9dd9d163e5e7f\"\u003e\u003ccode\u003eee271ee\u003c/code\u003e\u003c/a\u003e perf: compute multiline maps cheaply in the sysmon core (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2220\"\u003e#2220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1441b960c698d591d3a22a2190635039320459de\"\u003e\u003ccode\u003e1441b96\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 6 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2225\"\u003e#2225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/dd806350de678c9e4f137ffdda5cb131d269019c\"\u003e\u003ccode\u003edd80635\u003c/code\u003e\u003c/a\u003e fix: escape context labels in html report inline script block (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2224\"\u003e#2224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/7c3ae71ca654a0b0e3184d8574aefd9dd511a006\"\u003e\u003ccode\u003e7c3ae71\u003c/code\u003e\u003c/a\u003e docs: normalize earlier history order (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2222\"\u003e#2222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/088dc601697077364c46967f3ac9afe3bde0083b\"\u003e\u003ccode\u003e088dc60\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f7e15a8e31bd98d8f89a7e4602fa6b8bd7c5e468\"\u003e\u003ccode\u003ef7e15a8\u003c/code\u003e\u003c/a\u003e test: upload .json and .xml coverage reports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/3b6211214d7033e86b88a6e032474c20b7c32814\"\u003e\u003ccode\u003e3b62112\u003c/code\u003e\u003c/a\u003e docs: thanks, Paul Kehrer\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.0...7.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.29.5 to 3.29.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.29.7\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003easyncio: detect cross-instance reentrant deadlocks before the poll loop by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/586\"\u003etox-dev/filelock#586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft_rw): evict non-regular write marker without reading it by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/588\"\u003etox-dev/filelock#588\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e_util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/589\"\u003etox-dev/filelock#589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.6...3.29.7\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.6...3.29.7\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eserialise singleton construction in FileLockMeta by \u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/581\"\u003etox-dev/filelock#581\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e_util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/582\"\u003etox-dev/filelock#582\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: silence fork DeprecationWarning on 3.15 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/585\"\u003etox-dev/filelock#585\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.5...3.29.6\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.5...3.29.6\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1efb8932c08789deb08ad93a91d8996cc36bb9cc\"\u003e\u003ccode\u003e1efb893\u003c/code\u003e\u003c/a\u003e _util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/3547d58a293651fcf6cf8544b0002e6d7b357332\"\u003e\u003ccode\u003e3547d58\u003c/code\u003e\u003c/a\u003e soft_rw: evict a non-regular write marker without reading it (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/616400e382cdc9cc8c95823014e4d2d61a70095c\"\u003e\u003ccode\u003e616400e\u003c/code\u003e\u003c/a\u003e asyncio: detect cross-instance reentrant deadlocks before the poll loop (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/586\"\u003e#586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f8b0e9341cba0cc12eacf50605f290123f33ca32\"\u003e\u003ccode\u003ef8b0e93\u003c/code\u003e\u003c/a\u003e test: silence fork DeprecationWarning on 3.15 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/585\"\u003e#585\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b68be65b941836dce63cba2cf844dc55935ca8ba\"\u003e\u003ccode\u003eb68be65\u003c/code\u003e\u003c/a\u003e _util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/a833dd961e4a1ee569e42c10ca305cd088e14c1b\"\u003e\u003ccode\u003ea833dd9\u003c/code\u003e\u003c/a\u003e serialise singleton construction in FileLockMeta (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/581\"\u003e#581\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/bb2f884c275491222f620b8306d9b9bbc4f406bf\"\u003e\u003ccode\u003ebb2f884\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/da9c3ed54fec55dede6b308319587ec2242f709a\"\u003e\u003ccode\u003eda9c3ed\u003c/code\u003e\u003c/a\u003e :moneybag: Surface GitHub Sponsors + thanks.dev\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.5...3.29.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `librt` from 0.12.0 to 0.13.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/05a6a214c72932b113efc2012a7e9e6b54fd0ff8\"\u003e\u003ccode\u003e05a6a21\u003c/code\u003e\u003c/a\u003e Sync mypy and bump version to 0.13.0\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mypyc/librt/compare/v0.12.0...v0.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/dribia/poetry-git-branch-plugin/pull/100","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/dribia%2Fpoetry-git-branch-plugin/issues/100","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/100/packages"},{"uuid":"4868139614","node_id":"PR_kwDOTWWkL87wynnI","number":5,"state":"open","title":"deps: bump the python-dev group in /stacks/python with 2 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-12T17:59:31.000Z","updated_at":"2026-07-12T17:59:31.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps: bump","group_name":"python-dev","update_count":2,"packages":[{"name":"mypy","old_version":"2.1.0","new_version":"2.2.0","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":"/stacks/python","ecosystem":"pip"},"body":"Bumps the python-dev group in /stacks/python with 2 updates: [mypy](https://github.com/python/mypy) and [ruff](https://github.com/astral-sh/ruff).\n\nUpdates `mypy` from 2.1.0 to 2.2.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.2\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.2.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eSupport for Closed TypedDicts (PEP 728)\u003c/h3\u003e\n\u003cp\u003eMypy now supports closed TypedDicts as specified in PEP 728. A closed TypedDict cannot have extra\nkeys beyond those explicitly defined. This allows the type checker to determine that certain\noperations are safe when they otherwise wouldn't be due to the potential presence of unknown keys.\u003c/p\u003e\n\u003cp\u003eYou can use the \u003ccode\u003eclosed\u003c/code\u003e keyword argument with \u003ccode\u003eTypedDict\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eHasName = TypedDict(\u0026quot;HasName\u0026quot;, {\u0026quot;name\u0026quot;: str})\nHasOnlyName = TypedDict(\u0026quot;HasOnlyName\u0026quot;, {\u0026quot;name\u0026quot;: str}, closed=True)\nMovie = TypedDict(\u0026quot;Movie\u0026quot;, {\u0026quot;name\u0026quot;: str, \u0026quot;year\u0026quot;: int})\n\u003cp\u003emovie: Movie = {\u0026quot;name\u0026quot;: \u0026quot;Nimona\u0026quot;, \u0026quot;year\u0026quot;: 2023}\nhas_name: HasName = movie  # OK: HasName is open (default)\nhas_only_name: HasOnlyName = movie  # Error: HasOnlyName is closed and Movie has extra \u0026quot;year\u0026quot; key\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eClosed TypedDicts enable more precise type checking because the type checker knows exactly which\nkeys are present. This is particularly useful when working with TypedDict unions or when you want\nto ensure that a TypedDict conforms to an exact shape.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eclosed\u003c/code\u003e keyword also enables safe type narrowing with \u003ccode\u003ein\u003c/code\u003e checks:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eBook = TypedDict('Book', {'book': str}, closed=True)\nDVD = TypedDict('DVD', {'dvd': str}, closed=True)\ntype Inventory = Book | DVD\n\u003cp\u003edef print_type(inventory: Inventory) -\u0026gt; None:\nif \u0026quot;book\u0026quot; in inventory:\n# Type is narrowed to Book here - safe because DVD is closed\nprint(inventory[\u0026quot;book\u0026quot;])\nelse:\n# Type is narrowed to DVD here\nprint(inventory[\u0026quot;dvd\u0026quot;])\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b3c4a5b93adb49f979ab553fffebae7179cefa74\"\u003e\u003ccode\u003eb3c4a5b\u003c/code\u003e\u003c/a\u003e Mark release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/396f5082ac677a5115fbd6a0122328a6711f73dd\"\u003e\u003ccode\u003e396f508\u003c/code\u003e\u003c/a\u003e [Chore] Update changelog for 2.2 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21691\"\u003e#21691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/9592a9ea65a9502b14ac3094b28f9e0e3a2e500a\"\u003e\u003ccode\u003e9592a9e\u003c/code\u003e\u003c/a\u003e Upload wasm wheels to PyPI (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21671\"\u003e#21671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/1dc69620d9e827b015e6486114e0aaff7ec2d990\"\u003e\u003ccode\u003e1dc6962\u003c/code\u003e\u003c/a\u003e Bump ast-serialize to 0.6.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21664\"\u003e#21664\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/96a791310d47575827e44d10360505d8e23807b0\"\u003e\u003ccode\u003e96a7913\u003c/code\u003e\u003c/a\u003e Bump librt to 0.12.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21663\"\u003e#21663\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/5ef090270579013c337a9bcc79e2c58417f09538\"\u003e\u003ccode\u003e5ef0902\u003c/code\u003e\u003c/a\u003e Fix the exportjson tool (.ff cache to .json conversion) (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21628\"\u003e#21628\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8d621adb954731ba76b25bf7130275f3cadbb81a\"\u003e\u003ccode\u003e8d621ad\u003c/code\u003e\u003c/a\u003e Support --shadow-file with --native-parser (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21623\"\u003e#21623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/74ecdd8ecc9bee271eab49948436af63751ed1ff\"\u003e\u003ccode\u003e74ecdd8\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21612\"\u003e#21612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0cd154158ab2829a2f8c7a2728c7d4ed55e8f193\"\u003e\u003ccode\u003e0cd1541\u003c/code\u003e\u003c/a\u003e [mypyc] Make function wrappers thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21620\"\u003e#21620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/22a9cfd1595798810e27ef145ea4c989ccdcc883\"\u003e\u003ccode\u003e22a9cfd\u003c/code\u003e\u003c/a\u003e [mypyc] Make list remove and index thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21614\"\u003e#21614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/emigre459/ynab-mcp/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/emigre459%2Fynab-mcp/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"},{"uuid":"4868139610","node_id":"PR_kwDOTWWkL87wynnF","number":4,"state":"open","title":"deps: bump the python-dev group with 2 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-12T17:59:31.000Z","updated_at":"2026-07-12T17:59:31.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps: bump","group_name":"python-dev","update_count":2,"packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"2.1.0","new_version":"2.2.0","repository_url":"https://github.com/python/mypy"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dev group with 2 updates: [ruff](https://github.com/astral-sh/ruff) and [mypy](https://github.com/python/mypy).\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.2.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.2\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.2.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eSupport for Closed TypedDicts (PEP 728)\u003c/h3\u003e\n\u003cp\u003eMypy now supports closed TypedDicts as specified in PEP 728. A closed TypedDict cannot have extra\nkeys beyond those explicitly defined. This allows the type checker to determine that certain\noperations are safe when they otherwise wouldn't be due to the potential presence of unknown keys.\u003c/p\u003e\n\u003cp\u003eYou can use the \u003ccode\u003eclosed\u003c/code\u003e keyword argument with \u003ccode\u003eTypedDict\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eHasName = TypedDict(\u0026quot;HasName\u0026quot;, {\u0026quot;name\u0026quot;: str})\nHasOnlyName = TypedDict(\u0026quot;HasOnlyName\u0026quot;, {\u0026quot;name\u0026quot;: str}, closed=True)\nMovie = TypedDict(\u0026quot;Movie\u0026quot;, {\u0026quot;name\u0026quot;: str, \u0026quot;year\u0026quot;: int})\n\u003cp\u003emovie: Movie = {\u0026quot;name\u0026quot;: \u0026quot;Nimona\u0026quot;, \u0026quot;year\u0026quot;: 2023}\nhas_name: HasName = movie  # OK: HasName is open (default)\nhas_only_name: HasOnlyName = movie  # Error: HasOnlyName is closed and Movie has extra \u0026quot;year\u0026quot; key\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eClosed TypedDicts enable more precise type checking because the type checker knows exactly which\nkeys are present. This is particularly useful when working with TypedDict unions or when you want\nto ensure that a TypedDict conforms to an exact shape.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eclosed\u003c/code\u003e keyword also enables safe type narrowing with \u003ccode\u003ein\u003c/code\u003e checks:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eBook = TypedDict('Book', {'book': str}, closed=True)\nDVD = TypedDict('DVD', {'dvd': str}, closed=True)\ntype Inventory = Book | DVD\n\u003cp\u003edef print_type(inventory: Inventory) -\u0026gt; None:\nif \u0026quot;book\u0026quot; in inventory:\n# Type is narrowed to Book here - safe because DVD is closed\nprint(inventory[\u0026quot;book\u0026quot;])\nelse:\n# Type is narrowed to DVD here\nprint(inventory[\u0026quot;dvd\u0026quot;])\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b3c4a5b93adb49f979ab553fffebae7179cefa74\"\u003e\u003ccode\u003eb3c4a5b\u003c/code\u003e\u003c/a\u003e Mark release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/396f5082ac677a5115fbd6a0122328a6711f73dd\"\u003e\u003ccode\u003e396f508\u003c/code\u003e\u003c/a\u003e [Chore] Update changelog for 2.2 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21691\"\u003e#21691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/9592a9ea65a9502b14ac3094b28f9e0e3a2e500a\"\u003e\u003ccode\u003e9592a9e\u003c/code\u003e\u003c/a\u003e Upload wasm wheels to PyPI (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21671\"\u003e#21671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/1dc69620d9e827b015e6486114e0aaff7ec2d990\"\u003e\u003ccode\u003e1dc6962\u003c/code\u003e\u003c/a\u003e Bump ast-serialize to 0.6.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21664\"\u003e#21664\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/96a791310d47575827e44d10360505d8e23807b0\"\u003e\u003ccode\u003e96a7913\u003c/code\u003e\u003c/a\u003e Bump librt to 0.12.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21663\"\u003e#21663\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/5ef090270579013c337a9bcc79e2c58417f09538\"\u003e\u003ccode\u003e5ef0902\u003c/code\u003e\u003c/a\u003e Fix the exportjson tool (.ff cache to .json conversion) (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21628\"\u003e#21628\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8d621adb954731ba76b25bf7130275f3cadbb81a\"\u003e\u003ccode\u003e8d621ad\u003c/code\u003e\u003c/a\u003e Support --shadow-file with --native-parser (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21623\"\u003e#21623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/74ecdd8ecc9bee271eab49948436af63751ed1ff\"\u003e\u003ccode\u003e74ecdd8\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21612\"\u003e#21612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0cd154158ab2829a2f8c7a2728c7d4ed55e8f193\"\u003e\u003ccode\u003e0cd1541\u003c/code\u003e\u003c/a\u003e [mypyc] Make function wrappers thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21620\"\u003e#21620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/22a9cfd1595798810e27ef145ea4c989ccdcc883\"\u003e\u003ccode\u003e22a9cfd\u003c/code\u003e\u003c/a\u003e [mypyc] Make list remove and index thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21614\"\u003e#21614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/emigre459/ynab-mcp/pull/4","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/emigre459%2Fynab-mcp/issues/4","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4/packages"},{"uuid":"4865202159","node_id":"PR_kwDORWKw-c7wqqJ-","number":87,"state":"closed","title":"chore(deps-dev): update ruff requirement from \u003e=0.15.16 to \u003e=0.15.21","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-19T03:13:02.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-12T03:12:46.000Z","updated_at":"2026-07-19T03:13:04.000Z","time_to_close":604816,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps-dev): update","packages":[{"name":"ruff","old_version":"\u003e=0.15.16","new_version":"\u003e=0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [ruff](https://github.com/astral-sh/ruff) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.16...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/pantalytics/odoo-mcp-pro/pull/87","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/pantalytics%2Fodoo-mcp-pro/issues/87","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/87/packages"},{"uuid":"4860552238","node_id":"PR_kwDON03-Qc7wcaX9","number":6,"state":"closed","title":"Bump the python-dependencies group across 1 directory with 4 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-18T04:33:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-11T04:33:51.000Z","updated_at":"2026-07-18T04:33:43.000Z","time_to_close":604790,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python-dependencies","update_count":4,"packages":[{"name":"click","old_version":"8.4.0","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"pulumi","old_version":"3.250.0","new_version":"3.251.0","repository_url":"https://github.com/pulumi/pulumi"},{"name":"mypy","old_version":"2.1.0","new_version":"2.2.0","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 4 updates in the / directory: [click](https://github.com/pallets/click), [pulumi](https://github.com/pulumi/pulumi), [mypy](https://github.com/python/mypy) and [ruff](https://github.com/astral-sh/ruff).\n\nUpdates `click` from 8.4.0 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.1/\"\u003ehttps://pypi.org/project/click/8.4.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-1\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-1\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/32\"\u003ehttps://github.com/pallets/click/milestone/32\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type conversion again. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3458\"\u003e#3458\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3484\"\u003e#3484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3277\"\u003e#3277\u003c/a\u003e # 3466\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion result. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3015\"\u003e#3015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3487\"\u003e#3487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-06-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by {pr}\u003ccode\u003e3126\u003c/code\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. {issue}\u003ccode\u003e3502\u003c/code\u003e\n{issue}\u003ccode\u003e3043\u003c/code\u003e {pr}\u003ccode\u003e3504\u003c/code\u003e {pr}\u003ccode\u003e3508\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. {pr}\u003ccode\u003e3509\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n{issue}\u003ccode\u003e3059\u003c/code\u003e {pr}\u003ccode\u003e3507\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. {issue}\u003ccode\u003e3242\u003c/code\u003e {issue}\u003ccode\u003e2542\u003c/code\u003e {pr}\u003ccode\u003e3534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from {pr}\u003ccode\u003e3482\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e\n{pr}\u003ccode\u003e3533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. {pr}\u003ccode\u003e3578\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. {issue}\u003ccode\u003e2331\u003c/code\u003e {issue}\u003ccode\u003e1884\u003c/code\u003e {issue}\u003ccode\u003e3125\u003c/code\u003e {pr}\u003ccode\u003e3582\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.4.1\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-21\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type\nconversion again. {issue}\u003ccode\u003e3458\u003c/code\u003e {pr}\u003ccode\u003e3484\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. {issue}\u003ccode\u003e3277\u003c/code\u003e {pr}\u003ccode\u003e3466\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eEnum\u003c/code\u003e values used as \u003ccode\u003eChoice\u003c/code\u003e options produces a\nvalid completion result. {issue}\u003ccode\u003e3015\u003c/code\u003e {pr}\u003ccode\u003e3471\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. {issue}\u003ccode\u003e3487\u003c/code\u003e {pr}\u003ccode\u003e3493\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e {pr}\u003ccode\u003e3482\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eopen_url\u003c/code\u003e on Windows when the file path contains spaces.\n{issue}\u003ccode\u003e2994\u003c/code\u003e {pr}\u003ccode\u003e3478\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.4.0...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pulumi` from 3.250.0 to 3.251.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pulumi/pulumi/releases\"\u003epulumi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.251.0\u003c/h2\u003e\n\u003ch2\u003e3.251.0 (2026-07-08)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli] Show a \u003ccode\u003eretain\u003c/code\u003e marker for retain-on-delete resources in \u003ccode\u003e--diff\u003c/code\u003e output \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23754\"\u003e#23754\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli] Don't miscopy out archives \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23798\"\u003e#23798\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMiscellaneous\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli] Add \u003ccode\u003epulumi neo --debug-update\u003c/code\u003e and \u003ccode\u003epulumi neo --debug-preview\u003c/code\u003e flags to investigate a failed update or preview, suggested in the failure output \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23499\"\u003e#23499\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/convert] Add an \u003ccode\u003eecosystem\u003c/code\u003e field to converter mapping requests so a converter can request mappings for the ecosystem it consumes rather than its own name \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23804\"\u003e#23804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/deployment] \u003ccode\u003epulumi deployment settings\u003c/code\u003e no longer writes the local \u003ccode\u003ePulumi.\u0026lt;stack\u0026gt;.deploy.yaml\u003c/code\u003e file: the experimental \u003ccode\u003einit\u003c/code\u003e, \u003ccode\u003epull\u003c/code\u003e, \u003ccode\u003econfigure\u003c/code\u003e, and \u003ccode\u003eenv\u003c/code\u003e subcommands have been removed, and the CLI no longer calls the deployment-settings encrypt endpoint. \u003ccode\u003eget\u003c/code\u003e/\u003ccode\u003eedit\u003c/code\u003e/\u003ccode\u003edestroy\u003c/code\u003e continue to manage settings directly in Pulumi Cloud \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23480\"\u003e#23480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/deployment] The deployment settings file (\u003ccode\u003ePulumi.\u0026lt;stack\u0026gt;.deploy.yaml\u003c/code\u003e) has been removed entirely. The experimental \u003ccode\u003epulumi deployment settings push\u003c/code\u003e (\u003ccode\u003eupdate\u003c/code\u003e/\u003ccode\u003eup\u003c/code\u003e) command, the \u003ccode\u003e--config-file\u003c/code\u003e flag, and the SDK helpers that read the file have been removed. Manage deployment settings directly in Pulumi Cloud with \u003ccode\u003epulumi deployment settings get\u003c/code\u003e, \u003ccode\u003eedit\u003c/code\u003e, and \u003ccode\u003edestroy\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23480\"\u003e#23480\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/display] Prevent plugin debug logs from appearing as raw JSON in the CLI's output when logging with \u003ccode\u003e--logtostderr\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23633\"\u003e#23633\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/env] Report the new revision number when an environment definition is updated (e.g. \u003ccode\u003epulumi env edit\u003c/code\u003e, \u003ccode\u003epulumi env provider\u003c/code\u003e, \u003ccode\u003epulumi env version rollback\u003c/code\u003e) \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23799\"\u003e#23799\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMiscellaneous\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/env] Fold the Pulumi ESC engine and CLI into the pulumi/pulumi monorepo, removing the sdk↔esc Go module cycle. Internal refactor with no user-facing behavior change; \u003ccode\u003epulumi env\u003c/code\u003e/\u003ccode\u003epulumi esc\u003c/code\u003e are unaffected. \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23746\"\u003e#23746\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/import] Support importing resources under parameterized providers from a converter or import file \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23763\"\u003e#23763\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/import] Support importing resources under extension-parameterized providers \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23779\"\u003e#23779\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[engine] Add \u003ccode\u003eTargetSnippets\u003c/code\u003e to deployment options to target snippets by UUID. \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23745\"\u003e#23745\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[engine] Add OpenTelemetry spans to the StackReference read path so performance traces can pinpoint slow snapshot fetches, deserialization, or secret decryption \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23787\"\u003e#23787\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[programgen/pcl] Invoke functions declared with multi-argument inputs using positional arguments in PCL \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23571\"\u003e#23571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[sdk/nodejs] Don't include the version in module paths when serializing functions when using pnpm \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23767\"\u003e#23767\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pulumi/pulumi/blob/master/CHANGELOG.md\"\u003epulumi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.251.0 (2026-07-08)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli] Show a \u003ccode\u003eretain\u003c/code\u003e marker for retain-on-delete resources in \u003ccode\u003e--diff\u003c/code\u003e output \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23754\"\u003e#23754\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli] Don't miscopy out archives \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23798\"\u003e#23798\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMiscellaneous\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli] Add \u003ccode\u003epulumi neo --debug-update\u003c/code\u003e and \u003ccode\u003epulumi neo --debug-preview\u003c/code\u003e flags to investigate a failed update or preview, suggested in the failure output \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23499\"\u003e#23499\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/convert] Add an \u003ccode\u003eecosystem\u003c/code\u003e field to converter mapping requests so a converter can request mappings for the ecosystem it consumes rather than its own name \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23804\"\u003e#23804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/deployment] \u003ccode\u003epulumi deployment settings\u003c/code\u003e no longer writes the local \u003ccode\u003ePulumi.\u0026lt;stack\u0026gt;.deploy.yaml\u003c/code\u003e file: the experimental \u003ccode\u003einit\u003c/code\u003e, \u003ccode\u003epull\u003c/code\u003e, \u003ccode\u003econfigure\u003c/code\u003e, and \u003ccode\u003eenv\u003c/code\u003e subcommands have been removed, and the CLI no longer calls the deployment-settings encrypt endpoint. \u003ccode\u003eget\u003c/code\u003e/\u003ccode\u003eedit\u003c/code\u003e/\u003ccode\u003edestroy\u003c/code\u003e continue to manage settings directly in Pulumi Cloud \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23480\"\u003e#23480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/deployment] The deployment settings file (\u003ccode\u003ePulumi.\u0026lt;stack\u0026gt;.deploy.yaml\u003c/code\u003e) has been removed entirely. The experimental \u003ccode\u003epulumi deployment settings push\u003c/code\u003e (\u003ccode\u003eupdate\u003c/code\u003e/\u003ccode\u003eup\u003c/code\u003e) command, the \u003ccode\u003e--config-file\u003c/code\u003e flag, and the SDK helpers that read the file have been removed. Manage deployment settings directly in Pulumi Cloud with \u003ccode\u003epulumi deployment settings get\u003c/code\u003e, \u003ccode\u003eedit\u003c/code\u003e, and \u003ccode\u003edestroy\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23480\"\u003e#23480\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/display] Prevent plugin debug logs from appearing as raw JSON in the CLI's output when logging with \u003ccode\u003e--logtostderr\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23633\"\u003e#23633\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/env] Report the new revision number when an environment definition is updated (e.g. \u003ccode\u003epulumi env edit\u003c/code\u003e, \u003ccode\u003epulumi env provider\u003c/code\u003e, \u003ccode\u003epulumi env version rollback\u003c/code\u003e) \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23799\"\u003e#23799\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMiscellaneous\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/env] Fold the Pulumi ESC engine and CLI into the pulumi/pulumi monorepo, removing the sdk↔esc Go module cycle. Internal refactor with no user-facing behavior change; \u003ccode\u003epulumi env\u003c/code\u003e/\u003ccode\u003epulumi esc\u003c/code\u003e are unaffected. \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23746\"\u003e#23746\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/import] Support importing resources under parameterized providers from a converter or import file \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23763\"\u003e#23763\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/import] Support importing resources under extension-parameterized providers \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23779\"\u003e#23779\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[engine] Add \u003ccode\u003eTargetSnippets\u003c/code\u003e to deployment options to target snippets by UUID. \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23745\"\u003e#23745\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[engine] Add OpenTelemetry spans to the StackReference read path so performance traces can pinpoint slow snapshot fetches, deserialization, or secret decryption \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23787\"\u003e#23787\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[programgen/pcl] Invoke functions declared with multi-argument inputs using positional arguments in PCL \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23571\"\u003e#23571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[sdk/nodejs] Don't include the version in module paths when serializing functions when using pnpm \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23767\"\u003e#23767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[sdk/nodejs] Support pnpm 11 \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23815\"\u003e#23815\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/aff0ffa2cc499d598c71d6de589592a132f042a5\"\u003e\u003ccode\u003eaff0ffa\u003c/code\u003e\u003c/a\u003e do: fix \u003ccode\u003e--dry-run\u003c/code\u003e for delete (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23809\"\u003e#23809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/c9a87908cd8cb920058b5d093e46e8fd0740be29\"\u003e\u003ccode\u003ec9a8790\u003c/code\u003e\u003c/a\u003e Add pulumi neo debug command (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23499\"\u003e#23499\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/4a79549ecd9cfe052a29082e1fe4082e27ba5b96\"\u003e\u003ccode\u003e4a79549\u003c/code\u003e\u003c/a\u003e Invoke multi-argument-input functions positionally in PCL (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23571\"\u003e#23571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/32121529201daacd45ca959e14bfd3186aa0aafe\"\u003e\u003ccode\u003e3212152\u003c/code\u003e\u003c/a\u003e do: make default input YAML (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23808\"\u003e#23808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/93ab9680c5b3e5c3857c1166a423aad3151131d1\"\u003e\u003ccode\u003e93ab968\u003c/code\u003e\u003c/a\u003e Add an ecosystem to converter mapping requests (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23804\"\u003e#23804\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/82c41645622c58ab7361e4fe393d0ee329f213e8\"\u003e\u003ccode\u003e82c4164\u003c/code\u003e\u003c/a\u003e do: align prompting with up/destroy (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23805\"\u003e#23805\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/3ec25324d40d47d63107a0347ba6d473adc71a0a\"\u003e\u003ccode\u003e3ec2532\u003c/code\u003e\u003c/a\u003e Update actions/download-artifact action to v8 (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23793\"\u003e#23793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/5e1b1d0903b6655a261465040bcd91e59f9375d5\"\u003e\u003ccode\u003e5e1b1d0\u003c/code\u003e\u003c/a\u003e Add more tracing spans around stack references (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23787\"\u003e#23787\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/45b7ec7e172379ac79f91d1e0d46230200af0713\"\u003e\u003ccode\u003e45b7ec7\u003c/code\u003e\u003c/a\u003e do: improve usage section (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23782\"\u003e#23782\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/54b4e80e49a3e6ba415bc967212d104edb7e56d9\"\u003e\u003ccode\u003e54b4e80\u003c/code\u003e\u003c/a\u003e Don't include the version in module paths when serializing functions when usi...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pulumi/pulumi/compare/v3.250.0...v3.251.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.2.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.2\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.2.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eSupport for Closed TypedDicts (PEP 728)\u003c/h3\u003e\n\u003cp\u003eMypy now supports closed TypedDicts as specified in PEP 728. A closed TypedDict cannot have extra\nkeys beyond those explicitly defined. This allows the type checker to determine that certain\noperations are safe when they otherwise wouldn't be due to the potential presence of unknown keys.\u003c/p\u003e\n\u003cp\u003eYou can use the \u003ccode\u003eclosed\u003c/code\u003e keyword argument with \u003ccode\u003eTypedDict\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eHasName = TypedDict(\u0026quot;HasName\u0026quot;, {\u0026quot;name\u0026quot;: str})\nHasOnlyName = TypedDict(\u0026quot;HasOnlyName\u0026quot;, {\u0026quot;name\u0026quot;: str}, closed=True)\nMovie = TypedDict(\u0026quot;Movie\u0026quot;, {\u0026quot;name\u0026quot;: str, \u0026quot;year\u0026quot;: int})\n\u003cp\u003emovie: Movie = {\u0026quot;name\u0026quot;: \u0026quot;Nimona\u0026quot;, \u0026quot;year\u0026quot;: 2023}\nhas_name: HasName = movie  # OK: HasName is open (default)\nhas_only_name: HasOnlyName = movie  # Error: HasOnlyName is closed and Movie has extra \u0026quot;year\u0026quot; key\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eClosed TypedDicts enable more precise type checking because the type checker knows exactly which\nkeys are present. This is particularly useful when working with TypedDict unions or when you want\nto ensure that a TypedDict conforms to an exact shape.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eclosed\u003c/code\u003e keyword also enables safe type narrowing with \u003ccode\u003ein\u003c/code\u003e checks:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eBook = TypedDict('Book', {'book': str}, closed=True)\nDVD = TypedDict('DVD', {'dvd': str}, closed=True)\ntype Inventory = Book | DVD\n\u003cp\u003edef print_type(inventory: Inventory) -\u0026gt; None:\nif \u0026quot;book\u0026quot; in inventory:\n# Type is narrowed to Book here - safe because DVD is closed\nprint(inventory[\u0026quot;book\u0026quot;])\nelse:\n# Type is narrowed to DVD here\nprint(inventory[\u0026quot;dvd\u0026quot;])\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b3c4a5b93adb49f979ab553fffebae7179cefa74\"\u003e\u003ccode\u003eb3c4a5b\u003c/code\u003e\u003c/a\u003e Mark release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/396f5082ac677a5115fbd6a0122328a6711f73dd\"\u003e\u003ccode\u003e396f508\u003c/code\u003e\u003c/a\u003e [Chore] Update changelog for 2.2 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21691\"\u003e#21691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/9592a9ea65a9502b14ac3094b28f9e0e3a2e500a\"\u003e\u003ccode\u003e9592a9e\u003c/code\u003e\u003c/a\u003e Upload wasm wheels to PyPI (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21671\"\u003e#21671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/1dc69620d9e827b015e6486114e0aaff7ec2d990\"\u003e\u003ccode\u003e1dc6962\u003c/code\u003e\u003c/a\u003e Bump ast-serialize to 0.6.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21664\"\u003e#21664\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/96a791310d47575827e44d10360505d8e23807b0\"\u003e\u003ccode\u003e96a7913\u003c/code\u003e\u003c/a\u003e Bump librt to 0.12.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21663\"\u003e#21663\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/5ef090270579013c337a9bcc79e2c58417f09538\"\u003e\u003ccode\u003e5ef0902\u003c/code\u003e\u003c/a\u003e Fix the exportjson tool (.ff cache to .json conversion) (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21628\"\u003e#21628\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8d621adb954731ba76b25bf7130275f3cadbb81a\"\u003e\u003ccode\u003e8d621ad\u003c/code\u003e\u003c/a\u003e Support --shadow-file with --native-parser (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21623\"\u003e#21623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/74ecdd8ecc9bee271eab49948436af63751ed1ff\"\u003e\u003ccode\u003e74ecdd8\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21612\"\u003e#21612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0cd154158ab2829a2f8c7a2728c7d4ed55e8f193\"\u003e\u003ccode\u003e0cd1541\u003c/code\u003e\u003c/a\u003e [mypyc] Make function wrappers thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21620\"\u003e#21620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/22a9cfd1595798810e27ef145ea4c989ccdcc883\"\u003e\u003ccode\u003e22a9cfd\u003c/code\u003e\u003c/a\u003e [mypyc] Make list remove and index thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21614\"\u003e#21614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/JayDoubleu/tlumi/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/JayDoubleu%2Ftlumi/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}],"issue_packages":[{"old_version":"0.15.21","new_version":"0.15.22","update_type":"patch","path":null,"pr_created_at":"2026-07-20T05:22:39.000Z","version_change":"0.15.21 → 0.15.22","issue":{"uuid":"4926034338","node_id":"PR_kwDOTHoTgc7zsgH6","number":52,"state":"open","title":"build(deps): bump the python-minor-patch group across 1 directory with 22 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-20T05:22:39.000Z","updated_at":"2026-07-20T05:22:40.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python-minor-patch","update_count":22,"packages":[{"name":"fastapi","old_version":"0.139.0","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.50.0","new_version":"0.51.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"hatchet-sdk","old_version":"1.33.15","new_version":"1.35.0"},{"name":"anthropic","old_version":"0.116.0","new_version":"0.117.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"openai","old_version":"2.44.0","new_version":"2.46.0","repository_url":"https://github.com/openai/openai-python"},{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"anyio","old_version":"4.14.1","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"click","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"grpcio","old_version":"1.81.1","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"grpcio-tools","old_version":"1.81.1","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"joserfc","old_version":"1.7.2","new_version":"1.7.4","repository_url":"https://github.com/authlib/joserfc"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.69.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"websockets","old_version":"16.0","new_version":"16.1.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"yarl","old_version":"1.24.2","new_version":"1.24.5","repository_url":"https://github.com/aio-libs/yarl"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.7","new_version":"3.31.1","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"platformdirs","old_version":"4.10.0","new_version":"4.10.1","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pypdf","old_version":"6.13.3","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"browser-use","old_version":"0.13.3","new_version":"0.13.6","repository_url":"https://github.com/browser-use/browser-use"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 22 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.139.0` | `0.139.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.50.0` | `0.51.0` |\n| hatchet-sdk | `1.33.15` | `1.35.0` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.116.0` | `0.117.0` |\n| [openai](https://github.com/openai/openai-python) | `2.44.0` | `2.46.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.15.22` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.1` | `4.14.2` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.2` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.1` | `1.82.1` |\n| [grpcio-tools](https://github.com/grpc/grpc) | `1.81.1` | `1.82.1` |\n| [joserfc](https://github.com/authlib/joserfc) | `1.7.2` | `1.7.4` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.69.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `16.0` | `16.1.1` |\n| [yarl](https://github.com/aio-libs/yarl) | `1.24.2` | `1.24.5` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.2` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.7` | `3.31.1` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.10.0` | `4.10.1` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.3` | `6.14.2` |\n| [browser-use](https://github.com/browser-use/browser-use) | `0.13.3` | `0.13.6` |\n\n\nUpdates `fastapi` from 0.139.0 to 0.139.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.139.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16013\"\u003e#16013\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.139.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16011\"\u003e#16011\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being applied. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15995\"\u003e#15995\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16005\"\u003e#16005\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15996\"\u003e#15996\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16006\"\u003e#16006\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15999\"\u003e#15999\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16004\"\u003e#16004\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16001\"\u003e#16001\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16003\"\u003e#16003\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15998\"\u003e#15998\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16000\"\u003e#16000\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15997\"\u003e#15997\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16002\"\u003e#16002\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15990\"\u003e#15990\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15925\"\u003e#15925\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15797\"\u003e#15797\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update \u003ccode\u003ellm-prompt.md\u003c/code\u003e for Hindi. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15810\"\u003e#15810\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix language-specific translation prompt for Russian language. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15924\"\u003e#15924\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15981\"\u003e#15981\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15982\"\u003e#15982\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15983\"\u003e#15983\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15985\"\u003e#15985\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use \u003ccode\u003eFASTAPI_LATEST_CHANGES\u003c/code\u003e token in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15984\"\u003e#15984\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15873\"\u003e#15873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15874\"\u003e#15874\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15950\"\u003e#15950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15952\"\u003e#15952\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: add TutorCruncher. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15947\"\u003e#15947\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix notify translations checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15933\"\u003e#15933\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15932\"\u003e#15932\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove RapidProxy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15929\"\u003e#15929\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15928\"\u003e#15928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15926\"\u003e#15926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/866b7a3d0ce1025a3811f23aea4846d01a2b16a8\"\u003e\u003ccode\u003e866b7a3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16014\"\u003e#16014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b3effea754619f0c305af576be23a51865292a3\"\u003e\u003ccode\u003e7b3effe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7fe315c21afb8a57a2b559772e0f7ced7e5d071a\"\u003e\u003ccode\u003e7fe315c\u003c/code\u003e\u003c/a\u003e 🐛 Refactor router route building to make it thread-safe, mainly relevant for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c48e67b1ce9c03fc9bd4b1ac72350e51ad5a6e8a\"\u003e\u003ccode\u003ec48e67b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16012\"\u003e#16012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2acc4fbf155caf016e3bd2602c0d2ec52723e635\"\u003e\u003ccode\u003e2acc4fb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/eb75fd078e83aed935016bcdf0705cd58bbf0d0e\"\u003e\u003ccode\u003eeb75fd0\u003c/code\u003e\u003c/a\u003e 🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16011\"\u003e#16011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9b8410bdc9fa1fd679ea7e65b926535c7045ab87\"\u003e\u003ccode\u003e9b8410b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e24d44cce4092a33b64e9536e96e7608a7dcb9b8\"\u003e\u003ccode\u003ee24d44c\u003c/code\u003e\u003c/a\u003e 📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being ap...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/93b78f8646dea4543cc4d938f7e29b8547749a99\"\u003e\u003ccode\u003e93b78f8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b959b443577c5f2b870cdef13219b98aa32f8943\"\u003e\u003ccode\u003eb959b44\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.139.0...0.139.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.50.0 to 0.51.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.51.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers with overlap on SIGHUP for near-zero-downtime reloads by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3025\"\u003eKludex/uvicorn#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove colorama from the standard extra by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3027\"\u003eKludex/uvicorn#3027\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansio implementation by \u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.51.0 (July 8, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers one at a time on \u003ccode\u003eSIGHUP\u003c/code\u003e, bringing each replacement up before retiring the old worker, so reloads no longer drop requests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003ecolorama\u003c/code\u003e from the \u003ccode\u003estandard\u003c/code\u003e extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.2 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ewebsockets\u0026gt;=13.0\u003c/code\u003e, which the default \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation needs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.1 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3019\"\u003e#3019\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e4d0b05eb8c6459b7ba27ad13a2c2f4f8d4ece50\"\u003e\u003ccode\u003ee4d0b05\u003c/code\u003e\u003c/a\u003e Version 0.51.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3028\"\u003e#3028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/944e43ddbf715aea7c587f2738cd94c3f9106110\"\u003e\u003ccode\u003e944e43d\u003c/code\u003e\u003c/a\u003e Remove colorama from the standard extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2e787704f2610133059e76d56bbd60f48edd34a3\"\u003e\u003ccode\u003e2e78770\u003c/code\u003e\u003c/a\u003e Restart workers with overlap on SIGHUP for near-zero-downtime reloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a1b570cf577d512bfd396b64d72313233e9c3325\"\u003e\u003ccode\u003ea1b570c\u003c/code\u003e\u003c/a\u003e Version 0.50.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3022\"\u003e#3022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/83c7da7332ac3100171c258071de40d5dde35e13\"\u003e\u003ccode\u003e83c7da7\u003c/code\u003e\u003c/a\u003e Require websockets\u0026gt;=13.0 for the default sansio implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b4d011668a75d02370353f34de6dea59692dcad2\"\u003e\u003ccode\u003eb4d0116\u003c/code\u003e\u003c/a\u003e Version 0.50.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3020\"\u003e#3020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2a9151d0e763df2c56da2bfe8c5dcead4fe5a276\"\u003e\u003ccode\u003e2a9151d\u003c/code\u003e\u003c/a\u003e Split comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1bf3ab42e3aba1cf4acd1ef0c29d8ad9a599d333\"\u003e\u003ccode\u003e1bf3ab4\u003c/code\u003e\u003c/a\u003e Cover the excluded-directory branch in \u003ccode\u003eFileFilter\u003c/code\u003e with a direct test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3014\"\u003e#3014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/837b5f960dbe2f03e9f12feb9955ce2217211ad8\"\u003e\u003ccode\u003e837b5f9\u003c/code\u003e\u003c/a\u003e Deflake multiprocess, reload, and signal supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2975\"\u003e#2975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.51.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hatchet-sdk` from 1.33.15 to 1.35.0\n\nUpdates `anthropic` from 0.116.0 to 0.117.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.117.0\u003c/h2\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for dreaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/642eee707b0fe3c35c21917f60b06846b2a3b291\"\u003e642eee7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for MCP Tunnels (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d716df6edb1df7de25f1b5e14dcab33b9aafc2ff\"\u003ed716df6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ecredentials:\u003c/strong\u003e keep credential material out of traceback frame locals via SecretStr (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/aa93a4dbf383f7fdab1404c136e86d4679d644c1\"\u003eaa93a4d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates to field descriptions (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/75d8dcc0ac8cb381fa327a61a9ac84022b3a1677\"\u003e75d8dcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model example (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a57e30ac1bafb54387bf631be2081bfdb3782911\"\u003ea57e30a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e updates to descriptions and examples (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e1535b6919441448dddf00e2636cb8c60a721a43\"\u003ee1535b6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for dreaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/642eee707b0fe3c35c21917f60b06846b2a3b291\"\u003e642eee7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for MCP Tunnels (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d716df6edb1df7de25f1b5e14dcab33b9aafc2ff\"\u003ed716df6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ecredentials:\u003c/strong\u003e keep credential material out of traceback frame locals via SecretStr (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/aa93a4dbf383f7fdab1404c136e86d4679d644c1\"\u003eaa93a4d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates to field descriptions (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/75d8dcc0ac8cb381fa327a61a9ac84022b3a1677\"\u003e75d8dcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model example (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a57e30ac1bafb54387bf631be2081bfdb3782911\"\u003ea57e30a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e updates to descriptions and examples (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e1535b6919441448dddf00e2636cb8c60a721a43\"\u003ee1535b6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/3c8bdf14bc55377262f11d6c34b893834a02b3fc\"\u003e\u003ccode\u003e3c8bdf1\u003c/code\u003e\u003c/a\u003e release: 0.117.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/db820820aba78e8af45d0a02afc3948006ab6021\"\u003e\u003ccode\u003edb82082\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/bc2f6e4a7a53ac362d3dce04d2d7cf044403bf81\"\u003e\u003ccode\u003ebc2f6e4\u003c/code\u003e\u003c/a\u003e feat(api): add support for MCP Tunnels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/3541444ba348e95162081f1a45877478a7d90fa7\"\u003e\u003ccode\u003e3541444\u003c/code\u003e\u003c/a\u003e test(beta): cover parse() header merging with caller extra_headers (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/242\"\u003e#242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/824de14e5be54d4fe268d52ed8fd3c00cb909be2\"\u003e\u003ccode\u003e824de14\u003c/code\u003e\u003c/a\u003e feat(api): add support for dreaming\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/26ce65ac3f7530e092a56f5557b4ed703d592964\"\u003e\u003ccode\u003e26ce65a\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/6d9ee332c38335cb1d1d5d2669d57b351b917770\"\u003e\u003ccode\u003e6d9ee33\u003c/code\u003e\u003c/a\u003e chore(docs): update model example\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c7ee42192bcbfbd7659777dd6ba5efa7be8407fb\"\u003e\u003ccode\u003ec7ee421\u003c/code\u003e\u003c/a\u003e Block ask-gated session tool calls until user confirmation (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/16\"\u003e#16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/97b130e6f0b695a961795211d9a7458af9455fb2\"\u003e\u003ccode\u003e97b130e\u003c/code\u003e\u003c/a\u003e chore(docs): updates to descriptions and examples\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fb1e755153df78b8b5691b3e42380b7409144536\"\u003e\u003ccode\u003efb1e755\u003c/code\u003e\u003c/a\u003e fix(credentials): keep credential material out of traceback frame locals via ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.44.0 to 2.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.46.0\u003c/h2\u003e\n\u003ch2\u003e2.46.0 (2026-07-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.45.0...v2.46.0\"\u003ev2.45.0...v2.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e /organization/projects/{project_id}/service_accounts/{service_account_id}/api_keys\u0026quot; endpoint (\u003ca href=\"https://github.com/openai/openai-python/commit/5a0094194eac9c605c8ca84d47d1c5518f8e2131\"\u003e5a00941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add owner_project_access to APIKeyListParams (\u003ca href=\"https://github.com/openai/openai-python/commit/f589d04bf9f377ecb1f54335ab3ab9d825b5dfee\"\u003ef589d04\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/980f176e83ee5d991bf9e8e4def80d9905ade5ec\"\u003e980f176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/2eae984315580cdbf9ceb14d6cb568c581baa768\"\u003e2eae984\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e preserve generated type compatibility (\u003ca href=\"https://github.com/openai/openai-python/commit/00bd72adbe03f4b5c4b89d91b8d317f11b58bbdf\"\u003e00bd72a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e remove beta annotation compatibility aliases (\u003ca href=\"https://github.com/openai/openai-python/commit/99dbd15ff3ad1628b94a729a6b688212d4655908\"\u003e99dbd15\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.45.0\u003c/h2\u003e\n\u003ch2\u003e2.45.0 (2026-07-09)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.45.0\"\u003ev2.44.0...v2.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e gpt-5.6-sol updates (\u003ca href=\"https://github.com/openai/openai-python/commit/039d1feb264a2dca7195ba5028e9fb47a5e04987\"\u003e039d1fe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore beta resource accessors (\u003ca href=\"https://github.com/openai/openai-python/commit/2dfc130b8f0fdb0049e075aac21aaef29482b4e3\"\u003e2dfc130\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/7b61351b014bb6ca4623ff6cce7f32f45038a92e\"\u003e7b61351\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.46.0 (2026-07-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.45.0...v2.46.0\"\u003ev2.45.0...v2.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e /organization/projects/{project_id}/service_accounts/{service_account_id}/api_keys\u0026quot; endpoint (\u003ca href=\"https://github.com/openai/openai-python/commit/5a0094194eac9c605c8ca84d47d1c5518f8e2131\"\u003e5a00941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add owner_project_access to APIKeyListParams (\u003ca href=\"https://github.com/openai/openai-python/commit/f589d04bf9f377ecb1f54335ab3ab9d825b5dfee\"\u003ef589d04\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/980f176e83ee5d991bf9e8e4def80d9905ade5ec\"\u003e980f176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/2eae984315580cdbf9ceb14d6cb568c581baa768\"\u003e2eae984\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e preserve generated type compatibility (\u003ca href=\"https://github.com/openai/openai-python/commit/00bd72adbe03f4b5c4b89d91b8d317f11b58bbdf\"\u003e00bd72a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e remove beta annotation compatibility aliases (\u003ca href=\"https://github.com/openai/openai-python/commit/99dbd15ff3ad1628b94a729a6b688212d4655908\"\u003e99dbd15\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.45.0 (2026-07-09)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.45.0\"\u003ev2.44.0...v2.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e gpt-5.6-sol updates (\u003ca href=\"https://github.com/openai/openai-python/commit/039d1feb264a2dca7195ba5028e9fb47a5e04987\"\u003e039d1fe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore beta resource accessors (\u003ca href=\"https://github.com/openai/openai-python/commit/2dfc130b8f0fdb0049e075aac21aaef29482b4e3\"\u003e2dfc130\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/7b61351b014bb6ca4623ff6cce7f32f45038a92e\"\u003e7b61351\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/0e6adb15adc1e74087bcb402de7a75e4fbc0aecb\"\u003e\u003ccode\u003e0e6adb1\u003c/code\u003e\u003c/a\u003e release: 2.46.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3501\"\u003e#3501\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/f16fbbd2bd25dc1ff150b5f78dbd15ff6bab6d91\"\u003e\u003ccode\u003ef16fbbd\u003c/code\u003e\u003c/a\u003e release: 2.45.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3478\"\u003e#3478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.21 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch3\u003ePackaging changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer provide mypyc-accelerated wheels for macOS x86_64 [mypyc-wheels \u003ca href=\"https://redirect.github.com/python/mypy/issues/119\"\u003e#119\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/mypyc/mypy_mypyc-wheels/pull/119\"\u003emypyc/mypy_mypyc-wheels#119\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.1 to 4.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged \u003ccode\u003eByteReceiveStream.receive()\u003c/code\u003e implementations to raise a \u003ccode\u003eValueError\u003c/code\u003e when \u003ccode\u003emax_bytes\u003c/code\u003e is not a positive integer (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1191\"\u003e#1191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting \u003ccode\u003efloat(\u0026quot;inf\u0026quot;)\u003c/code\u003e when the limiter was instantiated outside of an event loop. The adapter setter checked for infinity by identity (\u003ccode\u003evalue is math.inf\u003c/code\u003e), so only the exact \u003ccode\u003emath.inf\u003c/code\u003e singleton was accepted, while every backend setter (using \u003ccode\u003emath.isinf()\u003c/code\u003e) accepts any positive infinity (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1189\"\u003e#1189\u003c/a\u003e; PR by \u003ca href=\"https://github.com/greymoth-jp\"\u003e\u003ccode\u003e@​greymoth-jp\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eto_process.run_sync()\u003c/code\u003e deadlocking when the worker function writes enough data to \u003ccode\u003esys.stderr\u003c/code\u003e to fill the (undrained) pipe buffer. The worker process now redirects \u003ccode\u003esys.stderr\u003c/code\u003e to \u003ccode\u003eos.devnull\u003c/code\u003e as well, matching the documented behavior\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eTLSStream.wrap()\u003c/code\u003e matching an internationalized (unicode) host name against the peer certificate using IDNA 2003 (via the standard library) instead of IDNA 2008, which could cause the host name to be matched against the wrong certificate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.open_process()\u003c/code\u003e (and \u003ccode\u003erun_process()\u003c/code\u003e) ignoring the \u003ccode\u003eextra_groups\u003c/code\u003e argument, as it mistakenly passed the value of the \u003ccode\u003egroup\u003c/code\u003e argument instead (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1209\"\u003e#1209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.acquire_nowait()\u003c/code\u003e and \u003ccode\u003eCapacityLimiter.acquire_nowait_on_behalf_of()\u003c/code\u003e raising \u003ccode\u003etrio.WouldBlock\u003c/code\u003e instead of \u003ccode\u003eanyio.WouldBlock\u003c/code\u003e on the \u003ccode\u003etrio\u003c/code\u003e backend when there are no tokens available (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1218\"\u003e#1218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens (\u003ccode\u003eborrowed_tokens\u003c/code\u003e exceeding \u003ccode\u003etotal_tokens\u003c/code\u003e and \u003ccode\u003eavailable_tokens\u003c/code\u003e going negative) when a non-blocking acquire was made in the window between a token being released and the notified waiter resuming. The freed token is now reserved for the woken waiter right away, so the non-blocking acquire correctly raises \u003ccode\u003eWouldBlock\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1170\"\u003e#1170\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed unnecessary CPU spin when delivering cancellation from \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio under certain conditions, including improper cancel scope nesting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1111\"\u003e#1111\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/c384f99687c64c59ed8a11c3a0f11a2d57daff71\"\u003e\u003ccode\u003ec384f99\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/dbba29d1ade7936f18fb71ba24aa92978673482a\"\u003e\u003ccode\u003edbba29d\u003c/code\u003e\u003c/a\u003e Fixed 100% CPU spin on cancel scope misuse (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1217\"\u003e#1217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6bbc6c33caabc13af5bc4256f745027cf8d5d7b8\"\u003e\u003ccode\u003e6bbc6c3\u003c/code\u003e\u003c/a\u003e Fix CapacityLimiter over-granting tokens on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1172\"\u003e#1172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f82b2537cbbe98f3df3f295499056ab7de0b15b\"\u003e\u003ccode\u003e6f82b25\u003c/code\u003e\u003c/a\u003e Refactored TestTLSStream.test_receive_invalid_max_bytes() to be less flaky\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/be24b0414f67f604bcbdd5ea3bcc56ab920d872e\"\u003e\u003ccode\u003ebe24b04\u003c/code\u003e\u003c/a\u003e Relaxed timeouts to fix test flakiness\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/81135065749b4f60c06619b9caaf0a11871c1ddf\"\u003e\u003ccode\u003e8113506\u003c/code\u003e\u003c/a\u003e Fix test flakiness caused by slow callback duration logging\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1e988b617b69588e33fecb75e36a9837245f562f\"\u003e\u003ccode\u003e1e988b6\u003c/code\u003e\u003c/a\u003e Fixed CapacityLimiter raising trio.WouldBlock instead of anyio.WouldBlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44713f345cd29dd4e7d76553c134543a1296cc62\"\u003e\u003ccode\u003e44713f3\u003c/code\u003e\u003c/a\u003e Pin setup-uv to a commit sha across downstream jobs (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1213\"\u003e#1213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f1b7301c8264b0d2e8d24a5788fd29e93dea4040\"\u003e\u003ccode\u003ef1b7301\u003c/code\u003e\u003c/a\u003e Fixed stderr writes in a worker subprocess causing a deadlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1207\"\u003e#1207\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/212be93c2cf2c841e753e95e5e2c543ee7feca90\"\u003e\u003ccode\u003e212be93\u003c/code\u003e\u003c/a\u003e Fix flaky test_tcp_listener_same_port using a hardcoded port (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1206\"\u003e#1206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.1...4.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.3 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.1/\"\u003ehttps://pypi.org/project/click/8.4.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-1\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-1\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/32\"\u003ehttps://github.com/pallets/click/milestone/32\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type conversion again. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3458\"\u003e#3458\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3484\"\u003e#3484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3277\"\u003e#3277\u003c/a\u003e # 3466\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion result. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3015\"\u003e#3015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3487\"\u003e#3487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our [Version Support Policy][version] on our website.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-06-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by {pr}\u003ccode\u003e3126\u003c/code\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. {issue}\u003ccode\u003e3502\u003c/code\u003e\n{issue}\u003ccode\u003e3043\u003c/code\u003e {pr}\u003ccode\u003e3504\u003c/code\u003e {pr}\u003ccode\u003e3508\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. {pr}\u003ccode\u003e3509\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n{issue}\u003ccode\u003e3059\u003c/code\u003e {pr}\u003ccode\u003e3507\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. {issue}\u003ccode\u003e3242\u003c/code\u003e {issue}\u003ccode\u003e2542\u003c/code\u003e {pr}\u003ccode\u003e3534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from {pr}\u003ccode\u003e3482\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e\n{pr}\u003ccode\u003e3533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. {pr}\u003ccode\u003e3578\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. {issue}\u003ccode\u003e2331\u003c/code\u003e {issue}\u003ccode\u003e1884\u003c/code\u003e {issue}\u003ccode\u003e3125\u003c/code\u003e {pr}\u003ccode\u003e3582\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.4.1\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-21\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type\nconversion again. {issue}\u003ccode\u003e3458\u003c/code\u003e {pr}\u003ccode\u003e3484\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. {issue}\u003ccode\u003e3277\u003c/code\u003e {pr}\u003ccode\u003e3466\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eEnum\u003c/code\u003e values used as \u003ccode\u003eChoice\u003c/code\u003e options produces a\nvalid completion result. {issue}\u003ccode\u003e3015\u003c/code\u003e {pr}\u003ccode\u003e3471\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. {issue}\u003ccode\u003e3487\u003c/code\u003e {pr}\u003ccode\u003e3493\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e {pr}\u003ccode\u003e3482\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eopen_url\u003c/code\u003e on Windows when the file path contains spaces.\n{issue}\u003ccode\u003e2994\u003c/code\u003e {pr}\u003ccode\u003e3478\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.4.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-17\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e{class}\u003ccode\u003eParamType\u003c/code\u003e typing improvements. {pr}\u003ccode\u003e3371\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e{class}\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.3...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.81.1 to 1.82.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.82.1\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.82.1 (glacier).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Backport][v1.82.x][Python] Update lower bound for protobuf from 6.33.5 to 7.35.1 by \u003ca href=\"https://github.com/asheshvidyut\"\u003e\u003ccode\u003e@​asheshvidyut\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42920\"\u003egrpc/grpc#42920\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/grpc/grpc/compare/v1.82.0...v1.82.1\"\u003ehttps://github.com/grpc/grpc/compare/v1.82.0...v1.82.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease v1.82.0\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.82.0 (glacier).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\nThis is release 1.82.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003eglacier\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[call creds] Add support for looking up and attaching regional access boundary policy metadata. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41594\"\u003e#41594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnregister CFStream callbacks during endpoint shutdown. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42211\"\u003e#42211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix fd 0 incorrectly treated as invalid across POSIX socket code. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41764\"\u003e#41764\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xDS] enable new ORCA-to-LRS propagation behavior (gRFC A85). (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42411\"\u003e#42411\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[RetryFilter::LegacyCallData]: avoid tripping abseil nullopt assertion. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42405\"\u003e#42405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds] Implement A114: WRR support for custom backend metrics. (\u003ca...\n\n_Description has been truncated_","html_url":"https://github.com/wlilley93/boltrig/pull/52","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/wlilley93%2Fboltrig/issues/52","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/52/packages"}},{"old_version":"0.15.20","new_version":"0.15.22","update_type":"patch","path":null,"pr_created_at":"2026-07-20T02:12:14.000Z","version_change":"0.15.20 → 0.15.22","issue":{"uuid":"4925226325","node_id":"PR_kwDOTH3Q487zp48d","number":5,"state":"open","title":"Bump the python-minor-patch group across 1 directory with 3 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-20T02:12:14.000Z","updated_at":"2026-07-20T02:12:15.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python-minor-patch","update_count":3,"packages":[{"name":"typer","old_version":"0.26.8","new_version":"0.27.0","repository_url":"https://github.com/fastapi/typer"},{"name":"import-linter","old_version":"2.12","new_version":"2.13","repository_url":"https://github.com/seddonym/import-linter"},{"name":"ruff","old_version":"0.15.20","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 3 updates in the / directory: [typer](https://github.com/fastapi/typer), [import-linter](https://github.com/seddonym/import-linter) and [ruff](https://github.com/astral-sh/ruff).\n\nUpdates `typer` from 0.26.8 to 0.27.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/releases\"\u003etyper's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.0\u003c/h2\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e💥 Update metavar printing. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1863\"\u003e#1863\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1896\"\u003e#1896\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Bump ty to 0.0.53. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1877\"\u003e#1877\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1897\"\u003e#1897\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1873\"\u003e#1873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1895\"\u003e#1895\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1872\"\u003e#1872\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1883\"\u003e#1883\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1880\"\u003e#1880\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1874\"\u003e#1874\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1876\"\u003e#1876\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1879\"\u003e#1879\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump \u003ca href=\"https://github.com/crate-ci/typos\"\u003ehttps://github.com/crate-ci/typos\u003c/a\u003e from v1.46.0 to 1.47.2 in the pre-commit group across 1 directory. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1834\"\u003e#1834\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pydantic-settings from 2.14.1 to 2.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1849\"\u003e#1849\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/typer/blob/master/docs/release-notes.md\"\u003etyper's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.27.0 (2026-07-15)\u003c/h2\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e💥 Update metavar printing. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1863\"\u003e#1863\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1896\"\u003e#1896\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Bump ty to 0.0.53. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1877\"\u003e#1877\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1897\"\u003e#1897\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1873\"\u003e#1873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1895\"\u003e#1895\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1872\"\u003e#1872\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1883\"\u003e#1883\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1880\"\u003e#1880\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1874\"\u003e#1874\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1876\"\u003e#1876\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1879\"\u003e#1879\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump \u003ca href=\"https://github.com/crate-ci/typos\"\u003ehttps://github.com/crate-ci/typos\u003c/a\u003e from v1.46.0 to 1.47.2 in the pre-commit group across 1 directory. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1834\"\u003e#1834\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pydantic-settings from 2.14.1 to 2.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1849\"\u003e#1849\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/60af34b60ab2650a74af32c6ce340c5cfbceb3d8\"\u003e\u003ccode\u003e60af34b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.27.0 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1899\"\u003e#1899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/efaf4d52a8f133c81b1c64a4fcd74a87970f8236\"\u003e\u003ccode\u003eefaf4d5\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/42196d479eb3d12b6d7c5daf47f18bdb1dc25cf6\"\u003e\u003ccode\u003e42196d4\u003c/code\u003e\u003c/a\u003e 💥 Update metavar printing (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1863\"\u003e#1863\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/3a3bd0f20a417835d4b4505a0bf834620e024cdb\"\u003e\u003ccode\u003e3a3bd0f\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/fa6caa9c0a5f46da93a050f897ca0007080ffe88\"\u003e\u003ccode\u003efa6caa9\u003c/code\u003e\u003c/a\u003e ⬆ Bump the python-packages group across 1 directory with 5 updates (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1896\"\u003e#1896\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/35b8990323473791dcf1fc366829069b7c236c3c\"\u003e\u003ccode\u003e35b8990\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/5c7e904ef0b240c2d96a188a378b4de730909363\"\u003e\u003ccode\u003e5c7e904\u003c/code\u003e\u003c/a\u003e ⬆️ Bump ty to 0.0.53 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1877\"\u003e#1877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/91b19a0163e1b3d19fcd4d9efe753e026d900add\"\u003e\u003ccode\u003e91b19a0\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/4336118652f29c80ba5194b80479b06c77f39891\"\u003e\u003ccode\u003e4336118\u003c/code\u003e\u003c/a\u003e ⬆ Bump the github-actions group across 1 directory with 4 updates (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1897\"\u003e#1897\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/9a5a42e40f66d43feb8a42d95d9685b172b07c90\"\u003e\u003ccode\u003e9a5a42e\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/typer/compare/0.26.8...0.27.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `import-linter` from 2.12 to 2.13\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/seddonym/import-linter/blob/main/docs/release_notes.md\"\u003eimport-linter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13 (2026-07-03)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd module counts option to the explore UI and \u003ccode\u003edrawgraph\u003c/code\u003e command.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/f544debbb0efe10092cd387032ea76b94a0acee0\"\u003e\u003ccode\u003ef544deb\u003c/code\u003e\u003c/a\u003e Release v2.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/ef5adf868962b073005b69abdd3ffb7b57457a2f\"\u003e\u003ccode\u003eef5adf8\u003c/code\u003e\u003c/a\u003e Add more tests for drawgraph\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/73ee730c16c25b4f659dd4ecc3b7cf8ac78eddc6\"\u003e\u003ccode\u003e73ee730\u003c/code\u003e\u003c/a\u003e Upgrade grimp 3.14 -\u0026gt; 3.15\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/6d0bffcd3255fb302e0e3a3371f585393f48e99d\"\u003e\u003ccode\u003e6d0bffc\u003c/code\u003e\u003c/a\u003e Add comma for thousands separator\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/8b0e7df5298f0b56af73cc0e9695d0fd4d828f3c\"\u003e\u003ccode\u003e8b0e7df\u003c/code\u003e\u003c/a\u003e Document module counts option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/seddonym/import-linter/commit/542e2c95155b96bdf33538481e0b33db9add7c02\"\u003e\u003ccode\u003e542e2c9\u003c/code\u003e\u003c/a\u003e Add a module count to the UI\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/seddonym/import-linter/compare/v2.12...v2.13\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.20 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/j2h4u/python-docker-service-template/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/j2h4u%2Fpython-docker-service-template/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}},{"old_version":"0.15.21","new_version":"0.15.22","update_type":"patch","path":"/backend","pr_created_at":"2026-07-19T00:33:49.000Z","version_change":"0.15.21 → 0.15.22","issue":{"uuid":"4920656165","node_id":"PR_kwDOQedBh87zcBP8","number":651,"state":"open","title":"chore(deps): bump the pip-backend-patch-minor group in /backend with 5 updates","user":"dependabot[bot]","labels":["dependencies","type:chore","area:backend","area:ci"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-19T00:33:49.000Z","updated_at":"2026-07-19T00:34:01.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"pip-backend-patch-minor","update_count":5,"packages":[{"name":"fastapi","old_version":"0.139.0","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"sentry-sdk","old_version":"2.64.0","new_version":"2.66.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.7","new_version":"3.31.0","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps the pip-backend-patch-minor group in /backend with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.139.0` | `0.139.2` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.64.0` | `2.66.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.15.22` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.2` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.7` | `3.31.0` |\n\nUpdates `fastapi` from 0.139.0 to 0.139.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.139.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16013\"\u003e#16013\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.139.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16011\"\u003e#16011\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being applied. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15995\"\u003e#15995\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16005\"\u003e#16005\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15996\"\u003e#15996\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16006\"\u003e#16006\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15999\"\u003e#15999\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16004\"\u003e#16004\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16001\"\u003e#16001\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16003\"\u003e#16003\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15998\"\u003e#15998\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16000\"\u003e#16000\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15997\"\u003e#15997\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16002\"\u003e#16002\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15990\"\u003e#15990\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15925\"\u003e#15925\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15797\"\u003e#15797\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update \u003ccode\u003ellm-prompt.md\u003c/code\u003e for Hindi. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15810\"\u003e#15810\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix language-specific translation prompt for Russian language. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15924\"\u003e#15924\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15981\"\u003e#15981\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15982\"\u003e#15982\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15983\"\u003e#15983\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15985\"\u003e#15985\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use \u003ccode\u003eFASTAPI_LATEST_CHANGES\u003c/code\u003e token in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15984\"\u003e#15984\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15873\"\u003e#15873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15874\"\u003e#15874\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15950\"\u003e#15950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15952\"\u003e#15952\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: add TutorCruncher. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15947\"\u003e#15947\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix notify translations checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15933\"\u003e#15933\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15932\"\u003e#15932\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove RapidProxy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15929\"\u003e#15929\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15928\"\u003e#15928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15926\"\u003e#15926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/866b7a3d0ce1025a3811f23aea4846d01a2b16a8\"\u003e\u003ccode\u003e866b7a3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16014\"\u003e#16014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b3effea754619f0c305af576be23a51865292a3\"\u003e\u003ccode\u003e7b3effe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7fe315c21afb8a57a2b559772e0f7ced7e5d071a\"\u003e\u003ccode\u003e7fe315c\u003c/code\u003e\u003c/a\u003e 🐛 Refactor router route building to make it thread-safe, mainly relevant for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c48e67b1ce9c03fc9bd4b1ac72350e51ad5a6e8a\"\u003e\u003ccode\u003ec48e67b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16012\"\u003e#16012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2acc4fbf155caf016e3bd2602c0d2ec52723e635\"\u003e\u003ccode\u003e2acc4fb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/eb75fd078e83aed935016bcdf0705cd58bbf0d0e\"\u003e\u003ccode\u003eeb75fd0\u003c/code\u003e\u003c/a\u003e 🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16011\"\u003e#16011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9b8410bdc9fa1fd679ea7e65b926535c7045ab87\"\u003e\u003ccode\u003e9b8410b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e24d44cce4092a33b64e9536e96e7608a7dcb9b8\"\u003e\u003ccode\u003ee24d44c\u003c/code\u003e\u003c/a\u003e 📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being ap...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/93b78f8646dea4543cc4d938f7e29b8547749a99\"\u003e\u003ccode\u003e93b78f8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b959b443577c5f2b870cdef13219b98aa32f8943\"\u003e\u003ccode\u003eb959b44\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.139.0...0.139.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.64.0 to 2.66.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.66.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(tracing) Promote trace_lifecycle and ignore_spans to top-level options by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6821\"\u003e#6821\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (HTTP clients) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6811\"\u003e#6811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (task queues) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6814\"\u003e#6814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (misc) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6815\"\u003e#6815\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (databases) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6808\"\u003e#6808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (web frameworks) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6810\"\u003e#6810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (django) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6809\"\u003e#6809\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(logging) Fix flaky test_logging_captured_warnings by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6824\"\u003e#6824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove flaky no cyclic garbage test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6817\"\u003e#6817\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove Claude permission settings by \u003ca href=\"https://github.com/cleptric\"\u003e\u003ccode\u003e@​cleptric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6806\"\u003e#6806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove \u003ccode\u003enullcontext\u003c/code\u003e to \u003ccode\u003esentry_sdk.utils\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6805\"\u003e#6805\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.65.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eHuey\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6779\"\u003e#6779\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on producer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6778\"\u003e#6778\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(arq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6767\"\u003e#6767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(dramatiq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6776\"\u003e#6776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(rq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6774\"\u003e#6774\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTake first sentry-trace header in case multiple are supplied by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6722\"\u003e#6722\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Avoid \u003ccode\u003eValueError\u003c/code\u003e in async middleware \u003ccode\u003eprocess_*\u003c/code\u003e hooks by \u003ca href=\"https://github.com/r0ro\"\u003e\u003ccode\u003e@​r0ro\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6698\"\u003e#6698\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scope) Drop None user attribute values in set_user by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6692\"\u003e#6692\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Don't overwrite user set during request in AuthenticationMiddleware by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6760\"\u003e#6760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.66.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(tracing) Promote trace_lifecycle and ignore_spans to top-level options by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6821\"\u003e#6821\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (HTTP clients) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6811\"\u003e#6811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (task queues) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6814\"\u003e#6814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (misc) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6815\"\u003e#6815\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (databases) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6808\"\u003e#6808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (web frameworks) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6810\"\u003e#6810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (django) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6809\"\u003e#6809\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(logging) Fix flaky test_logging_captured_warnings by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6824\"\u003e#6824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove flaky no cyclic garbage test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6817\"\u003e#6817\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove Claude permission settings by \u003ca href=\"https://github.com/cleptric\"\u003e\u003ccode\u003e@​cleptric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6806\"\u003e#6806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove \u003ccode\u003enullcontext\u003c/code\u003e to \u003ccode\u003esentry_sdk.utils\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6805\"\u003e#6805\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.65.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eHuey\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6779\"\u003e#6779\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on producer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6778\"\u003e#6778\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(arq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6767\"\u003e#6767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(dramatiq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6776\"\u003e#6776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(rq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6774\"\u003e#6774\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTake first sentry-trace header in case multiple are supplied by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6722\"\u003e#6722\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Avoid \u003ccode\u003eValueError\u003c/code\u003e in async middleware \u003ccode\u003eprocess_*\u003c/code\u003e hooks by \u003ca href=\"https://github.com/r0ro\"\u003e\u003ccode\u003e@​r0ro\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6698\"\u003e#6698\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scope) Drop None user attribute values in set_user by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6692\"\u003e#6692\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Don't overwrite user set during request in AuthenticationMiddleware by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6760\"\u003e#6760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5179f60b025693f381d6d93cd69817f32931825b\"\u003e\u003ccode\u003e5179f60\u003c/code\u003e\u003c/a\u003e update changelog with docs link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e4bcb59e5a87772b1a9dee6189889a2dcee8d776\"\u003e\u003ccode\u003ee4bcb59\u003c/code\u003e\u003c/a\u003e release: 2.66.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5ba869c03908edde69b2c6526bdd5f03a37bfef4\"\u003e\u003ccode\u003e5ba869c\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/efddaab9211769982e0c1874e2fb77b0db88b4cd\"\u003e\u003ccode\u003eefddaab\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/b199a9eea34d7107d81714ca2d1c759f3a6e7e0e\"\u003e\u003ccode\u003eb199a9e\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/d695a6eb6ab6a81251d1abec12b61456b786a566\"\u003e\u003ccode\u003ed695a6e\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/dbf5d03f30d97cffd12116e09a34df7b4c2fdafe\"\u003e\u003ccode\u003edbf5d03\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5c1403440a25999f7d6ce69fcb106205be0b8322\"\u003e\u003ccode\u003e5c14034\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e0d2c4a4c5e01452865d06d4cdcafb5823fef164\"\u003e\u003ccode\u003ee0d2c4a\u003c/code\u003e\u003c/a\u003e feat(tracing): Promote trace_lifecycle and ignore_spans to top-level options ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/baa423fa766a5ba990ad27b1d3b1231f4b265182\"\u003e\u003ccode\u003ebaa423f\u003c/code\u003e\u003c/a\u003e test(logging): Fix flaky test_logging_captured_warnings (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/6824\"\u003e#6824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.64.0...2.66.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.21 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\nincreased memory use during reporting for large projects. Now we use a\ndifferent approach that is both faster and slimmer than 7.15.0. Fixes \u003ccode\u003eissue 2229\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2229:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003ecoveragepy/coveragepy#2229\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-1:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/50d865908dfeb21a0bf1e6f05db578c11662f8dd\"\u003e\u003ccode\u003e50d8659\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b5eed20618cfae07b35328b09dab388e9900f409\"\u003e\u003ccode\u003eb5eed20\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/78cab6e1770e55951c84a78d80b90c60ccfba4d5\"\u003e\u003ccode\u003e78cab6e\u003c/code\u003e\u003c/a\u003e fix: reduce memory use during reporting. \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003e#2229\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2231\"\u003e#2231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b4c1fda244a04caaa940ae77dd476a8bedfbf38e\"\u003e\u003ccode\u003eb4c1fda\u003c/code\u003e\u003c/a\u003e build: bump version to 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/182b010b63a2661c86df1ca3b3f84ce8511ee435\"\u003e\u003ccode\u003e182b010\u003c/code\u003e\u003c/a\u003e perf: resolve sysmon branch events lazily, one pair at a time (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2221\"\u003e#2221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ee271ee21fdf4c169648ff4ad3e9dd9d163e5e7f\"\u003e\u003ccode\u003eee271ee\u003c/code\u003e\u003c/a\u003e perf: compute multiline maps cheaply in the sysmon core (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2220\"\u003e#2220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1441b960c698d591d3a22a2190635039320459de\"\u003e\u003ccode\u003e1441b96\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 6 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2225\"\u003e#2225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/dd806350de678c9e4f137ffdda5cb131d269019c\"\u003e\u003ccode\u003edd80635\u003c/code\u003e\u003c/a\u003e fix: escape context labels in html report inline script block (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2224\"\u003e#2224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.0...7.15.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.29.7 to 3.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.31.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(platform): support Termux/Android by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/678\"\u003etox-dev/filelock#678\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/673\"\u003etox-dev/filelock#673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs(mermaid): follow the light and dark theme toggle by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/674\"\u003etox-dev/filelock#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003easyncio: scope the reentrant-deadlock registry to the owning task by \u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocument every lock type, and stop evicting a marker we cannot read by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/672\"\u003etox-dev/filelock#672\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.1...3.30.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.1...3.30.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e📝 docs: separate changelog releases with a blank line by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/668\"\u003etox-dev/filelock#668\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix: tolerate NFSv3 stale handle in strict claim read by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/669\"\u003etox-dev/filelock#669\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMatch fork-reset protocol on the class object by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/671\"\u003etox-dev/filelock#671\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ereject non-finite lease duration in marker records by \u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/670\"\u003etox-dev/filelock#670\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.0...3.30.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.0...3.30.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🎨 style: readability cleanup across the library by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/598\"\u003etox-dev/filelock#598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(api): ignore lifetime on native OS locks by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/593\"\u003etox-dev/filelock#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(unix): don't mutate lock file before acquiring flock by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/594\"\u003etox-dev/filelock#594\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.0 (2026-07-18)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Termux/Android, whose CPython ships without \u003ccode\u003eos.link\u003c/code\u003e and reports \u003ccode\u003esys.platform == \u0026quot;android\u0026quot;\u003c/code\u003e. \u003ccode\u003eimport filelock\u003c/code\u003e and both \u003ccode\u003eFileLock\u003c/code\u003e and \u003ccode\u003eSoftFileLock\u003c/code\u003e now work there, \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e reports its missing\nhard-link support only when acquired, and process liveness reads \u003ccode\u003e/proc\u003c/code\u003e on Android instead of PID-only checks. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e no longer lets two processes hold the lock at once under heavy contention. A holder now keeps\nits intent claim for the whole hold, so a contender whose directory scan races the holder's freshly linked claim can no\nlonger miss it and win alongside it. A held lock now exposes both an \u003ccode\u003eintent\u003c/code\u003e and a \u003ccode\u003eheld\u003c/code\u003e claim. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.3 (2026-07-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eAsyncFileLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLock\u003c/code\u003e no longer raise a deadlock \u003ccode\u003eRuntimeError\u003c/code\u003e when a different asyncio task\nwaits for a lock they hold; the check now scopes holders to the owning task, so only a same-task reacquire is refused. :pr:\u003ccode\u003e676\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size. The widened body column sized itself in \u003ccode\u003eem\u003c/code\u003e against the reader's font size while the breakpoints that fold the layout resolve \u003ccode\u003eem\u003c/code\u003e against a fixed 16px, so a reader whose default font is larger than 16px had the right-hand table of contents clipped off the edge. The body column now flexes instead, and the right-hand table of contents hides only at the mobile breakpoint. :pr:\u003ccode\u003e673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eColor the mermaid diagrams from whichever theme is active. They previously carried a light palette baked into each\ndiagram's source, which stayed light on a dark page. :pr:\u003ccode\u003e674\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.2 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.SoftFileLease\u003c/code\u003e deleting a live marker whose \u003ccode\u003emode\u003c/code\u003e it does not implement. An unrecognized mode now names its owner instead of reading as malformed, so a record written by a newer filelock survives the grace window rather than being evicted after two seconds. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.StrictSoftFileLock\u003c/code\u003e and :class:\u003ccode\u003e~filelock.AsyncStrictSoftFileLock\u003c/code\u003e calling themselves a native OS lock when they warn that they ignore \u003ccode\u003elifetime\u003c/code\u003e; they now say a strict claim is only ever cleared by \u003ccode\u003eforce_break()\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCover every lock type in the tutorials and how-to guides, with examples drawn from projects that use filelock, and color the mermaid diagrams.\nCorrect the claims that \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e exposes \u003ccode\u003eowner\u003c/code\u003e, that :class:\u003ccode\u003e~filelock.SoftFileLock\u003c/code\u003e evicts a strict sentinel, that :class:\u003ccode\u003e~filelock.ReadWriteLock\u003c/code\u003e requires a \u003ccode\u003e.db\u003c/code\u003e extension, and that every log record is \u003ccode\u003eDEBUG\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.1 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e and \u003ccode\u003eAsyncStrictSoftFileLock\u003c/code\u003e no longer abort acquisition when a peer's claim vanishes as an\nNFSv3 stale filehandle instead of a clean removal; the reader revalidates and skips it, so strict locks hold mutual\nexclusion across independent NFSv3 client caches. :pr:\u003ccode\u003e669\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSoftFileLease\u003c/code\u003e reads a marker whose lease duration is \u003ccode\u003enan\u003c/code\u003e or \u003ccode\u003einf\u003c/code\u003e as malformed rather than as a valid lease,\nso such a marker ages out through the grace window instead of raising \u003ccode\u003eLeaseSettingsMismatch\u003c/code\u003e on every contender. :pr:\u003ccode\u003e670\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.0 (2026-07-16)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/3b66fdc1432e3b02e83525e61a99096aa09a933f\"\u003e\u003ccode\u003e3b66fdc\u003c/code\u003e\u003c/a\u003e Release 3.31.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/166b2b5d723a2e111be36a8b43e594a97141c0fd\"\u003e\u003ccode\u003e166b2b5\u003c/code\u003e\u003c/a\u003e ✨ feat(platform): support Termux/Android (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/678\"\u003e#678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/51bca89704e83ea6bed8462946c72835544dbc8f\"\u003e\u003ccode\u003e51bca89\u003c/code\u003e\u003c/a\u003e Release 3.30.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/fc277001fb6abaea57986dc52d9844d48a9ef2f6\"\u003e\u003ccode\u003efc27700\u003c/code\u003e\u003c/a\u003e asyncio: scope the reentrant-deadlock registry to the owning task (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/676\"\u003e#676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/8699861c86445e3a46ac185dc206a44183cd681a\"\u003e\u003ccode\u003e8699861\u003c/code\u003e\u003c/a\u003e 📝 docs(mermaid): follow the light and dark theme toggle (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1b8da43740e2484fd3c84009e4693213fe6d5300\"\u003e\u003ccode\u003e1b8da43\u003c/code\u003e\u003c/a\u003e Keep both tables of contents on screen at any browser font size (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9a71d061458d18742be9c55170dd4465f8edf1c7\"\u003e\u003ccode\u003e9a71d06\u003c/code\u003e\u003c/a\u003e Release 3.30.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0dfa1b20fb9d85051e3304d3674787bea297b2d1\"\u003e\u003ccode\u003e0dfa1b2\u003c/code\u003e\u003c/a\u003e Document every lock type, and stop evicting a marker we cannot read (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/47d435f9458a70da803001ebbd424ca03f1afe41\"\u003e\u003ccode\u003e47d435f\u003c/code\u003e\u003c/a\u003e Release 3.30.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9b7b3b14027a385f8c636b7ee2ecfd3d052bdca0\"\u003e\u003ccode\u003e9b7b3b1\u003c/code\u003e\u003c/a\u003e reject non-finite lease duration in marker records (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/670\"\u003e#670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.7...3.31.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/Prekzursil/momentstudio/pull/651","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Prekzursil%2Fmomentstudio/issues/651","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/651/packages"}},{"old_version":"0.15.21","new_version":"0.15.22","update_type":"patch","path":null,"pr_created_at":"2026-07-17T17:30:31.000Z","version_change":"0.15.21 → 0.15.22","issue":{"uuid":"4913477136","node_id":"PR_kwDONNuaZc7zFfaI","number":125,"state":"closed","title":"build(deps): bump the lint-tools group with 2 updates","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-17T17:35:07.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-17T17:30:31.000Z","updated_at":"2026-07-17T17:35:09.000Z","time_to_close":276,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"lint-tools","update_count":2,"packages":[{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"ty","old_version":"0.0.59","new_version":"0.0.60","repository_url":"https://github.com/astral-sh/ty"}],"path":null,"ecosystem":"pip"},"body":"Bumps the lint-tools group with 2 updates: [ruff](https://github.com/astral-sh/ruff) and [ty](https://github.com/astral-sh/ty).\n\nUpdates `ruff` from 0.15.21 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ty` from 0.0.59 to 0.0.60\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ty/releases\"\u003ety's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.60\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-15.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExpand transparent callable workaround with overloads and \u003ccode\u003eAwaitable[T]\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26761\"\u003e#26761\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSeparate type-mapping caches by transformation mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26857\"\u003e#26857\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid recursive protocol union redundancy checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26689\"\u003e#26689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle recursive protocols in redundant-cast checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26708\"\u003e#26708\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLSP server\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent type that is written with a code span from being incorrectly re-wrapped during docstring Markdown rendering (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26723\"\u003e#26723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLibrary support\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePydantic: Support \u003ccode\u003epopulate_by_name\u003c/code\u003e and custom initializers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26764\"\u003e#26764\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePydantic: Warn about immediately discarded extra arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26762\"\u003e#26762\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDiagnostics\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow TypeGuard keyword arguments and remove \u003ccode\u003einvalid-type-guard-call\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26809\"\u003e#26809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport own-line suppression comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26785\"\u003e#26785\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCore type checking\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDerive descriptor setter domains for protocols (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26683\"\u003e#26683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle cycles in derived constraint relations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26814\"\u003e#26814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement unified generic call inference (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26141\"\u003e#26141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve constraints from bound receivers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26776\"\u003e#26776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProject exact-length narrowing through TypeVars (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26852\"\u003e#26852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve PEP 695 aliases in type[...] annotations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26842\"\u003e#26842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRetain sequence pattern narrowing in successful \u003ccode\u003ematch\u003c/code\u003e cases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26807\"\u003e#26807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport class and static protocol methods (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26574\"\u003e#26574\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport class objects satisfying instance-method protocols (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26789\"\u003e#26789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003etype[Protocol]\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26649\"\u003e#26649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSync vendored typeshed stubs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26840\"\u003e#26840\u003c/a\u003e). \u003ca href=\"https://github.com/python/typeshed/compare/b9090e99745ac1511d8efd828622b11a9a3623e8...b00c387c669cb50d5d388d77b74c2e832e147fe8\"\u003eTypeshed diff\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat transparent callable decorators consistently in class assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26720\"\u003e#26720\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompare overloaded protocol method returns pairwise (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26684\"\u003e#26684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExtend \u003ccode\u003ePathBounds\u003c/code\u003e fast-path to support both upper and lower bounds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26782\"\u003e#26782\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip \u003ccode\u003eSelf\u003c/code\u003e type scans for non-generic instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26703\"\u003e#26703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ty/blob/main/CHANGELOG.md\"\u003ety's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.60\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-15.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExpand transparent callable workaround with overloads and \u003ccode\u003eAwaitable[T]\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26761\"\u003e#26761\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSeparate type-mapping caches by transformation mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26857\"\u003e#26857\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid recursive protocol union redundancy checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26689\"\u003e#26689\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle recursive protocols in redundant-cast checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26708\"\u003e#26708\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLSP server\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent type that is written with a code span from being incorrectly re-wrapped during docstring Markdown rendering (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26723\"\u003e#26723\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLibrary support\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePydantic: Support \u003ccode\u003epopulate_by_name\u003c/code\u003e and custom initializers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26764\"\u003e#26764\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePydantic: Warn about immediately discarded extra arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26762\"\u003e#26762\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDiagnostics\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow TypeGuard keyword arguments and remove \u003ccode\u003einvalid-type-guard-call\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26809\"\u003e#26809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport own-line suppression comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26785\"\u003e#26785\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCore type checking\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDerive descriptor setter domains for protocols (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26683\"\u003e#26683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle cycles in derived constraint relations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26814\"\u003e#26814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement unified generic call inference (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26141\"\u003e#26141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve constraints from bound receivers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26776\"\u003e#26776\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eProject exact-length narrowing through TypeVars (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26852\"\u003e#26852\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eResolve PEP 695 aliases in type[...] annotations (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26842\"\u003e#26842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRetain sequence pattern narrowing in successful \u003ccode\u003ematch\u003c/code\u003e cases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26807\"\u003e#26807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport class and static protocol methods (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26574\"\u003e#26574\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport class objects satisfying instance-method protocols (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26789\"\u003e#26789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003etype[Protocol]\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26649\"\u003e#26649\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSync vendored typeshed stubs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26840\"\u003e#26840\u003c/a\u003e). \u003ca href=\"https://github.com/python/typeshed/compare/b9090e99745ac1511d8efd828622b11a9a3623e8...b00c387c669cb50d5d388d77b74c2e832e147fe8\"\u003eTypeshed diff\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat transparent callable decorators consistently in class assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26720\"\u003e#26720\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompare overloaded protocol method returns pairwise (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26684\"\u003e#26684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExtend \u003ccode\u003ePathBounds\u003c/code\u003e fast-path to support both upper and lower bounds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26782\"\u003e#26782\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip \u003ccode\u003eSelf\u003c/code\u003e type scans for non-generic instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26703\"\u003e#26703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mtshiba\"\u003e\u003ccode\u003e@​mtshiba\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/ae554ec78e195a51e89ef1d01b517914e186b544\"\u003e\u003ccode\u003eae554ec\u003c/code\u003e\u003c/a\u003e Bump version to 0.0.60 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/4008\"\u003e#4008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/4f78ec596f4c0b8a65ab5966d0791f57c39b69a2\"\u003e\u003ccode\u003e4f78ec5\u003c/code\u003e\u003c/a\u003e Update astral-sh/setup-uv action to v8.3.2 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3997\"\u003e#3997\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/0f9b58781df1cf3675ce8aca522bc86a6cf7bbd4\"\u003e\u003ccode\u003e0f9b587\u003c/code\u003e\u003c/a\u003e Update prek dependencies (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3999\"\u003e#3999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/9afd3736029e81973bf39f55cf980b2f99ed3b5d\"\u003e\u003ccode\u003e9afd373\u003c/code\u003e\u003c/a\u003e Update dependency prek to v0.4.8 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3998\"\u003e#3998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/391f499a8e92a2e086555e4a61df89d4fb510265\"\u003e\u003ccode\u003e391f499\u003c/code\u003e\u003c/a\u003e Update docker/build-push-action action to v7.3.0 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/4000\"\u003e#4000\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/990dfce9b8aba17b4dc1eefba2a1929ec85e9827\"\u003e\u003ccode\u003e990dfce\u003c/code\u003e\u003c/a\u003e Update docker/login-action action to v4.4.0 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/4001\"\u003e#4001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/1b1e87359d5759d523bd525539f78d530b5919e7\"\u003e\u003ccode\u003e1b1e873\u003c/code\u003e\u003c/a\u003e Update docker/metadata-action action to v6.2.0 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/4002\"\u003e#4002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/aece09f47215f624c8e21586e3d157a93b158409\"\u003e\u003ccode\u003eaece09f\u003c/code\u003e\u003c/a\u003e Update docker/setup-buildx-action action to v4.2.0 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/4003\"\u003e#4003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/astral-sh/ty/compare/0.0.59...0.0.60\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/stateful-y/kedro-dagster/pull/125","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/stateful-y%2Fkedro-dagster/issues/125","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/125/packages"}},{"old_version":"0.6.9","new_version":"0.15.22","update_type":"minor","path":null,"pr_created_at":"2026-07-17T13:04:38.000Z","version_change":"0.6.9 → 0.15.22","issue":{"uuid":"4911576621","node_id":"PR_kwDOTblDEM7y_XxN","number":2,"state":"closed","title":"chore(deps): bump the python-minor-patch group with 4 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-17T15:01:34.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-17T13:04:38.000Z","updated_at":"2026-07-17T15:01:44.000Z","time_to_close":7016,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor-patch","update_count":4,"packages":[{"name":"httpx","old_version":"0.27.2","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"ruff","old_version":"0.6.9","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"bandit","old_version":"1.7.9","new_version":"1.9.4","repository_url":"https://github.com/PyCQA/bandit"},{"name":"pip-audit","old_version":"2.7.3","new_version":"2.10.1","repository_url":"https://github.com/pypa/pip-audit"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 4 updates: [httpx](https://github.com/encode/httpx), [ruff](https://github.com/astral-sh/ruff), [bandit](https://github.com/PyCQA/bandit) and [pip-audit](https://github.com/pypa/pip-audit).\n\nUpdates `httpx` from 0.27.2 to 0.28.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/releases\"\u003ehttpx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.28.1\u003c/h2\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.28.0\u003c/h2\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/HEAD/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/blob/master/CHANGELOG.md\"\u003ehttpx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eBe aware that the default \u003cem\u003eJSON request bodies now use a more compact representation\u003c/em\u003e. This is generally considered a prefered style, tho may require updates to test suites.\u003c/p\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations...\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/master/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/26d48e0634e6ee9cdc0533996db289ce4b430177\"\u003e\u003ccode\u003e26d48e0\u003c/code\u003e\u003c/a\u003e Version 0.28.1 (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3445\"\u003e#3445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/89599a9541af14bcf906fc4ed58ccbdf403802ba\"\u003e\u003ccode\u003e89599a9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003everify=False\u003c/code\u003e, \u003ccode\u003ecert=...\u003c/code\u003e case. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/8ecb86f0d74ffc52d4663214fae9526bee89358d\"\u003e\u003ccode\u003e8ecb86f\u003c/code\u003e\u003c/a\u003e Add test for request params behavior changes (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3440\"\u003e#3440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/0cb7e5a2e736628e2f506d259fcf0d48cd2bde82\"\u003e\u003ccode\u003e0cb7e5a\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 11 updates (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/15e21e9ea3cad4f06e22a7e704aabefdf43d2e29\"\u003e\u003ccode\u003e15e21e9\u003c/code\u003e\u003c/a\u003e Updating deprecated docstring Client() class (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3426\"\u003e#3426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/80960fa31918d7663c3f4c3ad61661cf0e80628f\"\u003e\u003ccode\u003e80960fa\u003c/code\u003e\u003c/a\u003e Version 0.28.0. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3419\"\u003e#3419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/a33c87852b8a0dddc65e5f739af1e0a6fca4b91f\"\u003e\u003ccode\u003ea33c878\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eextensions\u003c/code\u003e type annotation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3380\"\u003e#3380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/ce7e14da27abba6574be9b3ea7cd5990556a9343\"\u003e\u003ccode\u003ece7e14d\u003c/code\u003e\u003c/a\u003e Error on verify as str. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3418\"\u003e#3418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/47f4a96ffaaaa07dca1614409549b5d7a6e7af49\"\u003e\u003ccode\u003e47f4a96\u003c/code\u003e\u003c/a\u003e Handle empty zstd responses (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3412\"\u003e#3412\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/189fc4bcbe5f314128775dec66a616ac9a31ad48\"\u003e\u003ccode\u003e189fc4b\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md, fix typo(s) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3406\"\u003e#3406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/httpx/compare/0.27.2...0.28.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.6.9 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.6.9...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `bandit` from 1.7.9 to 1.9.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/PyCQA/bandit/releases\"\u003ebandit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.9.4\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore: fixed some typos in comments by \u003ca href=\"https://github.com/jakob1379\"\u003e\u003ccode\u003e@​jakob1379\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1351\"\u003ePyCQA/bandit#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/login-action from 3.6.0 to 3.7.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1353\"\u003ePyCQA/bandit#1353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/build-push-action from 6.18.0 to 6.19.2 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1357\"\u003ePyCQA/bandit#1357\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B613 crash when reading from stdin by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1361\"\u003ePyCQA/bandit#1361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eInclude filename in nosec 'no failed test' warning by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1363\"\u003ePyCQA/bandit#1363\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B615 false positive when revision is set via variable by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1358\"\u003ePyCQA/bandit#1358\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLower version guard in check_ast_node to Python 3.12 by \u003ca href=\"https://github.com/rcgray\"\u003e\u003ccode\u003e@​rcgray\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1355\"\u003ePyCQA/bandit#1355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B106 reporting wrong line number on multiline function calls by \u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1360\"\u003ePyCQA/bandit#1360\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jakob1379\"\u003e\u003ccode\u003e@​jakob1379\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1351\"\u003ePyCQA/bandit#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/worksbyfriday\"\u003e\u003ccode\u003e@​worksbyfriday\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1361\"\u003ePyCQA/bandit#1361\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rcgray\"\u003e\u003ccode\u003e@​rcgray\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1355\"\u003ePyCQA/bandit#1355\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.9.3...1.9.4\"\u003ehttps://github.com/PyCQA/bandit/compare/1.9.3...1.9.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.9.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1334\"\u003ePyCQA/bandit#1334\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1335\"\u003ePyCQA/bandit#1335\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix B608 to detect \u003ccode\u003eVALUES(\u003c/code\u003e without space by \u003ca href=\"https://github.com/kfess\"\u003e\u003ccode\u003e@​kfess\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1337\"\u003ePyCQA/bandit#1337\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd check for hardcoded passwords in dicts. by \u003ca href=\"https://github.com/alanverresen\"\u003e\u003ccode\u003e@​alanverresen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1338\"\u003ePyCQA/bandit#1338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1341\"\u003ePyCQA/bandit#1341\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate tox tests for Python 3.10 by \u003ca href=\"https://github.com/willschlitzer\"\u003e\u003ccode\u003e@​willschlitzer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1346\"\u003ePyCQA/bandit#1346\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump docker/setup-buildx-action from 3.11.1 to 3.12.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1347\"\u003ePyCQA/bandit#1347\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLimit B614 to torch.load deserializers by \u003ca href=\"https://github.com/dibussoc\"\u003e\u003ccode\u003e@​dibussoc\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1348\"\u003ePyCQA/bandit#1348\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kfess\"\u003e\u003ccode\u003e@​kfess\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1337\"\u003ePyCQA/bandit#1337\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/alanverresen\"\u003e\u003ccode\u003e@​alanverresen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1338\"\u003ePyCQA/bandit#1338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/willschlitzer\"\u003e\u003ccode\u003e@​willschlitzer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1346\"\u003ePyCQA/bandit#1346\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dibussoc\"\u003e\u003ccode\u003e@​dibussoc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1348\"\u003ePyCQA/bandit#1348\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.9.2...1.9.3\"\u003ehttps://github.com/PyCQA/bandit/compare/1.9.2...1.9.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.9.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eArgparse Python 3.14 enhancements by \u003ca href=\"https://github.com/ericwb\"\u003e\u003ccode\u003e@​ericwb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1331\"\u003ePyCQA/bandit#1331\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCheck whether Constant value is str by \u003ca href=\"https://github.com/ericwb\"\u003e\u003ccode\u003e@​ericwb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1333\"\u003ePyCQA/bandit#1333\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.9.1...1.9.2\"\u003ehttps://github.com/PyCQA/bandit/compare/1.9.1...1.9.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.9.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMore Python version related fixes by \u003ca href=\"https://github.com/ericwb\"\u003e\u003ccode\u003e@​ericwb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyCQA/bandit/pull/1327\"\u003ePyCQA/bandit#1327\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/92ae8b82fb422a639f0ed8d99e96cea769594e08\"\u003e\u003ccode\u003e92ae8b8\u003c/code\u003e\u003c/a\u003e Fix B106 reporting wrong line number on multiline function calls (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1360\"\u003e#1360\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/c8c8a55c3307333b8eb46cb2ef46d49b1fad6546\"\u003e\u003ccode\u003ec8c8a55\u003c/code\u003e\u003c/a\u003e Lower version guard in check_ast_node to Python 3.12 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1355\"\u003e#1355\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/8f2f9284fca830ca017b2e2cc3ddc2a7b74b7040\"\u003e\u003ccode\u003e8f2f928\u003c/code\u003e\u003c/a\u003e Fix B615 false positive when revision is set via variable (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1358\"\u003e#1358\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/e27493f71c114e0e5dfc0a475d225d7f9f4a7e2b\"\u003e\u003ccode\u003ee27493f\u003c/code\u003e\u003c/a\u003e Include filename in nosec 'no failed test' warning (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1363\"\u003e#1363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/b69b336450301d424e5ba04c9a58e8d41b7169b6\"\u003e\u003ccode\u003eb69b336\u003c/code\u003e\u003c/a\u003e Fix B613 crash when reading from stdin (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1361\"\u003e#1361\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/e418b798abcc3f2b00c07fd6315da8fe9aeead00\"\u003e\u003ccode\u003ee418b79\u003c/code\u003e\u003c/a\u003e Bump docker/build-push-action from 6.18.0 to 6.19.2 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1357\"\u003e#1357\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/ff646fd7e0e34fb350196fc58448fad17178c27a\"\u003e\u003ccode\u003eff646fd\u003c/code\u003e\u003c/a\u003e Bump docker/login-action from 3.6.0 to 3.7.0 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1353\"\u003e#1353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/c0def6c7ebab60f98c28ba759d488f4fbe6dae89\"\u003e\u003ccode\u003ec0def6c\u003c/code\u003e\u003c/a\u003e chore: fixed some typos in comments (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1351\"\u003e#1351\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/765f00d3f202f83f61d03f882f80a2d5142d81f8\"\u003e\u003ccode\u003e765f00d\u003c/code\u003e\u003c/a\u003e Limit B614 to torch.load deserializers (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1348\"\u003e#1348\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyCQA/bandit/commit/06fbbab0df3374ffa8ef24c6f601b2d5e1d4d429\"\u003e\u003ccode\u003e06fbbab\u003c/code\u003e\u003c/a\u003e Bump docker/setup-buildx-action from 3.11.1 to 3.12.0 (\u003ca href=\"https://redirect.github.com/PyCQA/bandit/issues/1347\"\u003e#1347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/PyCQA/bandit/compare/1.7.9...1.9.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pip-audit` from 2.7.3 to 2.10.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip-audit/releases\"\u003epip-audit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.10.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports the \u003ccode\u003e--osv-url URL\u003c/code\u003e flag, which can be used to\nretrieve vulnerabilities from a custom OSV service. This is useful for\norganizations that host their own mirror of the OSV database, or that\nhave custom OSV records\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/810\"\u003e#810\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports the Ecosyste.ms vulnerability service with\n\u003ccode\u003e--vulnerability-service=esms\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/903\"\u003e#903\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe minimum version of Python is now 3.10\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/905\"\u003e#905\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed a bug where \u003ccode\u003epip-audit\u003c/code\u003e would fail to parse \u003ccode\u003epyproject.toml\u003c/code\u003e files\ncontaining TOML 1.0.0 features\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/910\"\u003e#910\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCycloneDX JSON/XML output now correctly links vulnerabilities to their\naffected components via the \u003ccode\u003eaffects\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/980\"\u003e#980\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.9.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports \u003ca href=\"https://peps.python.org/pep-0751/\"\u003ePEP 751\u003c/a\u003e\nlockfiles. These lockfiles can be audited in \u0026quot;project\u0026quot; mode by\npassing \u003ccode\u003e--locked\u003c/code\u003e to \u003ccode\u003epip-audit\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/888\"\u003e#888\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.8.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epip-audit\u003c/code\u003e now allows some CLI flags to be configured via environment\nvariables (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/755\"\u003e#755\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip-audit/blob/main/CHANGELOG.md\"\u003epip-audit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[2.10.1]\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.10.0]\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports the \u003ccode\u003e--osv-url URL\u003c/code\u003e flag, which can be used to\nretrieve vulnerabilities from a custom OSV service. This is useful for\norganizations that host their own mirror of the OSV database, or that\nhave custom OSV records\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/810\"\u003e#810\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports the Ecosyste.ms vulnerability service with\n\u003ccode\u003e--vulnerability-service=esms\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/903\"\u003e#903\u003c/a\u003e).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe minimum version of Python is now 3.10\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/905\"\u003e#905\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed a bug where \u003ccode\u003epip-audit\u003c/code\u003e would fail to parse \u003ccode\u003epyproject.toml\u003c/code\u003e files\ncontaining TOML 1.0.0 features\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/910\"\u003e#910\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCycloneDX JSON/XML output now correctly links vulnerabilities to their\naffected components via the \u003ccode\u003eaffects\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/980\"\u003e#980\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.9.0]\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epip-audit\u003c/code\u003e now supports \u003ca href=\"https://peps.python.org/pep-0751/\"\u003ePEP 751\u003c/a\u003e\nlockfiles. These lockfiles can be audited in \u0026quot;project\u0026quot; mode by\npassing \u003ccode\u003e--locked\u003c/code\u003e to \u003ccode\u003epip-audit\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/888\"\u003e#888\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.8.0]\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/8894eb8cee033531a1fbd9f2fb160892531c14e3\"\u003e\u003ccode\u003e8894eb8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1056\"\u003e#1056\u003c/a\u003e from pypa/copilot/release-2101\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/1c625b7f4fd5790e6a05723b2ad9e670629a061d\"\u003e\u003ccode\u003e1c625b7\u003c/code\u003e\u003c/a\u003e Update version in README.md to 2.10.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/fd2094bb7b58438176d65722d77c021750a16f84\"\u003e\u003ccode\u003efd2094b\u003c/code\u003e\u003c/a\u003e Prep 2.10.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/58d24880a0053c9ec3ce7e3c35aef6d51d600921\"\u003e\u003ccode\u003e58d2488\u003c/code\u003e\u003c/a\u003e build(deps): bump github/codeql-action from 4.35.2 to 4.36.1 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1052\"\u003e#1052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/8df942058831baec6258f712d42a0bcb03729134\"\u003e\u003ccode\u003e8df9420\u003c/code\u003e\u003c/a\u003e build(deps): bump zizmorcore/zizmor-action from 0.5.3 to 0.5.6 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/3f618d3cde900cd89545d6a3fa4d41612f3b83df\"\u003e\u003ccode\u003e3f618d3\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1053\"\u003e#1053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/4849132c9ec7a2b0b160ec4276408659d0cdcede\"\u003e\u003ccode\u003e4849132\u003c/code\u003e\u003c/a\u003e Restrict OIDC token to publish job (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/c1eb69a71306be7a3ffbbf2bdb59a4cb4eeaa414\"\u003e\u003ccode\u003ec1eb69a\u003c/code\u003e\u003c/a\u003e Fix KeyError when OSV affected entry omits optional \u003ccode\u003eranges\u003c/code\u003e field (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/68de07fb9637027f61df7df2620da93f9deb11ec\"\u003e\u003ccode\u003e68de07f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1054\"\u003e#1054\u003c/a\u003e from pypa/fix/1047\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/ef31c9ea7ae844d6f9c1f85efceb9d4a2533ef5a\"\u003e\u003ccode\u003eef31c9e\u003c/code\u003e\u003c/a\u003e Formatting fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/pip-audit/compare/v2.7.3...v2.10.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/Anurag-tech22/Stadium-core/pull/2","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Anurag-tech22%2FStadium-core/issues/2","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/2/packages"}},{"old_version":"0.15.21","new_version":"0.15.22","update_type":"patch","path":"/arpa-exporter","pr_created_at":"2026-07-17T07:04:50.000Z","version_change":"0.15.21 → 0.15.22","issue":{"uuid":"4908944143","node_id":"PR_kwDONp5CHc7y2yVC","number":603,"state":"open","title":"Chore [deps:pip]: bump ruff from 0.15.21 to 0.15.22 in /arpa-exporter","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-17T07:04:50.000Z","updated_at":"2026-07-17T07:11:24.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Chore [deps:pip]","packages":[{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"}],"path":"/arpa-exporter","ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.21 to 0.15.22.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=pip\u0026previous-version=0.15.21\u0026new-version=0.15.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/navapbc/arpa-reporter/pull/603","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/navapbc%2Farpa-reporter/issues/603","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/603/packages"}},{"old_version":"0.15.21","new_version":"0.15.22","update_type":"patch","path":null,"pr_created_at":"2026-07-17T01:26:33.000Z","version_change":"0.15.21 → 0.15.22","issue":{"uuid":"4907253387","node_id":"PR_kwDOTbCX787yxX1Z","number":4,"state":"closed","title":"Bump ruff from 0.15.21 to 0.15.22","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-17T01:28:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-17T01:26:33.000Z","updated_at":"2026-07-17T01:28:49.000Z","time_to_close":128,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.21 to 0.15.22.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=uv\u0026previous-version=0.15.21\u0026new-version=0.15.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/callum-baillie/vaydeer-studio-linux/pull/4","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/callum-baillie%2Fvaydeer-studio-linux/issues/4","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4/packages"}},{"old_version":"0.15.20","new_version":"0.15.21","update_type":"patch","path":null,"pr_created_at":"2026-07-16T20:43:39.000Z","version_change":"0.15.20 → 0.15.21","issue":{"uuid":"4905846364","node_id":"PR_kwDOJCACl87ys5fh","number":653,"state":"open","title":"build(deps-dev): bump ruff from 0.15.20 to 0.15.21","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-16T20:43:39.000Z","updated_at":"2026-07-16T20:46:45.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps-dev)","packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.20 to 0.15.21.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=uv\u0026previous-version=0.15.20\u0026new-version=0.15.21)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/Ponte-Energy-Partners/peprock/pull/653","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ponte-Energy-Partners%2Fpeprock/issues/653","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/653/packages"}},{"old_version":"0.15.20","new_version":"0.15.22","update_type":"patch","path":"/packages/python","pr_created_at":"2026-07-16T15:35:06.000Z","version_change":"0.15.20 → 0.15.22","issue":{"uuid":"4903628533","node_id":"PR_kwDOTLI9wM7yluM0","number":28,"state":"closed","title":"build(python): bump ruff from 0.15.20 to 0.15.22 in /packages/python","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-17T18:25:37.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-16T15:35:06.000Z","updated_at":"2026-07-17T18:25:45.000Z","time_to_close":96631,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(python)","packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"}],"path":"/packages/python","ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.20 to 0.15.22.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=uv\u0026previous-version=0.15.20\u0026new-version=0.15.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/openakb/spec/pull/28","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/openakb%2Fspec/issues/28","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/28/packages"}},{"old_version":"0.15.21","new_version":"0.15.22","update_type":"patch","path":null,"pr_created_at":"2026-07-16T15:21:43.000Z","version_change":"0.15.21 → 0.15.22","issue":{"uuid":"4903509212","node_id":"PR_kwDOFC14o87ylU6e","number":1317,"state":"open","title":"chore(deps): bump ruff from 0.15.21 to 0.15.22","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-16T15:21:43.000Z","updated_at":"2026-07-16T15:22:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.21 to 0.15.22.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=uv\u0026previous-version=0.15.21\u0026new-version=0.15.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/mikeyhodl/cryptography/pull/1317","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikeyhodl%2Fcryptography/issues/1317","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1317/packages"}},{"old_version":"0.6.9","new_version":"0.15.21","update_type":"minor","path":"/backend","pr_created_at":"2026-07-15T09:30:51.000Z","version_change":"0.6.9 → 0.15.21","issue":{"uuid":"4891179232","node_id":"PR_kwDOTVGB887x9E1o","number":134,"state":"closed","title":"chore(deps): bump the python-dependencies group in /backend with 29 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-07-16T00:22:44.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-15T09:30:51.000Z","updated_at":"2026-07-16T00:25:51.000Z","time_to_close":53513,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-dependencies","update_count":29,"packages":[{"name":"uvicorn","old_version":"0.41.0","new_version":"0.51.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"sqlalchemy","old_version":"2.0.35","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"asyncpg","old_version":"0.29.0","new_version":"0.31.0","repository_url":"https://github.com/MagicStack/asyncpg"},{"name":"alembic","old_version":"1.13.2","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"redis","old_version":"5.0.8","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"bcrypt","old_version":"3.2.2","new_version":"5.0.0","repository_url":"https://github.com/pyca/bcrypt"},{"name":"httpx","old_version":"0.27.2","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"pandas","old_version":"2.2.3","new_version":"3.0.3","repository_url":"https://github.com/pandas-dev/pandas"},{"name":"numpy","old_version":"2.1.1","new_version":"2.5.1","repository_url":"https://github.com/numpy/numpy"},{"name":"scipy","old_version":"1.14.1","new_version":"1.18.0","repository_url":"https://github.com/scipy/scipy"},{"name":"slowapi","old_version":"0.1.9","new_version":"0.1.10","repository_url":"https://github.com/laurents/slowapi"},{"name":"apscheduler","old_version":"3.10.4","new_version":"3.11.3","repository_url":"https://github.com/agronholm/apscheduler"},{"name":"pytz","old_version":"2024.2","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"beautifulsoup4","old_version":"4.12.3","new_version":"4.15.0"},{"name":"yfinance","old_version":"0.2.66","new_version":"1.5.1","repository_url":"https://github.com/ranaroussi/yfinance"},{"name":"anthropic","old_version":"0.97.0","new_version":"0.116.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"claude-agent-sdk","old_version":"0.1.66","new_version":"0.2.119","repository_url":"https://github.com/anthropics/claude-agent-sdk-python"},{"name":"websockets","old_version":"13.1","new_version":"16.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"prometheus-client","old_version":"0.21.0","new_version":"0.25.0","repository_url":"https://github.com/prometheus/client_python"},{"name":"python-json-logger","old_version":"2.0.7","new_version":"4.1.0","repository_url":"https://github.com/nhairs/python-json-logger"},{"name":"pytest-asyncio","old_version":"1.3.0","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"pytest-cov","old_version":"7.0.0","new_version":"7.1.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"diff-cover","old_version":"10.0.0","new_version":"10.3.0","repository_url":"https://github.com/Bachmann1234/diff-cover"},{"name":"anyio","old_version":"4.6.0","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"aiosqlite","old_version":"0.20.0","new_version":"0.22.1","repository_url":"https://github.com/omnilib/aiosqlite"},{"name":"ruff","old_version":"0.6.9","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"1.11.2","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps the python-dependencies group in /backend with 29 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.41.0` | `0.51.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.35` | `2.0.51` |\n| [asyncpg](https://github.com/MagicStack/asyncpg) | `0.29.0` | `0.31.0` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.13.2` | `1.18.5` |\n| [redis](https://github.com/redis/redis-py) | `5.0.8` | `8.0.1` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.4` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [bcrypt](https://github.com/pyca/bcrypt) | `3.2.2` | `5.0.0` |\n| [httpx](https://github.com/encode/httpx) | `0.27.2` | `0.28.1` |\n| [pandas](https://github.com/pandas-dev/pandas) | `2.2.3` | `3.0.3` |\n| [numpy](https://github.com/numpy/numpy) | `2.1.1` | `2.5.1` |\n| [scipy](https://github.com/scipy/scipy) | `1.14.1` | `1.18.0` |\n| [slowapi](https://github.com/laurents/slowapi) | `0.1.9` | `0.1.10` |\n| [apscheduler](https://github.com/agronholm/apscheduler) | `3.10.4` | `3.11.3` |\n| [pytz](https://github.com/stub42/pytz) | `2024.2` | `2026.2` |\n| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.12.3` | `4.15.0` |\n| [yfinance](https://github.com/ranaroussi/yfinance) | `0.2.66` | `1.5.1` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.97.0` | `0.116.0` |\n| [claude-agent-sdk](https://github.com/anthropics/claude-agent-sdk-python) | `0.1.66` | `0.2.119` |\n| [websockets](https://github.com/python-websockets/websockets) | `13.1` | `16.1` |\n| [prometheus-client](https://github.com/prometheus/client_python) | `0.21.0` | `0.25.0` |\n| [python-json-logger](https://github.com/nhairs/python-json-logger) | `2.0.7` | `4.1.0` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `1.3.0` | `1.4.0` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `7.0.0` | `7.1.0` |\n| [diff-cover](https://github.com/Bachmann1234/diff-cover) | `10.0.0` | `10.3.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.6.0` | `4.14.2` |\n| [aiosqlite](https://github.com/omnilib/aiosqlite) | `0.20.0` | `0.22.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.6.9` | `0.15.21` |\n| [mypy](https://github.com/python/mypy) | `1.11.2` | `2.3.0` |\n\nUpdates `uvicorn` from 0.41.0 to 0.51.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.51.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers with overlap on SIGHUP for near-zero-downtime reloads by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3025\"\u003eKludex/uvicorn#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove colorama from the standard extra by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3027\"\u003eKludex/uvicorn#3027\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansio implementation by \u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMemoize trusted host checks to avoid re-parsing the client IP per request by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2970\"\u003eKludex/uvicorn#2970\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the \u003ccode\u003easgi\u003c/code\u003e scope sub-dict per connection by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2976\"\u003eKludex/uvicorn#2976\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBuild a fresh \u003ccode\u003easgi\u003c/code\u003e scope dict per request by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2977\"\u003eKludex/uvicorn#2977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace click.style with an internal ANSI style helper by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2981\"\u003eKludex/uvicorn#2981\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid copying single-frame WebSocket payloads in websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2983\"\u003eKludex/uvicorn#2983\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecate the legacy websockets implementation and default \u003ccode\u003eauto\u003c/code\u003e to websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2985\"\u003eKludex/uvicorn#2985\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExit with a dedicated code on startup failure and stop the supervisor when a worker can't boot by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3001\"\u003eKludex/uvicorn#3001\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip the eager app import in the parent when spawning workers by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3012\"\u003eKludex/uvicorn#3012\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.49.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump httptools minimum version to 0.8.0 by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2962\"\u003eKludex/uvicorn#2962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2971\"\u003eKludex/uvicorn#2971\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.47.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2919\"\u003eKludex/uvicorn#2919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2920\"\u003eKludex/uvicorn#2920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2927\"\u003eKludex/uvicorn#2927\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.51.0 (July 8, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers one at a time on \u003ccode\u003eSIGHUP\u003c/code\u003e, bringing each replacement up before retiring the old worker, so reloads no longer drop requests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003ecolorama\u003c/code\u003e from the \u003ccode\u003estandard\u003c/code\u003e extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.2 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ewebsockets\u0026gt;=13.0\u003c/code\u003e, which the default \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation needs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.1 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3019\"\u003e#3019\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.0 (July 4, 2026)\u003c/h2\u003e\n\u003cp\u003eIf you use WebSockets, note that \u003ccode\u003e--ws auto\u003c/code\u003e now picks the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation. You shouldn't need it, but you can pin \u003ccode\u003e--ws websockets\u003c/code\u003e to get the deprecated legacy one back.\u003c/p\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExit with the dedicated code 3 on any startup failure: app loading, socket bind and lifespan startup errors previously exited with a mix of 0, 1 and 3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3001\"\u003e#3001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop the multiprocess supervisor when a worker exits with code 3 instead of restarting it forever (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3001\"\u003e#3001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefault \u003ccode\u003e--ws auto\u003c/code\u003e to \u003ccode\u003ewebsockets-sansio\u003c/code\u003e when websockets is installed (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip the eager app import in the parent process with \u003ccode\u003e--reload\u003c/code\u003e or \u003ccode\u003e--workers\u003c/code\u003e, fixing a memory regression introduced in 0.47.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBuild a fresh \u003ccode\u003easgi\u003c/code\u003e scope dict per request (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache the \u003ccode\u003easgi\u003c/code\u003e scope sub-dict per connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2976\"\u003e#2976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid copying single-frame WebSocket payloads in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2983\"\u003e#2983\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMemoize trusted host checks in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eclick.style\u003c/code\u003e with an internal ANSI style helper (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2981\"\u003e#2981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate the legacy \u003ccode\u003ewebsockets\u003c/code\u003e implementation; use \u003ccode\u003ewebsockets-sansio\u003c/code\u003e or \u003ccode\u003ewsproto\u003c/code\u003e instead (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.49.0 (June 3, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003ehttptools\u003c/code\u003e minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (reverses the 0.48.0 behavior of ignoring them) (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e4d0b05eb8c6459b7ba27ad13a2c2f4f8d4ece50\"\u003e\u003ccode\u003ee4d0b05\u003c/code\u003e\u003c/a\u003e Version 0.51.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3028\"\u003e#3028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/944e43ddbf715aea7c587f2738cd94c3f9106110\"\u003e\u003ccode\u003e944e43d\u003c/code\u003e\u003c/a\u003e Remove colorama from the standard extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2e787704f2610133059e76d56bbd60f48edd34a3\"\u003e\u003ccode\u003e2e78770\u003c/code\u003e\u003c/a\u003e Restart workers with overlap on SIGHUP for near-zero-downtime reloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a1b570cf577d512bfd396b64d72313233e9c3325\"\u003e\u003ccode\u003ea1b570c\u003c/code\u003e\u003c/a\u003e Version 0.50.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3022\"\u003e#3022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/83c7da7332ac3100171c258071de40d5dde35e13\"\u003e\u003ccode\u003e83c7da7\u003c/code\u003e\u003c/a\u003e Require websockets\u0026gt;=13.0 for the default sansio implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b4d011668a75d02370353f34de6dea59692dcad2\"\u003e\u003ccode\u003eb4d0116\u003c/code\u003e\u003c/a\u003e Version 0.50.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3020\"\u003e#3020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2a9151d0e763df2c56da2bfe8c5dcead4fe5a276\"\u003e\u003ccode\u003e2a9151d\u003c/code\u003e\u003c/a\u003e Split comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1bf3ab42e3aba1cf4acd1ef0c29d8ad9a599d333\"\u003e\u003ccode\u003e1bf3ab4\u003c/code\u003e\u003c/a\u003e Cover the excluded-directory branch in \u003ccode\u003eFileFilter\u003c/code\u003e with a direct test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3014\"\u003e#3014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/837b5f960dbe2f03e9f12feb9955ce2217211ad8\"\u003e\u003ccode\u003e837b5f9\u003c/code\u003e\u003c/a\u003e Deflake multiprocess, reload, and signal supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2975\"\u003e#2975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/21d2c16fd162ce0e92b5c35f4aadca63a8b12e2d\"\u003e\u003ccode\u003e21d2c16\u003c/code\u003e\u003c/a\u003e Version 0.50.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3013\"\u003e#3013\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.41.0...0.51.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.35 to 2.0.51\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.51\u003c/h1\u003e\n\u003cp\u003eReleased: June 15, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003e_orm.subqueryload()\u003c/code\u003e combined with\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e and \u003ccode\u003ePropComparator.and_()\u003c/code\u003e would\nsilently drop the additional filter criteria, causing all related objects\nto be loaded instead of only those matching the filter.  The\n\u003ccode\u003eLoaderCriteriaOption\u003c/code\u003e was being constructed against the base\nentity rather than the effective entity indicated by\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e.  Pull request courtesy Arya Rizky.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13207\"\u003e#13207\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed bug where a failure during \u003ccode\u003etpc_prepare()\u003c/code\u003e within\n\u003ccode\u003e_orm.Session.commit()\u003c/code\u003e for a two-phase session would raise\n\u003ccode\u003eIllegalStateChangeError\u003c/code\u003e instead of the original database\nexception.  The internal \u003ccode\u003e_prepare_impl()\u003c/code\u003e method's error handler\nwas unable to invoke \u003ccode\u003e_orm.SessionTransaction.rollback()\u003c/code\u003e due\nto a state-change guard, preventing proper cleanup and masking the\nunderlying error.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13356\"\u003e#13356\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eengine\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[engine] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003eResult.freeze()\u003c/code\u003e would lose track of ambiguous\ncolumn names present in the original \u003ccode\u003eCursorResult\u003c/code\u003e, causing\nkey-based access on the thawed result to silently return a value instead of\nraising \u003ccode\u003eInvalidRequestError\u003c/code\u003e.  The\n\u003ccode\u003eSimpleResultMetaData\u003c/code\u003e now accepts and propagates ambiguous key\ninformation so that frozen, thawed, and pickled results raise consistently\nfor duplicate column names.  Pull request courtesy Saurabh Kohli.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/9427\"\u003e#9427\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003esql\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[sql] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003e_sql.StatementLambdaElement\u003c/code\u003e would proxy\nattribute access through the cached \u0026quot;expected\u0026quot; expression rather than the\nresolved expression, causing stale closure-bound parameter values to be\nused when a lambda statement was extended with non-lambda criteria such as\nan additional \u003ccode\u003e.where()\u003c/code\u003e clause.  Courtesy cjc0013.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/10827\"\u003e#10827\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asyncpg` from 0.29.0 to 0.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/MagicStack/asyncpg/releases\"\u003easyncpg's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.31.0\u003c/h2\u003e\n\u003cp\u003eEnable Python 3.14 with experimental subinterpreter/freethreading\nsupport.\u003c/p\u003e\n\u003ch1\u003eImprovements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd Python 3.14 support, experimental subinterpreter/freethreading support (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1279\"\u003e#1279\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 9e42642b)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAvoid performing type introspection on known types (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1243\"\u003e#1243\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 5c9986c4)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMake \u003ccode\u003eprepare()\u003c/code\u003e not use named statements by default when cache is disabled (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1245\"\u003e#1245\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 5b14653e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement connection service file functionality (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1223\"\u003e#1223\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/AndrewJackson2020\"\u003e\u003ccode\u003e@​AndrewJackson2020\u003c/code\u003e\u003c/a\u003e in 1d63bb15)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eFixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix multi port connection string issue (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1222\"\u003e#1222\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/AndrewJackson2020\"\u003e\u003ccode\u003e@​AndrewJackson2020\u003c/code\u003e\u003c/a\u003e in 01c0db7b)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAvoid leaking connections if _can_use_connection fails (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1269\"\u003e#1269\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/yuliy-openai\"\u003e\u003ccode\u003e@​yuliy-openai\u003c/code\u003e\u003c/a\u003e in e94302d2)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eOther\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for EOL Python 3.8 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1281\"\u003e#1281\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/elprans\"\u003e\u003ccode\u003e@​elprans\u003c/code\u003e\u003c/a\u003e in 6c2c4904)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.30.0\u003c/h2\u003e\n\u003cp\u003eSupport Python 3.13 and PostgreSQL 17.\u003c/p\u003e\n\u003ch1\u003eImprovements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eImplement GSSAPI authentication\n(by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in 1d4e5680 for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImplement SSPI authentication\n(by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in 1aab2094 for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdd initial typings\n(by \u003ca href=\"https://github.com/bryanforbes\"\u003e\u003ccode\u003e@​bryanforbes\u003c/code\u003e\u003c/a\u003e in d42432bf for \u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAllow building with Cython 3\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/71775a67277fc0aa5bd2b9f15e848826d7078c4d\"\u003e\u003ccode\u003e71775a6\u003c/code\u003e\u003c/a\u003e asyncpg v0.31.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/508cae6441968ef7613a623fece7083cce66c2b3\"\u003e\u003ccode\u003e508cae6\u003c/code\u003e\u003c/a\u003e Test on PostgreSQL 18 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1290\"\u003e#1290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/e534e5f15c73525a6509143b3828335517360f1b\"\u003e\u003ccode\u003ee534e5f\u003c/code\u003e\u003c/a\u003e Bump cibuildwheel\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/07fe5122a680f5768e39fc28d68c94b185037a52\"\u003e\u003ccode\u003e07fe512\u003c/code\u003e\u003c/a\u003e Bump pgproto\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/648b35f18199ebf2a30009376a6e9060cf7ad789\"\u003e\u003ccode\u003e648b35f\u003c/code\u003e\u003c/a\u003e Bump Cython to 3.2.1 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1288\"\u003e#1288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/9e42642b9110d206706697921b6e697a0972649d\"\u003e\u003ccode\u003e9e42642\u003c/code\u003e\u003c/a\u003e Add Python 3.14 support, experimental subinterpreter/freethreading support (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/6fe1c494ef5c3069fa9149c48bf9f8f2cd69f95e\"\u003e\u003ccode\u003e6fe1c49\u003c/code\u003e\u003c/a\u003e Move development deps away from extras and into dependency groups (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1280\"\u003e#1280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/7a548166c2b23561915c481bd332013e3a415cfb\"\u003e\u003ccode\u003e7a54816\u003c/code\u003e\u003c/a\u003e Fix a couple of missed Python version guards\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/6c2c4904e61b2cd2f502540730a24e246cff2ebd\"\u003e\u003ccode\u003e6c2c490\u003c/code\u003e\u003c/a\u003e Drop support for EOL Python 3.8 (\u003ca href=\"https://redirect.github.com/MagicStack/asyncpg/issues/1281\"\u003e#1281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/asyncpg/commit/4c60ae890d1f3800f889679657357f91a6923568\"\u003e\u003ccode\u003e4c60ae8\u003c/code\u003e\u003c/a\u003e Bump version to 0.31.0.dev0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/MagicStack/asyncpg/compare/v0.29.0...v0.31.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.13.2 to 1.18.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.18.5\u003c/h1\u003e\n\u003cp\u003eReleased: June 25, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [commands]\u003c/strong\u003e Added \u003ccode\u003e--splice\u003c/code\u003e support to the \u003ccode\u003emerge()\u003c/code\u003e command. Previously, the\nmerge command would suggest using \u003ccode\u003e--splice\u003c/code\u003e when attempting to merge\nnon-head revisions, but the flag was not actually accepted by the command.\nThe \u003ccode\u003esplice\u003c/code\u003e parameter is now available in both the command-line\ninterface and the \u003ccode\u003ecommand.merge()\u003c/code\u003e function, matching the existing\nsupport in \u003ccode\u003ecommand.revision()\u003c/code\u003e.  Pull request courtesy Kadir Can\nOzden.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1712\"\u003e#1712\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [environment]\u003c/strong\u003e Added \u003ccode\u003eScriptDirectory.get_heads.consider_depends_on\u003c/code\u003e\nparameter to \u003ccode\u003eScriptDirectory.get_heads()\u003c/code\u003e. When set to \u003ccode\u003eTrue\u003c/code\u003e,\nhead revisions that are also a dependency of another revision via\n\u003ccode\u003edepends_on\u003c/code\u003e are excluded from the result, matching the effective\nheads that would be present in the \u003ccode\u003ealembic_version\u003c/code\u003e table after\nrunning all upgrades.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1806\"\u003e#1806\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [autogenerate]\u003c/strong\u003e Fixed rendering of dialect keyword arguments containing\n\u003ccode\u003e~sqlalchemy.schema.Column\u003c/code\u003e objects within sequences, such as\n\u003ccode\u003epostgresql_include\u003c/code\u003e.  These were previously rendered using \u003ccode\u003erepr()\u003c/code\u003e,\nproducing invalid Python in the generated migration scripts.  Column\nobjects within list or tuple values are now correctly rendered as their\nstring column names.  Pull request courtesy Ajay Singh.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1258\"\u003e#1258\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [mysql]\u003c/strong\u003e Implemented type comparison for \u003ccode\u003eENUM\u003c/code\u003e datatypes on MySQL, which\nchecks that the individual enum values are equivalent.  If additional\nentries are on either side, this generates a diff.  Changes of order do not\ngenerate a diff.  Pull request courtesy Furkan Köykıran.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1745\"\u003e#1745\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/779\"\u003e#779\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [operations]\u003c/strong\u003e Fixed bug where the \u003ccode\u003einline_references\u003c/code\u003e parameter of\n\u003ccode\u003eOperations.add_column()\u003c/code\u003e did not include foreign key referential\nactions such as \u003ccode\u003eON DELETE\u003c/code\u003e, \u003ccode\u003eON UPDATE\u003c/code\u003e, \u003ccode\u003eDEFERRABLE\u003c/code\u003e,\n\u003ccode\u003eINITIALLY\u003c/code\u003e, and \u003ccode\u003eMATCH\u003c/code\u003e when rendering the inline \u003ccode\u003eREFERENCES\u003c/code\u003e\nclause.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 5.0.8 to 8.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.0.1\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🐛 Bug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix Unix socket maintenance notification handling and tests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4097\"\u003e#4097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix async cluster node connection release on write errors (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4111\"\u003e#4111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed async MultiDBClient with underlying RedisCluster (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4108\"\u003e#4108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix hiredis readiness checks for high file descriptors (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4115\"\u003e#4115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(search): parse RESP3 FT.SEARCH responses with bytes-typed keys (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4109\"\u003e#4109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixing pubsub's listen method to be blocking. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4119\"\u003e#4119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(asyncio): release pooled connection when Pipeline.reset() is cancelled (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4123\"\u003e#4123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid per-check fd allocation in hiredis _socket_can_read() — use poll() instead of a per-call selector (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4118\"\u003e#4118\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🧰 Maintenance\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdating PyJWT dependency. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4100\"\u003e#4100\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate CI badge in README.md (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4099\"\u003e#4099\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd missing url query argument parser for ssl_min_version (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4047\"\u003e#4047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eci: least-privilege permissions on spellcheck (read) and stale-issues (job-level write for actions/stale) (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4080\"\u003e#4080\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumping github-versions actions (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4102\"\u003e#4102\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdating lib version + supported Redis versions in README.md + updating the Redis versions in CI test matrix (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4092\"\u003e#4092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWe'd like to thank all the contributors who worked on this release!\n\u003ca href=\"https://github.com/violuke\"\u003e\u003ccode\u003e@​violuke\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/mokashang\"\u003e\u003ccode\u003e@​mokashang\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/arpitjain099\"\u003e\u003ccode\u003e@​arpitjain099\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/coredumperror\"\u003e\u003ccode\u003e@​coredumperror\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/elena-kolevska\"\u003e\u003ccode\u003e@​elena-kolevska\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/vladvildanov\"\u003e\u003ccode\u003e@​vladvildanov\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/petyaslavova\"\u003e\u003ccode\u003e@​petyaslavova\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e8.0.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync Cluster PubSub\u003c/h3\u003e\n\u003cp\u003eThis release introduces full \u003cstrong\u003easyncio Cluster PubSub support\u003c/strong\u003e, bringing shard-channel capabilities (\u003ccode\u003eSSUBSCRIBE\u003c/code\u003e, \u003ccode\u003eSUNSUBSCRIBE\u003c/code\u003e, \u003ccode\u003eSPUBLISH\u003c/code\u003e) to the async \u003ccode\u003eRedisCluster\u003c/code\u003e client. The new \u003ccode\u003eClusterPubSub\u003c/code\u003e class in \u003ccode\u003eredis.asyncio.cluster\u003c/code\u003e automatically routes shard-channel subscriptions to the correct cluster node based on key-slot hashing, manages per-node PubSub connections, and supports round-robin message retrieval across nodes. Users can create a cluster pubsub instance via \u003ccode\u003eRedisCluster.pubsub()\u003c/code\u003e and use \u003ccode\u003essubscribe()\u003c/code\u003e, \u003ccode\u003esunsubscribe()\u003c/code\u003e, and \u003ccode\u003eget_sharded_message()\u003c/code\u003e just as they would with the sync cluster client.\u003c/p\u003e\n\u003ch3\u003eKeyspace and subkey notifications\u003c/h3\u003e\n\u003cp\u003eRedis Keyspace Notifications are now supported for standalone and cluster deployments in both sync and async modes. New classes — \u003ccode\u003eKeyspaceNotifications\u003c/code\u003e, \u003ccode\u003eClusterKeyspaceNotifications\u003c/code\u003e, \u003ccode\u003eAsyncKeyspaceNotifications\u003c/code\u003e, and \u003ccode\u003eAsyncClusterKeyspaceNotifications\u003c/code\u003e — provide a high-level API for keyspace/keyevent subscriptions and subkey notification families: \u003ccode\u003esubkeyspace\u003c/code\u003e, \u003ccode\u003esubkeyevent\u003c/code\u003e, \u003ccode\u003esubkeyspaceitem\u003c/code\u003e, and \u003ccode\u003esubkeyspaceevent\u003c/code\u003e. Convenience methods like \u003ccode\u003esubscribe_keyspace()\u003c/code\u003e, \u003ccode\u003esubscribe_keyevent()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyspace()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyevent()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyspaceitem()\u003c/code\u003e, and \u003ccode\u003esubscribe_subkeyspaceevent()\u003c/code\u003e simplify common patterns, with channel classes for both key and subkey channels.\u003c/p\u003e\n\u003cp\u003eIn cluster mode, subscriptions are managed across primary nodes because each node emits notifications only for keys it owns, with built-in topology-change handling. Sync \u003ccode\u003erun_in_thread()\u003c/code\u003e and async \u003ccode\u003elisten()\u003c/code\u003e workflows are supported.\u003c/p\u003e\n\u003ch3\u003eRedis Array commands(\u003ca href=\"https://redis.io/docs/latest/develop/data-types/arrays/\"\u003ehttps://redis.io/docs/latest/develop/data-types/arrays/\u003c/a\u003e)\u003c/h3\u003e\n\u003cp\u003eredis-py now supports \u003ca href=\"https://redis.io/docs/latest/develop/data-types/arrays/\"\u003eRedis Arrays\u003c/a\u003e, a preview Redis data type for sparse, index-addressable sequences of strings. New \u003ccode\u003eAR*\u003c/code\u003e command helpers cover indexed reads/writes, range scans, deletion, cursor-based insertion, ring-buffer writes, metadata, text search, and aggregation, including \u003ccode\u003eARGET\u003c/code\u003e, \u003ccode\u003eARSET\u003c/code\u003e, \u003ccode\u003eARMGET\u003c/code\u003e, \u003ccode\u003eARMSET\u003c/code\u003e, \u003ccode\u003eARSCAN\u003c/code\u003e, \u003ccode\u003eARGREP\u003c/code\u003e, \u003ccode\u003eARRING\u003c/code\u003e, and \u003ccode\u003eAROP\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eType Hints Improvements (breaking changes)\u003c/h3\u003e\n\u003cp\u003eThe \u003ccode\u003e@overload\u003c/code\u003e pattern has been applied systematically across \u003cstrong\u003ecore commands\u003c/strong\u003e (\u003ccode\u003ecore.py\u003c/code\u003e), \u003cstrong\u003eVectorSet commands\u003c/strong\u003e, and \u003cstrong\u003emodule commands\u003c/strong\u003e (Search, JSON, TimeSeries, Bloom filters) to provide distinct return types for sync and async clients. Previously, methods returned a combined \u003ccode\u003eResponseT\u003c/code\u003e (i.e., \u003ccode\u003eUnion[Awaitable[Any], Any]\u003c/code\u003e), which caused static analysis tools like mypy and Pyright to flag false positives. Now, sync clients see concrete return types (e.g., \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003ebool\u003c/code\u003e, \u003ccode\u003elist[str]\u003c/code\u003e) while async clients see \u003ccode\u003eAwaitable[...]\u003c/code\u003e wrappers. This is a \u003cstrong\u003ebreaking change for type-checking only\u003c/strong\u003e—runtime behavior is unchanged, but code relying on the old union return types in type annotations may need updates. Two new protocol types, \u003ccode\u003eSyncClientProtocol\u003c/code\u003e and \u003ccode\u003eAsyncClientProtocol\u003c/code\u003e, are used in overload signatures to enable this distinction.\u003c/p\u003e\n\u003ch3\u003eRESP3 by default with opt-in unified responses\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/7c0fd118c48a7a863d0a0262d858d02c001c4b73\"\u003e\u003ccode\u003e7c0fd11\u003c/code\u003e\u003c/a\u003e Updating lib version to 8.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/b7a4d7d137b680737664e131598c6dab796a5a10\"\u003e\u003ccode\u003eb7a4d7d\u003c/code\u003e\u003c/a\u003e Avoid per-check fd allocation in hiredis \u003ccode\u003e_socket_can_read()\u003c/code\u003e — use \u003ccode\u003epoll()\u003c/code\u003e ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/eec778ef52fd0a2b40b86d881721b1c9226257d4\"\u003e\u003ccode\u003eeec778e\u003c/code\u003e\u003c/a\u003e fix(asyncio): release pooled connection when Pipeline.reset() is cancelled (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/08e01bbf9f2ce8c950f93db918f0883cb6218e5e\"\u003e\u003ccode\u003e08e01bb\u003c/code\u003e\u003c/a\u003e Fixing pubsub's listen method to be blocking. (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4119\"\u003e#4119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/3d5257a04bd54b994372ecd9ffddb7814f4a9755\"\u003e\u003ccode\u003e3d5257a\u003c/code\u003e\u003c/a\u003e fix(search): parse RESP3 FT.SEARCH responses with bytes-typed keys (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4109\"\u003e#4109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/cce28ffa69666439cd8dfeb4dbb9fd313dd8272b\"\u003e\u003ccode\u003ecce28ff\u003c/code\u003e\u003c/a\u003e Fix hiredis readiness checks for high file descriptors (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4115\"\u003e#4115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/e20691c83042a9049dea22b72b74595263e07145\"\u003e\u003ccode\u003ee20691c\u003c/code\u003e\u003c/a\u003e Fixed async MultiDBClient with underlying RedisCluster (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4108\"\u003e#4108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/ea37fccf9aff261cd78e072f26b729e797644440\"\u003e\u003ccode\u003eea37fcc\u003c/code\u003e\u003c/a\u003e Fix async cluster node connection release on write errors (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4111\"\u003e#4111\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/f4146fa8c763fb9cb31f4e2a52f76030e9bebd77\"\u003e\u003ccode\u003ef4146fa\u003c/code\u003e\u003c/a\u003e Updating lib version + supported Redis versions in README.md + updating the R...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/d47674e48542fcac807a739f358b45e4a5e2f099\"\u003e\u003ccode\u003ed47674e\u003c/code\u003e\u003c/a\u003e Bumping github-versions actions (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4102\"\u003e#4102\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v5.0.8...v8.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.12.5 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.2 2026-04-17\u003c/h2\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.1 2026-04-15\u003c/h2\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.0 2026-04-13\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.2 (2026-04-17)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.2\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.field_name\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13084\"\u003e#13084\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.1 (2026-04-15)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.1\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eValidationInfo.data\u003c/code\u003e missing with \u003ccode\u003emodel_validate_json()\u003c/code\u003e by \u003ca href=\"https://github.com/davidhewitt\"\u003e\u003ccode\u003e@​davidhewitt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13079\"\u003e#13079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.0 (2026-04-13)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.0\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe highlights of the v2.13 release are available in the \u003ca href=\"https://pydantic.dev/articles/pydantic-v2-13-release\"\u003eblog post\u003c/a\u003e.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `email-validator` from 2.2.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/JoshData/python-email-validator/releases\"\u003eemail-validator's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe package name is changed from using an underscore (email_validator) to a dash (email-validator) to match PyPi's normalized package name.\u003c/li\u003e\n\u003cli\u003eThe library no longer checks that the local part is at most 64 characters because a more careful reading of RFC 5321 indicates the limit is optional and such email addresses have been found in the wild. However the check can be restored using a new \u003ccode\u003estrict=True\u003c/code\u003e parameter, and the overall 254 character email address length limit is still in place.\u003c/li\u003e\n\u003cli\u003eNew EmailSyntaxError messages are used for some exiting syntax errors related to @-sign homoglyphs and invalid characters in internationalized domains.\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003eallow_display_name=True\u003c/code\u003e, display names are now returned with Unicode NFC normalization.\u003c/li\u003e\n\u003cli\u003eTypeError is now raised if something other than str (or bytes) is passed as the email address.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/JoshData/python-email-validator/blob/main/CHANGELOG.md\"\u003eemail-validator's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.3.0 (August 26, 2025)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe package name is changed from using an underscore (email_validator) to a dash (email-validator) to match PyPi's normalized package name.\u003c/li\u003e\n\u003cli\u003eThe library no longer checks that the local part is at most 64 characters because a more careful reading of RFC 5321 indicates the limit is optional and such email addresses have been found in the wild. However the check can be restored using a new \u003ccode\u003estrict=True\u003c/code\u003e parameter, and the overall 254 character email address length limit is still in place.\u003c/li\u003e\n\u003cli\u003eNew EmailSyntaxError messages are used for some exiting syntax errors related to @-sign homoglyphs and invalid characters in internationalized domains.\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003eallow_display_name=True\u003c/code\u003e, display names are now returned with Unicode NFC normalization.\u003c/li\u003e\n\u003cli\u003eTypeError is now raised if something other than str (or bytes) is passed as the email address.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/030a63a183a6a66450e98381ca9a23ab9769706a\"\u003e\u003ccode\u003e030a63a\u003c/code\u003e\u003c/a\u003e Version 2.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/e943a0f07f5c130b4a419e0cd79f705f36bf24fe\"\u003e\u003ccode\u003ee943a0f\u003c/code\u003e\u003c/a\u003e Raise TypeError when an invalid argument is passed for email, closes \u003ca href=\"https://redirect.github.com/JoshData/python-email-validator/issues/155\"\u003e#155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/f90d256045dc1ccbcffd5514189267d14a9e3ea1\"\u003e\u003ccode\u003ef90d256\u003c/code\u003e\u003c/a\u003e Remove local part length check unless new strict flag is given, fixes \u003ca href=\"https://redirect.github.com/JoshData/python-email-validator/issues/158\"\u003e#158\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/98800bac023b8713351393a5043034065f1ea6cb\"\u003e\u003ccode\u003e98800ba\u003c/code\u003e\u003c/a\u003e Add explicit checks for internationalized domain name characters invalid unde...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/936aead3bf5c608f8561954e0d2955b7f97bfdad\"\u003e\u003ccode\u003e936aead\u003c/code\u003e\u003c/a\u003e Fix final syntax checks on normalized internationalized domains checking the ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/8043de49596f08d54a07e2bc7c442ced074216a6\"\u003e\u003ccode\u003e8043de4\u003c/code\u003e\u003c/a\u003e NFC-normalize display names per UTS \u003ca href=\"https://redirect.github.com/JoshData/python-email-validator/issues/39\"\u003e#39\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/bc08faa2a74b51a9e7ba7ff4f995c0b475cb5b12\"\u003e\u003ccode\u003ebc08faa\u003c/code\u003e\u003c/a\u003e Add one-off error messages for full-width-at and small-commercial-at which ar...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/a1c90ab58fb0f5d969a8351a68ca15bff068527c\"\u003e\u003ccode\u003ea1c90ab\u003c/code\u003e\u003c/a\u003e Split exceptions_types.py into exceptions.py and types.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/dbcf07cc5c8066c14b6dc58d2dbb4a1e582eeefd\"\u003e\u003ccode\u003edbcf07c\u003c/code\u003e\u003c/a\u003e Change package name from using underscore to dash to match PyPi normalized pa...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JoshData/python-email-validator/commit/7c22208ee5b82c377e960ddcea5293691eadc6cc\"\u003e\u003ccode\u003e7c22208\u003c/code\u003e\u003c/a\u003e Support ALLOW_DISPLAY_NAME and ALLOW_EMPTY_LOCAL in the CLI (\u003ca href=\"https://redirect.github.com/JoshData/python-email-validator/issues/145\"\u003e#145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/JoshData/python-email-validator/compare/v2.2.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `bcrypt` from 3.2.2 to 5.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/bcrypt/blob/main/CHANGELOG.rst\"\u003ebcrypt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBumped MSRV to 1.74.\u003c/li\u003e\n\u003cli\u003eAdded support for Python 3.14 and free-threaded Python 3.14.\u003c/li\u003e\n\u003cli\u003eAdded support for Windows on ARM.\u003c/li\u003e\n\u003cli\u003ePassing \u003ccode\u003ehashpw\u003c/code\u003e a password longer than 72 bytes now raises a\n\u003ccode\u003eValueError\u003c/code\u003e. Previously the password was silently truncated, following the\nbehavior of the original OpenBSD \u003ccode\u003ebcrypt\u003c/code\u003e implementation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.7.\u003c/li\u003e\n\u003cli\u003eWe now support free-threaded Python 3.13.\u003c/li\u003e\n\u003cli\u003eWe now support PyPy 3.11.\u003c/li\u003e\n\u003cli\u003eWe now publish wheels for free-threaded Python 3.13, for PyPy 3.11 on\n\u003ccode\u003emanylinux\u003c/code\u003e, and for ARMv7l on \u003ccode\u003emanylinux\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump Rust dependency versions - this should resolve crashes on Python 3.13\nfree-threaded builds.\u003c/li\u003e\n\u003cli\u003eWe no longer build \u003ccode\u003emanylinux\u003c/code\u003e wheels for PyPy 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump Rust dependency versions\u003c/li\u003e\n\u003cli\u003eRemoved the \u003ccode\u003eBCRYPT_ALLOW_RUST_163\u003c/code\u003e environment variable.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.1.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump Rust dependency versions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.1.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePublish both \u003ccode\u003epy37\u003c/code\u003e and \u003ccode\u003epy39\u003c/code\u003e wheels. This should resolve some errors\nrelating to initializing a module multiple times per process.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.1.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed the type signature on the \u003ccode\u003ekdf\u003c/code\u003e method.\u003c/li\u003e\n\u003cli\u003eFixed packaging bug on Windows.\u003c/li\u003e\n\u003cli\u003eFixed incompatibility with passlib package detection assumptions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/5060bce7e6c27f55e89d5b0d22b7ae0437a362f7\"\u003e\u003ccode\u003e5060bce\u003c/code\u003e\u003c/a\u003e 5.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/e43f568265df7e1aabbaddccc336dbf3ea675df8\"\u003e\u003ccode\u003ee43f568\u003c/code\u003e\u003c/a\u003e Bump actions/cache from 4.2.4 to 4.3.0 (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1077\"\u003e#1077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/fc9f680a96a0d8e9df4c5a1a4d991fd961a90adb\"\u003e\u003ccode\u003efc9f680\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.175 to 0.2.176 in /src/_bcrypt (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1075\"\u003e#1075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/633f46fbb33d8abfe5b9cb0c12eed79878fbff06\"\u003e\u003ccode\u003e633f46f\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1073\"\u003e#1073\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/a2fefbbcff8d46cfd00efa8d2c13956b388d6bec\"\u003e\u003ccode\u003ea2fefbb\u003c/code\u003e\u003c/a\u003e Remove pypy310 builds (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/f60707e18f3f9728f2c6f4ce97fb8fc90721c7d3\"\u003e\u003ccode\u003ef60707e\u003c/code\u003e\u003c/a\u003e Bump wasi from 0.14.5+wasi-0.2.4 to 0.14.7+wasi-0.2.4 in /src/_bcrypt (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1071\"\u003e#1071\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/c790eed8fa205403e1ea0587cf9178e866c940f3\"\u003e\u003ccode\u003ec790eed\u003c/code\u003e\u003c/a\u003e Bump unicode-ident from 1.0.18 to 1.0.19 in /src/_bcrypt (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1070\"\u003e#1070\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/122cbdc6895fd70c044a2f4ad7845c2a56b93096\"\u003e\u003ccode\u003e122cbdc\u003c/code\u003e\u003c/a\u003e Bump target-lexicon from 0.13.2 to 0.13.3 in /src/_bcrypt (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1069\"\u003e#1069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/2bd208d6c5cadba2f983280ec21cc8cf977904d0\"\u003e\u003ccode\u003e2bd208d\u003c/code\u003e\u003c/a\u003e Bump wasi from 0.14.4+wasi-0.2.4 to 0.14.5+wasi-0.2.4 in /src/_bcrypt (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1068\"\u003e#1068\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/bcrypt/commit/e1aa9e883090e0267bd7b38964fe852f70a99b88\"\u003e\u003ccode\u003ee1aa9e8\u003c/code\u003e\u003c/a\u003e remove poinless cargo cache paths from CI (\u003ca href=\"https://redirect.github.com/pyca/bcrypt/issues/1067\"\u003e#1067\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/bcrypt/compare/3.2.2...5.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httpx` from 0.27.2 to 0.28.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/releases\"\u003ehttpx's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.28.1\u003c/h2\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 0.28.0\u003c/h2\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/HEAD/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/encode/httpx/blob/master/CHANGELOG.md\"\u003ehttpx's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.28.1 (6th December, 2024)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix SSL case where \u003ccode\u003everify=False\u003c/code\u003e together with client side certificates.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.28.0 (28th November, 2024)\u003c/h2\u003e\n\u003cp\u003eBe aware that the default \u003cem\u003eJSON request bodies now use a more compact representation\u003c/em\u003e. This is generally considered a prefered style, tho may require updates to test suites.\u003c/p\u003e\n\u003cp\u003eThe 0.28 release includes a limited set of deprecations...\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e:\u003c/p\u003e\n\u003cp\u003eWe are working towards a simplified SSL configuration API.\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFor users of the standard \u003ccode\u003everify=True\u003c/code\u003e or \u003ccode\u003everify=False\u003c/code\u003e cases, or \u003ccode\u003everify=\u0026lt;ssl_context\u0026gt;\u003c/code\u003e case this should require no changes. The following cases have been deprecated...\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003everify\u003c/code\u003e argument as a string argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecert\u003c/code\u003e argument is now deprecated and will raise warnings.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOur revised \u003ca href=\"https://github.com/encode/httpx/blob/master/docs/advanced/ssl.md\"\u003eSSL documentation\u003c/a\u003e covers how to implement the same behaviour with a more constrained API.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThe following changes are also included\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eproxies\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eThe deprecated \u003ccode\u003eapp\u003c/code\u003e argument has now been removed.\u003c/li\u003e\n\u003cli\u003eJSON request bodies use a compact representation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3363\"\u003e#3363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReview URL percent escape sets, based on WHATWG spec. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3371\"\u003e#3371\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/encode/httpx/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecertifi\u003c/code\u003e and \u003ccode\u003ehttpcore\u003c/code\u003e are only imported if required. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003esocks5h\u003c/code\u003e as a valid proxy scheme. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3178\"\u003e#3178\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCleanup \u003ccode\u003eRequest()\u003c/code\u003e method signature in line with \u003ccode\u003eclient.request()\u003c/code\u003e and \u003ccode\u003ehttpx.request()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3378\"\u003e#3378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBugfix: When passing \u003ccode\u003eparams={}\u003c/code\u003e, always strictly update rather than merge with an existing querystring. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/26d48e0634e6ee9cdc0533996db289ce4b430177\"\u003e\u003ccode\u003e26d48e0\u003c/code\u003e\u003c/a\u003e Version 0.28.1 (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3445\"\u003e#3445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/89599a9541af14bcf906fc4ed58ccbdf403802ba\"\u003e\u003ccode\u003e89599a9\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003everify=False\u003c/code\u003e, \u003ccode\u003ecert=...\u003c/code\u003e case. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3442\"\u003e#3442\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/8ecb86f0d74ffc52d4663214fae9526bee89358d\"\u003e\u003ccode\u003e8ecb86f\u003c/code\u003e\u003c/a\u003e Add test for request params behavior changes (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3364\"\u003e#3364\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3440\"\u003e#3440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/0cb7e5a2e736628e2f506d259fcf0d48cd2bde82\"\u003e\u003ccode\u003e0cb7e5a\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 11 updates (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/15e21e9ea3cad4f06e22a7e704aabefdf43d2e29\"\u003e\u003ccode\u003e15e21e9\u003c/code\u003e\u003c/a\u003e Updating deprecated docstring Client() class (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3426\"\u003e#3426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/80960fa31918d7663c3f4c3ad61661cf0e80628f\"\u003e\u003ccode\u003e80960fa\u003c/code\u003e\u003c/a\u003e Version 0.28.0. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3419\"\u003e#3419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/a33c87852b8a0dddc65e5f739af1e0a6fca4b91f\"\u003e\u003ccode\u003ea33c878\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eextensions\u003c/code\u003e type annotation. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3380\"\u003e#3380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/ce7e14da27abba6574be9b3ea7cd5990556a9343\"\u003e\u003ccode\u003ece7e14d\u003c/code\u003e\u003c/a\u003e Error on verify as str. (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3418\"\u003e#3418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/47f4a96ffaaaa07dca1614409549b5d7a6e7af49\"\u003e\u003ccode\u003e47f4a96\u003c/code\u003e\u003c/a\u003e Handle empty zstd responses (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3412\"\u003e#3412\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/encode/httpx/commit/189fc4bcbe5f314128775dec66a616ac9a31ad48\"\u003e\u003ccode\u003e189fc4b\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md, fix typo(s) (\u003ca href=\"https://redirect.github.com/encode/httpx/issues/3406\"\u003e#3406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/encode/httpx/compare/0.27.2...0.28.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pandas` from 2.2.3 to 3.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pandas-dev/pandas/releases\"\u003epandas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epandas 3.0.3\u003c/h2\u003e\n\u003cp\u003eWe are pleased to announce the release of pandas 3.0.3.\nThis is a patch release in the 3.0.x series and includes some regression fixes and bug fixes. We recommend that all users of the 3.0.x series upgrade to this version.\u003c/p\u003e\n\u003cp\u003eSee the \u003ca href=\"https://pandas.pydata.org/docs/whatsnew/v3.0.3.html\"\u003efull whatsnew\u003c/a\u003e for a list of all the changes.\u003c/p\u003e\n\u003cp\u003ePandas 3.0 supports Python 3.11 and higher.\nThe release can be installed from PyPI:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pandas==3.0.*\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOr from conda-forge\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003econda install -c conda-forge pandas=3.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePlease report any issues with the release on the \u003ca href=\"https://github.com/pandas-dev/pandas/issues\"\u003epandas issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThanks to all the contributors who made this release possible.\u003c/p\u003e\n\u003ch2\u003epandas 3.0.2\u003c/h2\u003e\n\u003cp\u003eWe are pleased to announce the release of pandas 3.0.2.\nThis is a patch release in the 3.0.x series and includes some regression fixes and bug fixes. We recommend that all users of the 3.0.x series upgrade to this version.\u003c/p\u003e\n\u003cp\u003eSee the \u003ca href=\"https://pandas.pydata.org/docs/dev/whatsnew/v3.0.2.html\"\u003efull whatsnew\u003c/a\u003e for a list of all the changes.\u003c/p\u003e\n\u003cp\u003ePandas 3.0 supports Python 3.11 and higher.\nThe release can be installed from PyPI:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pandas==3.0.*\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOr from conda-forge\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003econda install -c conda-forge pandas=3.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePlease report any issues with the release on the \u003ca href=\"https://github.com/pandas-dev/pandas/issues\"\u003epandas issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThanks to all the contributors who made this release possible.\u003c/p\u003e\n\u003ch2\u003epandas 3.0.1\u003c/h2\u003e\n\u003cp\u003eWe are pleased to announce the release of pandas 3.0.1.\nThis is a patch release in the 3.0.x series and includes some regression fixes and bug fixes. We recommend that all users of the 3.0.x series upgrade to this version.\u003c/p\u003e\n\u003cp\u003eSee the \u003ca href=\"https://pandas.pydata.org/docs/dev/whatsnew/v3.0.1.html\"\u003efull whatsnew\u003c/a\u003e for a list of all the changes.\u003c/p\u003e\n\u003cp\u003ePandas 3.0.0 supports Python 3.11 and higher.\nThe release can be installed from PyPI:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pandas==3.0.*\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOr from conda-forge\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/72f2fea91530b5abb3cf2100cb22d84e504695c0\"\u003e\u003ccode\u003e72f2fea\u003c/code\u003e\u003c/a\u003e RLS: 3.0.3 (\u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65590\"\u003e#65590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/2897590094c2b6e3962d01a82665936f30be563d\"\u003e\u003ccode\u003e2897590\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65436\"\u003e#65436\u003c/a\u003e on branch 3.0.x (Account for privatization of matplotlib `...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/49894b5b6037c50f6444504070d9b1e8e514001a\"\u003e\u003ccode\u003e49894b5\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65499\"\u003e#65499\u003c/a\u003e on branch 3.0.x (BUG: fix check if pyarrow is installed in...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/1c6d1e30cc4b80bedb769a8b3731b0788f69c9dc\"\u003e\u003ccode\u003e1c6d1e3\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] PERF: remove special casing for zoneinfo in tz_localize_to_u...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/2a547116afc46d88d4e6584670fd793949222a1e\"\u003e\u003ccode\u003e2a54711\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/64379\"\u003e#64379\u003c/a\u003e on branch 3.0.x (PERF: improve performance with ZoneInfo t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/036bb7c0e7160b9d5a7f6bd26a9fc00921fa6977\"\u003e\u003ccode\u003e036bb7c\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65482\"\u003e#65482\u003c/a\u003e on branch 3.0.x (PERF: don't call unique on dtypes for che...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/bf4c182b09251f5b469e8e246ae3ea3e1ae07164\"\u003e\u003ccode\u003ebf4c182\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65410\"\u003e#65410\u003c/a\u003e on branch 3.0.x (TST: also convert str index to object in ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/dd02d75ce219135f9f3f65c13644d4be35585d42\"\u003e\u003ccode\u003edd02d75\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] BUG: keep fsspec OpenFile alive for chained URL reads (\u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/6547\"\u003e#6547\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/aef3d0f6698667262c6d6ffc69180b280b0fa86a\"\u003e\u003ccode\u003eaef3d0f\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] CI: lowercase types-pymysql/types-pyyaml to fix mamba 2.6.0 ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/bb8e24876273a14322047f4b89e648f6a4abebae\"\u003e\u003ccode\u003ebb8e248\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65399\"\u003e#65399\u003c/a\u003e on branch 3.0.x (DOC: fix source link for classes in the r...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pandas-dev/pandas/compare/v2.2.3...v3.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.1.1 to 2.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.5.1 (July 4, 2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.5.1 ...\n\n_Description has been truncated_","html_url":"https://github.com/x812033727/FinceptWeb99/pull/134","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/x812033727%2FFinceptWeb99/issues/134","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/134/packages"}},{"old_version":"0.15.20","new_version":"0.15.21","update_type":"patch","path":"/backend in the backend-dependencies group","pr_created_at":"2026-07-15T02:05:23.000Z","version_change":"0.15.20 → 0.15.21","issue":{"uuid":"4888628618","node_id":"PR_kwDOTX5FXM7x03wJ","number":15,"state":"closed","title":"chore(deps-dev): bump ruff from 0.15.20 to 0.15.21 in /backend in the backend-dependencies group","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-15T02:29:26.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-15T02:05:23.000Z","updated_at":"2026-07-15T02:29:33.000Z","time_to_close":1443,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps-dev)","packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":"/backend in the backend-dependencies group","ecosystem":"pip"},"body":"Bumps the backend-dependencies group in /backend with 1 update: [ruff](https://github.com/astral-sh/ruff).\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=pip\u0026previous-version=0.15.20\u0026new-version=0.15.21)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/byeok99/Sai42/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/byeok99%2FSai42/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"0.15.17","new_version":"0.15.21","update_type":"patch","path":null,"pr_created_at":"2026-07-15T01:43:28.000Z","version_change":"0.15.17 → 0.15.21","issue":{"uuid":"4888529311","node_id":"PR_kwDOS0cVoc7x0jtz","number":17,"state":"closed","title":"Bump ruff from 0.15.17 to 0.15.21","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-18T00:43:20.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-15T01:43:28.000Z","updated_at":"2026-07-18T00:43:22.000Z","time_to_close":255592,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"ruff","old_version":"0.15.17","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.17 to 0.15.21.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.17...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ruff\u0026package-manager=pip\u0026previous-version=0.15.17\u0026new-version=0.15.21)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/nickkats1/Agentic-Chatbot/pull/17","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickkats1%2FAgentic-Chatbot/issues/17","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/17/packages"}},{"old_version":"0.14.9","new_version":"0.15.21","update_type":"minor","path":null,"pr_created_at":"2026-07-14T18:47:23.000Z","version_change":"0.14.9 → 0.15.21","issue":{"uuid":"4886079563","node_id":"PR_kwDOH8gfRs7xsmsL","number":249,"state":"closed","title":"Bump the all-dependencies group with 23 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-15T01:18:47.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-14T18:47:23.000Z","updated_at":"2026-07-15T01:18:49.000Z","time_to_close":23484,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"all-dependencies","update_count":23,"packages":[{"name":"pygments","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/pygments/pygments"},{"name":"docutils","old_version":"0.22.3","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"snowballstemmer","old_version":"3.0.1","new_version":"3.1.1","repository_url":"https://github.com/snowballstem/snowball"},{"name":"babel","old_version":"2.17.0","new_version":"2.18.0","repository_url":"https://github.com/python-babel/babel"},{"name":"imagesize","old_version":"1.4.1","new_version":"2.0.0","repository_url":"https://github.com/shibukawa/imagesize_py"},{"name":"requests","old_version":"2.32.5","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"roman-numerals","old_version":"3.1.0","new_version":"4.1.0","repository_url":"https://github.com/AA-Turner/roman-numerals"},{"name":"packaging","old_version":"25.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"ruff","old_version":"0.14.9","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"build","old_version":"1.3.0","new_version":"1.5.1","repository_url":"https://github.com/pypa/build"},{"name":"pypi-attestations","old_version":"0.0.28","new_version":"0.0.29","repository_url":"https://github.com/pypi/pypi-attestations"},{"name":"pytest","old_version":"9.0.1","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"cython","old_version":"3.2.2","new_version":"3.2.8","repository_url":"https://github.com/cython/cython"},{"name":"setuptools","old_version":"80.9.0","new_version":"83.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"mypy","old_version":"1.19.1","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"pyrefly","old_version":"0.44.0","new_version":"1.1.1","repository_url":"https://github.com/facebook/pyrefly"},{"name":"pyright","old_version":"1.1.407","new_version":"1.1.411","repository_url":"https://github.com/RobertCraigie/pyright-python"},{"name":"ty","old_version":"0.0.1a30","new_version":"0.0.59","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-colorama","old_version":"0.4.15.20250801","new_version":"0.4.15.20260508","repository_url":"https://github.com/python/typeshed"},{"name":"types-defusedxml","old_version":"0.7.0.20250822","new_version":"0.7.0.20260504","repository_url":"https://github.com/python/typeshed"},{"name":"types-docutils","old_version":"0.22.3.20251115","new_version":"0.22.3.20260712","repository_url":"https://github.com/python/typeshed"},{"name":"types-requests","old_version":"2.32.4.20250913","new_version":"2.33.0.20260712","repository_url":"https://github.com/python/typeshed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the all-dependencies group with 23 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pygments](https://github.com/pygments/pygments) | `2.19.2` | `2.20.0` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.22.3` | `0.23` |\n| [snowballstemmer](https://github.com/snowballstem/snowball) | `3.0.1` | `3.1.1` |\n| [babel](https://github.com/python-babel/babel) | `2.17.0` | `2.18.0` |\n| [imagesize](https://github.com/shibukawa/imagesize_py) | `1.4.1` | `2.0.0` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.34.2` |\n| [roman-numerals](https://github.com/AA-Turner/roman-numerals) | `3.1.0` | `4.1.0` |\n| [packaging](https://github.com/pypa/packaging) | `25.0` | `26.2` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.14.9` | `0.15.21` |\n| [build](https://github.com/pypa/build) | `1.3.0` | `1.5.1` |\n| [pypi-attestations](https://github.com/pypi/pypi-attestations) | `0.0.28` | `0.0.29` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.1` | `9.1.1` |\n| [cython](https://github.com/cython/cython) | `3.2.2` | `3.2.8` |\n| [setuptools](https://github.com/pypa/setuptools) | `80.9.0` | `83.0.0` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [mypy](https://github.com/python/mypy) | `1.19.1` | `2.3.0` |\n| [pyrefly](https://github.com/facebook/pyrefly) | `0.44.0` | `1.1.1` |\n| [pyright](https://github.com/RobertCraigie/pyright-python) | `1.1.407` | `1.1.411` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a30` | `0.0.59` |\n| [types-colorama](https://github.com/python/typeshed) | `0.4.15.20250801` | `0.4.15.20260508` |\n| [types-defusedxml](https://github.com/python/typeshed) | `0.7.0.20250822` | `0.7.0.20260504` |\n| [types-docutils](https://github.com/python/typeshed) | `0.22.3.20251115` | `0.22.3.20260712` |\n| [types-requests](https://github.com/python/typeshed) | `2.32.4.20250913` | `2.33.0.20260712` |\n\nUpdates `pygments` from 2.19.2 to 2.20.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygments/pygments/releases\"\u003epygments's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.20.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNew lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRell (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003earchetype: Fix catastrophic backtracking in GUID and ID patterns (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3064\"\u003e#3064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eASN.1: Recognize minus sign and fix range operator (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3014\"\u003e#3014\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eC++: Add C++26 keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e), add integer literal suffixes (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eComponentPascal: Fix \u003ccode\u003eanalyse_text\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3028\"\u003e#3028\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3032\"\u003e#3032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCoq renamed to Rocq (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2883\"\u003e#2883\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2908\"\u003e#2908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCython: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2932\"\u003e#2932\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDebian control: Improve architecture parsing (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3052\"\u003e#3052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDevicetree: Add support for overlay/fragments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3021\"\u003e#3021\u003c/a\u003e), add bytestring support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3022\"\u003e#3022\u003c/a\u003e), fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3057\"\u003e#3057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFennel: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHaskell: Handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/1795\"\u003e#1795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eJava: Add module keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLean4: Add operators \u003ccode\u003e]'\u003c/code\u003e, \u003ccode\u003e]?\u003c/code\u003e, \u003ccode\u003e]!\u003c/code\u003e  (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2946\"\u003e#2946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLESS: Support single-line comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLilyPond: Update to 2.25.29 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLLVM: Support C-style comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3023\"\u003e#3023\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2978\"\u003e#2978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLua(u): Fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3047\"\u003e#3047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMacaulay2: Update to 1.25.05 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2893\"\u003e#2893\u003c/a\u003e), 1.25.11 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2988\"\u003e#2988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMathematica: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2957\"\u003e#2957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emeson: Add additional operators (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMySQL: Update keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eorg-Mode: Support both schedule and deadline (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2899\"\u003e#2899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePHP: Add \u003ccode\u003e__PROPERTY__\u003c/code\u003e magic constant (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2924\"\u003e#2924\u003c/a\u003e), add reserved keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3002\"\u003e#3002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePostgreSQL: Add more keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprotobuf: Fix namespace tokenization (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2929\"\u003e#2929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython: Add \u003ccode\u003et\u003c/code\u003e-string support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2973\"\u003e#2973\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3009\"\u003e#3009\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTablegen: Fix infinite loop (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2972\"\u003e#2972\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTera Term macro: Add commands introduced in v5.3 through v5.6 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTOML: Support TOML 1.1.0 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3026\"\u003e#3026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTurtle: Allow empty comment lines (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2980\"\u003e#2980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eXML: Added \u003ccode\u003e.xbrl\u003c/code\u003e as file ending (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2890\"\u003e#2890\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2891\"\u003e#2891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop Python 3.8, and add Python 3.14 as a supported version (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2987\"\u003e#2987\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to \u003ccode\u003eautopygmentize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2894\"\u003e#2894\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eonedark\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ertt\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2895\"\u003e#2895\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCache entry points to improve performance (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003exterm-256\u003c/code\u003e color table (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3043\"\u003e#3043\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003ekwargs\u003c/code\u003e dictionary getting mutated on each call (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3044\"\u003e#3044\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pygments/pygments/blob/master/CHANGES\"\u003epygments's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.20.0\u003c/h2\u003e\n\u003cp\u003e(released March 29th, 2026)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eNew lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRell (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2914\"\u003e#2914\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated lexers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003earchetype: Fix catastrophic backtracking in GUID and ID patterns (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3064\"\u003e#3064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eASN.1: Recognize minus sign and fix range operator (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3014\"\u003e#3014\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eC++: Add C++26 keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e), add integer literal suffixes (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eComponentPascal: Fix \u003ccode\u003eanalyse_text\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3028\"\u003e#3028\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3032\"\u003e#3032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCoq renamed to Rocq (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2883\"\u003e#2883\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2908\"\u003e#2908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCython: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2932\"\u003e#2932\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDebian control: Improve architecture parsing (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3052\"\u003e#3052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDevicetree: Add support for overlay/fragments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3021\"\u003e#3021\u003c/a\u003e), add bytestring support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3022\"\u003e#3022\u003c/a\u003e), fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3057\"\u003e#3057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFennel: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2911\"\u003e#2911\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHaskell: Handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/1795\"\u003e#1795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eJava: Add module keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2955\"\u003e#2955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLean4: Add operators \u003ccode\u003e]'\u003c/code\u003e, \u003ccode\u003e]?\u003c/code\u003e, \u003ccode\u003e]!\u003c/code\u003e  (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2946\"\u003e#2946\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLESS: Support single-line comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLilyPond: Update to 2.25.29 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2974\"\u003e#2974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLLVM: Support C-style comments (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3023\"\u003e#3023\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2978\"\u003e#2978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLua(u): Fix catastrophic backtracking (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3047\"\u003e#3047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMacaulay2: Update to 1.25.05 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2893\"\u003e#2893\u003c/a\u003e), 1.25.11 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2988\"\u003e#2988\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMathematica: Various improvements (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2957\"\u003e#2957\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emeson: Add additional operators (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMySQL: Update keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eorg-Mode: Support both schedule and deadline (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2899\"\u003e#2899\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePHP: Add \u003ccode\u003e__PROPERTY__\u003c/code\u003e magic constant (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2924\"\u003e#2924\u003c/a\u003e), add reserved keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3002\"\u003e#3002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePostgreSQL: Add more keywords (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eprotobuf: Fix namespace tokenization (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2929\"\u003e#2929\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython: Add \u003ccode\u003et\u003c/code\u003e-string support (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2973\"\u003e#2973\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3009\"\u003e#3009\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTablegen: Fix infinite loop (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2972\"\u003e#2972\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTera Term macro: Add commands introduced in v5.3 through v5.6 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTOML: Support TOML 1.1.0 (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3026\"\u003e#3026\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTurtle: Allow empty comment lines (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2980\"\u003e#2980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eXML: Added \u003ccode\u003e.xbrl\u003c/code\u003e as file ending (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2890\"\u003e#2890\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2891\"\u003e#2891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop Python 3.8, and add Python 3.14 as a supported version (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2987\"\u003e#2987\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eVarious improvements to \u003ccode\u003eautopygmentize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2894\"\u003e#2894\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eonedark\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ertt\u003c/code\u003e style to support more token types (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2895\"\u003e#2895\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCache entry points to improve performance (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/2979\"\u003e#2979\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003exterm-256\u003c/code\u003e color table (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3043\"\u003e#3043\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003ekwargs\u003c/code\u003e dictionary getting mutated on each call (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3044\"\u003e#3044\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/708197d82827ba2d5ca78bcbb653c7102ce86dcd\"\u003e\u003ccode\u003e708197d\u003c/code\u003e\u003c/a\u003e Fix underline length.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/1d4538ae8621d766ecc91ff59caf76ab75983abc\"\u003e\u003ccode\u003e1d4538a\u003c/code\u003e\u003c/a\u003e Prepare 2.20 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/2ceaee4e634eebae2d10a47fd05406871f6bac8f\"\u003e\u003ccode\u003e2ceaee4\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/e3a3c54b58c7f80bc4db887e471d4f91c77844ed\"\u003e\u003ccode\u003ee3a3c54\u003c/code\u003e\u003c/a\u003e Fix Haskell lexer: handle escape sequences in character literals (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3069\"\u003e#3069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/d7c3453e342dac319f58e4091f4ef183cc49d802\"\u003e\u003ccode\u003ed7c3453\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3071\"\u003e#3071\u003c/a\u003e from pygments/harden-html-formatter\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/0f97e7c37d44abfa4ddfddf44a3290fdad586034\"\u003e\u003ccode\u003e0f97e7c\u003c/code\u003e\u003c/a\u003e Harden the HTML formatter against CSS.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/9f981b2ba42b88ca5bdcebf12cd01efd7cd80aec\"\u003e\u003ccode\u003e9f981b2\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/1d889151024e9a53f3702a60558b29b070306e9e\"\u003e\u003ccode\u003e1d88915\u003c/code\u003e\u003c/a\u003e Update CHANGES.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/c3d93adb9827fc054c3c12b47bde31c781a36a93\"\u003e\u003ccode\u003ec3d93ad\u003c/code\u003e\u003c/a\u003e Fix ASN.1 lexer: recognize minus sign and fix range operator (\u003ca href=\"https://redirect.github.com/pygments/pygments/issues/3060\"\u003e#3060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pygments/pygments/commit/4f06bcf8a5ba3f2b5bda24a26ccf041a1a65d91e\"\u003e\u003ccode\u003e4f06bcf\u003c/code\u003e\u003c/a\u003e fix bad behaving backtracking regex in CommonLispLexer\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pygments/pygments/compare/2.19.2...2.20.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `docutils` from 0.22.3 to 0.23\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/rtfd/recommonmark/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `snowballstemmer` from 3.0.1 to 3.1.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/snowballstem/snowball/blob/main/NEWS\"\u003esnowballstemmer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eSnowball 3.1.1 (2026-06-03)\u003c/h1\u003e\n\u003ch2\u003eCompiler changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix a segmentation fault after reporting an error for a string command\nnot followed by a string variable name or string literal.  Bug introduced\nin 3.1.0.  Patch from Jerry James (\u003ca href=\"https://redirect.github.com/snowballstem/snowball/issues/287\"\u003e#287\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCompiler command-line options:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEmit an error for \u003ccode\u003e-o -\u003c/code\u003e/\u003ccode\u003e-output -\u003c/code\u003e.  Output to stdout is not supported\nbecause we need to generate multiple files for some target languages.\nWe were interpreting \u003ccode\u003e-\u003c/code\u003e as a base filename to append extensions to, so\nwe'd create \u003ccode\u003e-.c\u003c/code\u003e and \u003ccode\u003e-.h\u003c/code\u003e for C, but creating filenames that start with\n\u003ccode\u003e-\u003c/code\u003e seems unhelpful.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eGeneric code generation changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVariable localisation was failing to check the expression on the RHS of an\ninteger test for uses of a variable, so could incorrectly localise an\ninteger variable whose value should have persisted between calls to a\nfunction.  This bug won't realistically manifest in real world Snowball\ncode.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOptimisations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eInline some routines which are only used once.  This is done for routines\nconsisting of a single non-compound command (or cases such as \u003ccode\u003enot \u0026lt;boolean\u0026gt;\u003c/code\u003e and \u003ccode\u003egoto \u0026lt;grouping\u0026gt;\u003c/code\u003e which we internally synthesise a\nnon-compound command for).  Localisation of variables happens after\ninlining, so variables can now be localised in more cases.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003etest next\u003c/code\u003e and \u003ccode\u003enot next\u003c/code\u003e are both now simplified to a comparison between\n\u003ccode\u003ecursor\u003c/code\u003e and \u003ccode\u003elimit\u003c/code\u003e (like \u003ccode\u003enot atlimit\u003c/code\u003e and \u003ccode\u003eatlimit\u003c/code\u003e).  We already\nnormalise \u003ccode\u003ehop 1\u003c/code\u003e to \u003ccode\u003enext\u003c/code\u003e, so \u003ccode\u003etest hop 1\u003c/code\u003e and \u003ccode\u003enot hop 1\u003c/code\u003e are also\nsimplified in this way.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSimplify \u003ccode\u003enot\u003c/code\u003e applied to an integer test by removing the \u003ccode\u003enot\u003c/code\u003e and\nflipping the sense of the test (e.g. \u003ccode\u003enot $(x \u0026gt; y)\u003c/code\u003e becomes \u003ccode\u003e$(x \u0026lt;= y)\u003c/code\u003e)\nwhich results in simpler generated code.  More usefully in real world code,\nthis also results in simpler generated code for \u003ccode\u003enot atlimit\u003c/code\u003e (since\n\u003ccode\u003eatlimit\u003c/code\u003e is converted \u003ccode\u003e$(cursor \u0026gt;= limit)\u003c/code\u003e or \u003ccode\u003e$(cursor \u0026lt;= limit)\u003c/code\u003e\n(depending on the current direction).\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/cd195b51e948a902a4312f023f4a14392516a543\"\u003e\u003ccode\u003ecd195b5\u003c/code\u003e\u003c/a\u003e Update for 3.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/80d885c983019967339bbea003e0a8f724ba0f58\"\u003e\u003ccode\u003e80d885c\u003c/code\u003e\u003c/a\u003e NEWS: Update draft entry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/5346c74eaedfdd9495ccc8afd5d6957da9e95258\"\u003e\u003ccode\u003e5346c74\u003c/code\u003e\u003c/a\u003e C++: Compile runtime as C++\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/537f9702e635f8dad03441775aebe53565492ed7\"\u003e\u003ccode\u003e537f970\u003c/code\u003e\u003c/a\u003e python: Add classifier for 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/3aeb013c9ffd2f2df15c6ef9cc956a7f825e4fd2\"\u003e\u003ccode\u003e3aeb013\u003c/code\u003e\u003c/a\u003e python: Skip Natural Language :: Sesotho classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/91fa20b842db0f422ea02d26d59f518dbae72c63\"\u003e\u003ccode\u003e91fa20b\u003c/code\u003e\u003c/a\u003e NEWS: Update draft entry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/a04abeb4f95eed8757b5107694fa0424c7026a79\"\u003e\u003ccode\u003ea04abeb\u003c/code\u003e\u003c/a\u003e Don't use extern \u0026quot;C\u0026quot; for functions which can throw\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/49bb623cb9b0ca05267d939c2e2f56c10b63dc6c\"\u003e\u003ccode\u003e49bb623\u003c/code\u003e\u003c/a\u003e C++: Hook up properly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/7ab50ed5f4ed99f08d897100633345e488e07a05\"\u003e\u003ccode\u003e7ab50ed\u003c/code\u003e\u003c/a\u003e CI: Fix coverage job\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/snowballstem/snowball/commit/5f0a33cc278f0973f5c987fdcf8aa1d1afa6ba95\"\u003e\u003ccode\u003e5f0a33c\u003c/code\u003e\u003c/a\u003e NEWS: Add draft entry\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/snowballstem/snowball/compare/v3.0.1...v3.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `babel` from 2.17.0 to 2.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/releases\"\u003ebabel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.18.0\u003c/h2\u003e\n\u003cp\u003eHappy 2026! Like last year's release (ahem...), this one too is being made from FOSDEM 2026, in Brussels, Belgium. 🇧🇪\nWe'll aspire for a less glacial release cycle for 2.19. 😁\u003c/p\u003e\n\u003cp\u003ePlease see \u003ca href=\"https://github.com/python-babel/babel/blob/56c63caf50b18b152541b5dcafd51f645d867074/CHANGES.rst\"\u003eCHANGELOG.rst\u003c/a\u003e for the detailed change log.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-babel/babel/compare/v2.17.0...v2.18.0\"\u003ehttps://github.com/python-babel/babel/compare/v2.17.0...v2.18.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-babel/babel/blob/master/CHANGES.rst\"\u003ebabel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.18.0\u003c/h2\u003e\n\u003cp\u003eHappy 2026! This release is, coincidentally, also being made from FOSDEM.\u003c/p\u003e\n\u003cp\u003eWe will aspire for a slightly less glacial release cadence in this year;\nthere are interesting features in the pipeline.\u003c/p\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Core: Add `babel.core.get_cldr_version()` by @akx in :gh:`1242`\n* Core: Use CLDR 47 by @tomasr8 in :gh:`1210`\n* Core: Use canonical IANA zone names in zone_territories by @akx in :gh:`1220`\n* Messages: Improve extract performance via ignoring directories early during os.walk by @akx in :gh:`968`\n* Messages: Merge in per-format keywords and auto_comments by @akx in :gh:`1243`\n* Messages: Update keywords for extraction of dpgettext and dnpgettext by @mardiros in :gh:`1235`\n* Messages: Validate all plurals in Python format checker by @tomasr8 in :gh:`1188`\n* Time: Use standard library `timezone` instead of `FixedOffsetTimezone` by @akx in :gh:`1203`\n\u003cp\u003eBugfixes\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCore: Fix formatting for \u0026quot;Empty locale identifier\u0026quot; exception added in \u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1164\"\u003e#1164\u003c/a\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1184\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCore: Improve handling of no-inheritance-marker in timezone data by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1194\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCore: Make the number pattern regular expression more efficient by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1213\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMessages: Keep translator comments next to the translation function call by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1196\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eNumbers: Fix KeyError that occurred when formatting compact currencies of exactly one thousand in several locales  by \u003ca href=\"https://github.com/bartbroere\"\u003e\u003ccode\u003e@​bartbroere\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1246\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* Core: Avoid unnecessary uses of `map()` by @akx in :gh:`1180`\n* Messages: Have init-catalog create directories too by @akx in :gh:`1244`\n* Messages: Optimizations for read_po by @akx in :gh:`1200`\n* Messages: Use pathlib.Path() in catalog frontend; improve test coverage by @akx in :gh:`1204`\n\u003cp\u003eInfrastructure and documentation\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCI: Renovate CI \u0026amp; lint tools by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1228\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCI: Tighten up CI with Zizmor by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1230\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCI: make job permissions explicit by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1227\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Add SECURITY.md by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1229\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Remove u string prefix from docs by \u003ca href=\"https://github.com/verhovsky\"\u003e\u003ccode\u003e@​verhovsky\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1174\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Update dates.rst with current unicode.org tr35 link by \u003ca href=\"https://github.com/clach04\"\u003e\u003ccode\u003e@​clach04\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1189\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Add some PyPI classifiers by \u003ca href=\"https://github.com/tomasr8\"\u003e\u003ccode\u003e@​tomasr8\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1186\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Apply reformatting by hand and with Ruff by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1202\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGeneral: Test on and declare support for Python 3.14 by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in :gh:\u003ccode\u003e1233\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/56c63caf50b18b152541b5dcafd51f645d867074\"\u003e\u003ccode\u003e56c63ca\u003c/code\u003e\u003c/a\u003e Prepare for 2.18.0 (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1248\"\u003e#1248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/73015a1217b90398fe76dcdc3b6e110ce26eb6d3\"\u003e\u003ccode\u003e73015a1\u003c/code\u003e\u003c/a\u003e Add user-agent to CLDR downloader (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1247\"\u003e#1247\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/29bd3624463f9b8694d09a308f67f353373c76af\"\u003e\u003ccode\u003e29bd362\u003c/code\u003e\u003c/a\u003e Fix formatting compact currencies of exactly one thousand in several locales ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/851db43b2b175c6bdf69ae6977cd6ad642506046\"\u003e\u003ccode\u003e851db43\u003c/code\u003e\u003c/a\u003e Reuse InitCatalog's guts in UpdateCatalog (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1244\"\u003e#1244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/fd00e60adf7e0c74821a77ff2a8b564e9985fd8e\"\u003e\u003ccode\u003efd00e60\u003c/code\u003e\u003c/a\u003e Extract: Merge in per-format keywords and auto_comments (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1243\"\u003e#1243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/12a14b6b3f09b6f5c8c745791dd4928f1d58fda0\"\u003e\u003ccode\u003e12a14b6\u003c/code\u003e\u003c/a\u003e Add dpgettext and dnpgettext support (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1235\"\u003e#1235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/7110e6206fd5ddc66db9613935fea8b8c668b7d5\"\u003e\u003ccode\u003e7110e62\u003c/code\u003e\u003c/a\u003e Use canonical IANA zone names in zone_territories (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1220\"\u003e#1220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/e91c3467b0f3bdc4433eab6820819fe69784c2bf\"\u003e\u003ccode\u003ee91c346\u003c/code\u003e\u003c/a\u003e Improve extract performance via ignoring directories early during os.walk (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/968\"\u003e#968\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/0c4f37838c3cb34cf527dd9890c1b69e98db1354\"\u003e\u003ccode\u003e0c4f378\u003c/code\u003e\u003c/a\u003e Convert Unittest testcases with setup/teardown to fixtures (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1240\"\u003e#1240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-babel/babel/commit/218c96ee305aad95bccb6402af4b4be60ad17ab1\"\u003e\u003ccode\u003e218c96e\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003ebabel.core.get_cldr_version()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-babel/babel/issues/1242\"\u003e#1242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-babel/babel/compare/v2.17.0...v2.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `imagesize` from 1.4.1 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/5ab28d47b96d6a0738ec036034919a739b4d64da\"\u003e\u003ccode\u003e5ab28d4\u003c/code\u003e\u003c/a\u003e bump module version to 2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/63d6afb8e24b9f9d599f7a15fa50ebc7964ad7c7\"\u003e\u003ccode\u003e63d6afb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/shibukawa/imagesize_py/issues/82\"\u003e#82\u003c/a\u003e from shibukawa/codex/update-readme-and-setup-instructi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/294606629eaf3950290de90a4b1ab9aaed7c89c3\"\u003e\u003ccode\u003e2946066\u003c/code\u003e\u003c/a\u003e docs: clarify EXIF orientation formats in v2.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/53eff2e3ab713b81883003bbd4eca586cc592431\"\u003e\u003ccode\u003e53eff2e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/shibukawa/imagesize_py/issues/81\"\u003e#81\u003c/a\u003e from shibukawa/codex/refactor-code-to-reduce-duplication\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/ac14f2af0208f9d57780d86ff619a32f80b90109\"\u003e\u003ccode\u003eac14f2a\u003c/code\u003e\u003c/a\u003e Refactor duplicated JPEG segment parsing logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/48ab954c707642d06081c8b5eae53b61b410715a\"\u003e\u003ccode\u003e48ab954\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/shibukawa/imagesize_py/issues/80\"\u003e#80\u003c/a\u003e from shibukawa/codex/add-avif-exif-rotation-support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/5cada1084cc21621541216810ecaf4514ca0e60b\"\u003e\u003ccode\u003e5cada10\u003c/code\u003e\u003c/a\u003e Add AVIF EXIF rotation support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/232c6d5204e38d5a288114c098304cc2f8358f69\"\u003e\u003ccode\u003e232c6d5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/shibukawa/imagesize_py/issues/79\"\u003e#79\u003c/a\u003e from shibukawa/codex/add-heic/heif-support-and-rotation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/324c970eb6c8d5326a6e3e16216ed2d498358219\"\u003e\u003ccode\u003e324c970\u003c/code\u003e\u003c/a\u003e Add HEIC/HEIF size and rotation support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shibukawa/imagesize_py/commit/7b7bb5f720401332eba12e93ad2e31d1bbc01cd4\"\u003e\u003ccode\u003e7b7bb5f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/shibukawa/imagesize_py/issues/78\"\u003e#78\u003c/a\u003e from shibukawa/codex/add-pypi-link-and-python-version-...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/shibukawa/imagesize_py/compare/1.4.1...2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.32.5 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `roman-numerals` from 3.1.0 to 4.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/AA-Turner/roman-numerals/releases\"\u003eroman-numerals's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.1.0\u003c/h2\u003e\n\u003cp\u003eroman-numerals 4.1.0\u003c/p\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003cp\u003eroman-numerals 4.0.0\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/AA-Turner/roman-numerals/blob/master/CHANGES.rst\"\u003eroman-numerals's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.1.0 (released 17 Dec 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eRestore LICENCE.rst in the roman-numerals-py meta-package\u003c/li\u003e\n\u003cli\u003eAdd some debug assertions for unsafe blocks\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.0.0 (released 16 Dec 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eRename Python package to \u003ccode\u003eroman-numerals\u003c/code\u003e on PyPI.\u003c/li\u003e\n\u003cli\u003ePublish \u003ccode\u003eroman-numerals-py\u003c/code\u003e as a meta-package that depends\non \u003ccode\u003eroman-numerals\u003c/code\u003e and installs no modules.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eDeclare support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eIncrease the minimum supported Rust version (MSRV) to 1.81.0.\u003c/li\u003e\n\u003cli\u003eImplement the \u003ccode\u003ecore::error::Error\u003c/code\u003e trait for all error types.\u003c/li\u003e\n\u003cli\u003eImplement the \u003ccode\u003ecore::fmt\u003c/code\u003e traits in \u003ccode\u003eno-std\u003c/code\u003e mode.\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003eFrom\u0026lt;RomanNumeral\u0026gt;\u003c/code\u003e for most integer types.\u003c/li\u003e\n\u003cli\u003ePublish the \u003ccode\u003eroman-numerals-rs\u003c/code\u003e crate using \u003ccode\u003eTrusted Publishing \u0026lt;https://crates.io/docs/trusted-publishing\u0026gt;\u003c/code\u003e__\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/53c9c4eac63b91728fba3c26329163ee57654d21\"\u003e\u003ccode\u003e53c9c4e\u003c/code\u003e\u003c/a\u003e Release v4.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/a3793b83fab7064107ac56a482a6fa93bc9c5048\"\u003e\u003ccode\u003ea3793b8\u003c/code\u003e\u003c/a\u003e Add more SAFETY notes and debug assertions to unsafe blocks (\u003ca href=\"https://redirect.github.com/AA-Turner/roman-numerals/issues/106\"\u003e#106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/46d346e2d08b634856c79783e404616b65626ba7\"\u003e\u003ccode\u003e46d346e\u003c/code\u003e\u003c/a\u003e Adjust annotations in light of PEP 649\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/b8fae405d948415f7397ae4f64569c53cb623105\"\u003e\u003ccode\u003eb8fae40\u003c/code\u003e\u003c/a\u003e Adjust an example in the README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/a88464130711ad5e8d56e6ff747d17068ae17534\"\u003e\u003ccode\u003ea884641\u003c/code\u003e\u003c/a\u003e Restore LICENCE.rst in the roman-numerals-py meta-package\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/c3e1b6b4e6e02e5e19c26dc6f72bbb7b1060cca5\"\u003e\u003ccode\u003ec3e1b6b\u003c/code\u003e\u003c/a\u003e Release v4.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/c335cb63ed97e684a4e9453639bfc7e9f487bb41\"\u003e\u003ccode\u003ec335cb6\u003c/code\u003e\u003c/a\u003e Add publishing step for the \u003ccode\u003eroman-numerals-py\u003c/code\u003e meta-package (\u003ca href=\"https://redirect.github.com/AA-Turner/roman-numerals/issues/105\"\u003e#105\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/649f6e62e7bd24123d7dd489609ae47168aaeb1b\"\u003e\u003ccode\u003e649f6e6\u003c/code\u003e\u003c/a\u003e Add Trusted Publishing workflow for crates.io (\u003ca href=\"https://redirect.github.com/AA-Turner/roman-numerals/issues/104\"\u003e#104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/ffa4dd1b33eae62f1bd1d44549e10a528b8f1f58\"\u003e\u003ccode\u003effa4dd1\u003c/code\u003e\u003c/a\u003e rust: Refactor tests (\u003ca href=\"https://redirect.github.com/AA-Turner/roman-numerals/issues/103\"\u003e#103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AA-Turner/roman-numerals/commit/26b41561c1d9813104548777b5ed9622d7125b38\"\u003e\u003ccode\u003e26b4156\u003c/code\u003e\u003c/a\u003e Simplify ASCII detection closures (\u003ca href=\"https://redirect.github.com/AA-Turner/roman-numerals/issues/102\"\u003e#102\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/AA-Turner/roman-numerals/compare/v3.1.0...v4.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `packaging` from 25.0 to 26.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/releases\"\u003epackaging's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten by \u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) by \u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1168\"\u003epypa/packaging#1168\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1170\"\u003epypa/packaging#1170\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1171\"\u003epypa/packaging#1171\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: re-export ExceptionGroup for now by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1164\"\u003epypa/packaging#1164\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edocs: add errors section and fix missing details by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1159\"\u003epypa/packaging#1159\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(dev): document property-based test suite by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1167\"\u003epypa/packaging#1167\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in DirectUrl documentation by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1169\"\u003epypa/packaging#1169\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs(specifiers): add is_unsatisfiable() usage example by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1166\"\u003epypa/packaging#1166\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1158\"\u003epypa/packaging#1158\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1174\"\u003epypa/packaging#1174\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse native uv integration in rtd by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1175\"\u003epypa/packaging#1175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ryanking13\"\u003e\u003ccode\u003e@​ryanking13\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1160\"\u003epypa/packaging#1160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/eachimei\"\u003e\u003ccode\u003e@​eachimei\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1163\"\u003epypa/packaging#1163\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/packaging/compare/26.1...26.2\"\u003ehttps://github.com/pypa/packaging/compare/26.1...26.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e26.1\u003c/h2\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cdel\u003ePEP 783: add handling for Emscripten wheel tags by \u003ca href=\"https://github.com/hoodmane\"\u003e\u003ccode\u003e@​hoodmane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/804\"\u003epypa/packaging#804\u003c/a\u003e\u003c/del\u003e (old name used in implementation, will be fixed in next release)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag by \u003ca href=\"https://github.com/ngoldbaum\"\u003e\u003ccode\u003e@​ngoldbaum\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1099\"\u003epypa/packaging#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePEP 723: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package by \u003ca href=\"https://github.com/sirosen\"\u003e\u003ccode\u003e@​sirosen\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1065\"\u003epypa/packaging#1065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/944\"\u003epypa/packaging#944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1071\"\u003epypa/packaging#1071\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1119\"\u003epypa/packaging#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags by \u003ca href=\"https://github.com/sbidoul\"\u003e\u003ccode\u003e@​sbidoul\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1110\"\u003epypa/packaging#1110\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e by \u003ca href=\"https://github.com/frostming\"\u003e\u003ccode\u003e@​frostming\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1068\"\u003epypa/packaging#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1146\"\u003epypa/packaging#1146\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1078\"\u003epypa/packaging#1078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e by \u003ca href=\"https://github.com/r266-tech\"\u003e\u003ccode\u003e@​r266-tech\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1150\"\u003epypa/packaging#1150\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026lt;V.postN\u003c/code\u003e to match spec by \u003ca href=\"https://github.com/notatallshaw\"\u003e\u003ccode\u003e@​notatallshaw\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/packaging/pull/1140\"\u003epypa/packaging#1140\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/packaging/blob/main/CHANGELOG.rst\"\u003epackaging's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e26.2 - 2026-04-24\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nFixes:\n\u003cul\u003e\n\u003cli\u003eFix incorrect sysconfig var name for pyemscripten in (:pull:\u003ccode\u003e1160\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003eVersion\u003c/code\u003e, \u003ccode\u003eSpecifier\u003c/code\u003e, \u003ccode\u003eSpecifierSet\u003c/code\u003e, \u003ccode\u003eTag\u003c/code\u003e, \u003ccode\u003eMarker\u003c/code\u003e, and \u003ccode\u003eRequirement\u003c/code\u003e pickle-safe\u003cbr /\u003e\nand backward-compatible with pickles created in 25.0-26.1 (including references to the removed\u003cbr /\u003e\n\u003ccode\u003epackaging._structures\u003c/code\u003e module) (:pull:\u003ccode\u003e1163\u003c/code\u003e, :pull:\u003ccode\u003e1168\u003c/code\u003e, :pull:\u003ccode\u003e1170\u003c/code\u003e, :pull:\u003ccode\u003e1171\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRe-export \u003ccode\u003eExceptionGroup\u003c/code\u003e in metadata for now in (:pull:\u003ccode\u003e1164\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDocumentation:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd errors section and fix missing details in (:pull:\u003ccode\u003e1159\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDocument our property-based test suite in (:pull:\u003ccode\u003e1167\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix a \u003ccode\u003eDirectUrl\u003c/code\u003e typo in (:pull:\u003ccode\u003e1169\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd example of \u003ccode\u003eis_unsatisfiable\u003c/code\u003e in (:pull:\u003ccode\u003e1166\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnable the auditor persona on zizmor in (:pull:\u003ccode\u003e1158\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eTest new pickle guarantees in (:pull:\u003ccode\u003e1174\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eUse new native ReadTheDocs uv integration in (:pull:\u003ccode\u003e1175\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e26.1 - 2026-04-14\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePEP 783: add handling for Emscripten wheel tags in (:pull:\u003ccode\u003e804\u003c/code\u003e) (old name used in implementation, fixed in next release)\u003c/li\u003e\n\u003cli\u003ePEP 803: add handling for the \u003ccode\u003eabi3.abi3t\u003c/code\u003e free-threading tag in (:pull:\u003ccode\u003e1099\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePEP 735: add \u003ccode\u003epackaging.dependency_groups\u003c/code\u003e module, based on the \u003ccode\u003edependency-groups\u003c/code\u003e package in (:pull:\u003ccode\u003e1065\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.direct_url\u003c/code\u003e module in (:pull:\u003ccode\u003e944\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003epackaging.errors\u003c/code\u003e module in (:pull:\u003ccode\u003e1071\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eSpecifierSet.is_unsatisfiable\u003c/code\u003e using ranges (new internals that will be expanded in future versions) in (:pull:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecreate_compatible_tags_selector\u003c/code\u003e to select compatible tags in (:pull:\u003ccode\u003e1110\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003ekey\u003c/code\u003e argument to \u003ccode\u003eSpecifierSet.filter()\u003c/code\u003e in (:pull:\u003ccode\u003e1068\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e\u0026amp;\u003c/code\u003e and \u003ccode\u003e|\u003c/code\u003e for \u003ccode\u003eMarker\u003c/code\u003e's in (:pull:\u003ccode\u003e1146\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNormalize \u003ccode\u003eVersion.__replace__\u003c/code\u003e and add \u003ccode\u003eVersion.from_parts\u003c/code\u003e in (:pull:\u003ccode\u003e1078\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd an option to validate compressed tag set sort order in \u003ccode\u003eparse_wheel_filename\u003c/code\u003e in (:pull:\u003ccode\u003e1150\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBehavior adaptations:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eNarrow exclusion of pre-releases for \u003ccode\u003e\u0026lt;V.postN\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1140\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNarrow exclusion of post-releases for \u003ccode\u003e\u0026gt;V\u003c/code\u003e to match spec in (:pull:\u003ccode\u003e1141\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003eformat_full_version\u003c/code\u003e to \u003ccode\u003e_format_full_version\u003c/code\u003e to make it visibly private in (:pull:\u003ccode\u003e1125\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict local version to ASCII in (:pull:\u003ccode\u003e1102\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ePylock (PEP 751) updates:\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/84a87ee42483d7352f9502d78a9553da8859aa7a\"\u003e\u003ccode\u003e84a87ee\u003c/code\u003e\u003c/a\u003e Bump for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4a616b65bed23c8c6d58e6b0fc1a4434d4ff1f14\"\u003e\u003ccode\u003e4a616b6\u003c/code\u003e\u003c/a\u003e docs: a few more updates to prepare for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1176\"\u003e#1176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/9de6f44f1e82d4595edf3aad1c4f6f98c85935a0\"\u003e\u003ccode\u003e9de6f44\u003c/code\u003e\u003c/a\u003e ci: use native uv integration in rtd (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1175\"\u003e#1175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/bc76e14debd1a2799d1ca8f9d9c9823f35bfa466\"\u003e\u003ccode\u003ebc76e14\u003c/code\u003e\u003c/a\u003e chore: update changelog for 26.2 (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1161\"\u003e#1161\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/3f00091c08f0aa830e33ed7db00f16f11c8ac97f\"\u003e\u003ccode\u003e3f00091\u003c/code\u003e\u003c/a\u003e tests: add a pickle check (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1174\"\u003e#1174\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/48a8a069805291186522de3eff73ea80a8ca96ad\"\u003e\u003ccode\u003e48a8a06\u003c/code\u003e\u003c/a\u003e fix: make Requirements/Markers pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1171\"\u003e#1171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/823b44ed1f904084a77ae3adf0ef130af6365f84\"\u003e\u003ccode\u003e823b44e\u003c/code\u003e\u003c/a\u003e fix: make Tags pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1170\"\u003e#1170\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/4bed32d920ca7211dd65fdf0a1ee06376e9c4733\"\u003e\u003ccode\u003e4bed32d\u003c/code\u003e\u003c/a\u003e fix: make Specifier / SpecifierSet pickle-safe (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1168\"\u003e#1168\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/963118e37caae97bc8b72f72956c7fb4ca9857ec\"\u003e\u003ccode\u003e963118e\u003c/code\u003e\u003c/a\u003e fix: re-export ExceptionGroup for now (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1164\"\u003e#1164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/packaging/commit/66e34a80256c96dea11da143682950c84b8133bb\"\u003e\u003ccode\u003e66e34a8\u003c/code\u003e\u003c/a\u003e docs(specifiers): add is_unsatisfiable() usage example (\u003ca href=\"https://redirect.github.com/pypa/packaging/issues/1166\"\u003e#1166\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/packaging/compare/25.0...26.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.14.9 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/as...\n\n_Description has been truncated_","html_url":"https://github.com/sailfishos-mirror/sphinx/pull/249","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/sailfishos-mirror%2Fsphinx/issues/249","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/249/packages"}},{"old_version":"0.15.20","new_version":"0.15.21","update_type":"patch","path":null,"pr_created_at":"2026-07-14T15:03:23.000Z","version_change":"0.15.20 → 0.15.21","issue":{"uuid":"4884369875","node_id":"PR_kwDOQ6OR-M7xnBGL","number":47,"state":"open","title":"ci: bump the pip-all group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python","ai-contributed","ai-failed"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-14T15:03:23.000Z","updated_at":"2026-07-14T15:24:04.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"ci: bump","group_name":"pip-all","update_count":20,"packages":[{"name":"ultralytics","old_version":"8.4.89","new_version":"8.4.95","repository_url":"https://github.com/ultralytics/ultralytics"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.68.4","repository_url":"https://github.com/tqdm/tqdm"},{"name":"boto3","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/boto/boto3"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"boto3-stubs","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"botocore","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/boto/botocore"},{"name":"build","old_version":"1.5.0","new_version":"1.5.1","repository_url":"https://github.com/pypa/build"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"cuda-pathfinder","old_version":"1.5.5","new_version":"1.5.6","repository_url":"https://github.com/NVIDIA/cuda-python"},{"name":"filelock","old_version":"3.29.5","new_version":"3.29.7","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"grpcio","old_version":"1.82.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"librt","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/mypyc/librt"},{"name":"mypy-boto3-ec2","old_version":"1.43.39","new_version":"1.43.46","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"mypy-boto3-lambda","old_version":"1.43.37","new_version":"1.43.47","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"narwhals","old_version":"2.23.0","new_version":"2.24.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"s3transfer","old_version":"0.19.0","new_version":"0.19.1","repository_url":"https://github.com/boto/s3transfer"},{"name":"types-requests","old_version":"2.33.0.20260518","new_version":"2.33.0.20260712","repository_url":"https://github.com/python/typeshed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-all group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ultralytics](https://github.com/ultralytics/ultralytics) | `8.4.89` | `8.4.95` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.68.4` |\n| [boto3](https://github.com/boto/boto3) | `1.43.40` | `1.43.47` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.15.21` |\n| [boto3-stubs](https://github.com/youtype/mypy_boto3_builder) | `1.43.40` | `1.43.47` |\n| [botocore](https://github.com/boto/botocore) | `1.43.40` | `1.43.47` |\n| [build](https://github.com/pypa/build) | `1.5.0` | `1.5.1` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.1` |\n| [cuda-pathfinder](https://github.com/NVIDIA/cuda-python) | `1.5.5` | `1.5.6` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.5` | `3.29.7` |\n| [grpcio](https://github.com/grpc/grpc) | `1.82.0` | `1.82.1` |\n| [librt](https://github.com/mypyc/librt) | `0.12.0` | `0.13.0` |\n| [mypy-boto3-ec2](https://github.com/youtype/mypy_boto3_builder) | `1.43.39` | `1.43.46` |\n| [mypy-boto3-lambda](https://github.com/youtype/mypy_boto3_builder) | `1.43.37` | `1.43.47` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.23.0` | `2.24.0` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.19.0` | `0.19.1` |\n| [types-requests](https://github.com/python/typeshed) | `2.33.0.20260518` | `2.33.0.20260712` |\n\n\nUpdates `ultralytics` from 8.4.89 to 8.4.95\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ultralytics/ultralytics/releases\"\u003eultralytics's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.4.95 - Fix restricted loading of training checkpoints (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25154\"\u003e#25154\u003c/a\u003e)\u003c/h2\u003e\n\u003ch2\u003e🌟 Summary\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ev8.4.95 improves training reliability, RT-DETR detection limits, input compatibility, and dataset usability—headlined by safer checkpoint loading for Platform GPU jobs.\u003c/strong\u003e 🚀\u003c/p\u003e\n\u003ch2\u003e📊 Key Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e🔒 Fixed restricted training checkpoint loading\u003c/strong\u003e — Raw checkpoints produced by Platform GPU workers no longer include training-only loss objects or NumPy scalar metadata that can be rejected by secure \u003ccode\u003eweights_only=True\u003c/code\u003e loading.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🎯 Improved RT-DETR \u003ccode\u003emax_det\u003c/code\u003e support\u003c/strong\u003e — The detection limit is now correctly applied during native prediction, validation, and model exports, including CoreML and other deployment formats.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🖼️ Expanded NumPy input compatibility\u003c/strong\u003e — NumPy images with grayscale, gray-plus-alpha, BGR, or BGRA channels are now normalized to match the model’s expected channel count.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🔢 Fixed uint8 tensor preprocessing\u003c/strong\u003e — Integer image tensors are handled without invalid floating-point dtype operations, while existing floating-point normalization behavior is preserved.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📦 Reduced automatic COCO downloads\u003c/strong\u003e — COCO detection, segmentation, and pose datasets no longer download the optional 7 GB \u003ccode\u003etest2017.zip\u003c/code\u003e by default. Standard downloads are now approximately 20.2–20.3 GB instead of about 27 GB.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🧪 Made segmentation conversion deterministic\u003c/strong\u003e — Mask files are processed in sorted filename order, improving repeatability across runs.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📈 Corrected pose metric curve labels\u003c/strong\u003e — Removed duplicate box labels so pose metrics align correctly with dashboards such as Weights \u0026amp; Biases.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📝 Clarified prediction and embedding return types\u003c/strong\u003e — Documentation and type hints now accurately indicate that streaming returns an iterator, while non-streaming calls return lists.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🛠️ Simplified edge-case handling\u003c/strong\u003e — Empty segmentation inputs now return a valid zero box immediately.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📚 Updated examples and training documentation\u003c/strong\u003e — The \u003ccode\u003eObjectCounter\u003c/code\u003e example now uses its returned results object, and automatic dataset download behavior is described more precisely.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🎯 Purpose \u0026amp; Impact\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eMore dependable cloud training:\u003c/strong\u003e Platform GPU workers can save, resume, and load raw training checkpoints more reliably, reducing avoidable job failures. ✅\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMore predictable deployment:\u003c/strong\u003e RT-DETR exports and validation now respect \u003ccode\u003emax_det\u003c/code\u003e, helping control output size, latency, and downstream processing requirements.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFewer input-related errors:\u003c/strong\u003e Applications using NumPy arrays or \u003ccode\u003euint8\u003c/code\u003e tensors can handle a wider range of camera and image formats without manual channel conversion.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFaster, lighter dataset setup:\u003c/strong\u003e Most COCO users save roughly 7 GB of storage and download time because test images without public ground truth are excluded.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMore reproducible data preparation:\u003c/strong\u003e Deterministic mask ordering makes conversion results and debugging more consistent.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eClearer analytics:\u003c/strong\u003e Correct pose labels prevent mislabeled or missing metric panels in experiment tracking tools.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNo major model architecture change:\u003c/strong\u003e This release focuses on reliability, compatibility, export behavior, and documentation rather than introducing a new model family. YOLO26 remains the latest recommended Ultralytics model for general use. 🌟\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStop coco.yaml and coco-pose.yaml from downloading test2017.zip by default by \u003ca href=\"https://github.com/raimbekovm\"\u003e\u003ccode\u003e@​raimbekovm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25136\"\u003eultralytics/ultralytics#25136\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse ObjectCounter results in the usage example by \u003ca href=\"https://github.com/parthivdholaria\"\u003e\u003ccode\u003e@​parthivdholaria\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23417\"\u003eultralytics/ultralytics#23417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eProcess segmentation masks in deterministic order by \u003ca href=\"https://github.com/AlexRTer\"\u003e\u003ccode\u003e@​AlexRTer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24390\"\u003eultralytics/ultralytics#24390\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify empty segment handling in segment2box by \u003ca href=\"https://github.com/1548093028\"\u003e\u003ccode\u003e@​1548093028\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23770\"\u003eultralytics/ultralytics#23770\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize uint8 tensor sources without dtype errors by \u003ca href=\"https://github.com/jahsef\"\u003e\u003ccode\u003e@​jahsef\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23743\"\u003eultralytics/ultralytics#23743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify automatic dataset downloads in training docs by \u003ca href=\"https://github.com/vedantparnaik\"\u003e\u003ccode\u003e@​vedantparnaik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24155\"\u003eultralytics/ultralytics#24155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify streamed prediction return types by \u003ca href=\"https://github.com/thiliapr\"\u003e\u003ccode\u003e@​thiliapr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24391\"\u003eultralytics/ultralytics#24391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify streamed embedding return types by \u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24134\"\u003eultralytics/ultralytics#24134\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ePoseMetrics.curves\u003c/code\u003e returning duplicated box labels by \u003ca href=\"https://github.com/JESUSROYETH\"\u003e\u003ccode\u003e@​JESUSROYETH\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25148\"\u003eultralytics/ultralytics#25148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize NumPy channel count to the model in \u003ccode\u003eLoadPilAndNumpy\u003c/code\u003e by \u003ca href=\"https://github.com/JESUSROYETH\"\u003e\u003ccode\u003e@​JESUSROYETH\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25151\"\u003eultralytics/ultralytics#25151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(rtdetr): honor max_det in decoder exports and validation by \u003ca href=\"https://github.com/Hasnaathussain\"\u003e\u003ccode\u003e@​Hasnaathussain\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25153\"\u003eultralytics/ultralytics#25153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix restricted loading of training checkpoints by \u003ca href=\"https://github.com/glenn-jocher\"\u003e\u003ccode\u003e@​glenn-jocher\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25154\"\u003eultralytics/ultralytics#25154\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thiliapr\"\u003e\u003ccode\u003e@​thiliapr\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24391\"\u003eultralytics/ultralytics#24391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/parthivdholaria\"\u003e\u003ccode\u003e@​parthivdholaria\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23417\"\u003eultralytics/ultralytics#23417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jahsef\"\u003e\u003ccode\u003e@​jahsef\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23743\"\u003eultralytics/ultralytics#23743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vedantparnaik\"\u003e\u003ccode\u003e@​vedantparnaik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24155\"\u003eultralytics/ultralytics#24155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/1548093028\"\u003e\u003ccode\u003e@​1548093028\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23770\"\u003eultralytics/ultralytics#23770\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexRTer\"\u003e\u003ccode\u003e@​AlexRTer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24390\"\u003eultralytics/ultralytics#24390\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24134\"\u003eultralytics/ultralytics#24134\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/f5f5d43d0bd2e6dd03e5a073eb3bf9687c7c6e4a\"\u003e\u003ccode\u003ef5f5d43\u003c/code\u003e\u003c/a\u003e Fix restricted loading of training checkpoints (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25154\"\u003e#25154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/cdccf05c7c094d011078d933244b809ef6e970b9\"\u003e\u003ccode\u003ecdccf05\u003c/code\u003e\u003c/a\u003e fix(rtdetr): honor max_det in decoder exports and validation (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25153\"\u003e#25153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/bacd7ccc90148f365ac89547e3e5d0c9c8cf206a\"\u003e\u003ccode\u003ebacd7cc\u003c/code\u003e\u003c/a\u003e Normalize NumPy channel count to the model in \u003ccode\u003eLoadPilAndNumpy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25151\"\u003e#25151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/c1ad93990c48120454eb9b9290fd6ce4743c7072\"\u003e\u003ccode\u003ec1ad939\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ePoseMetrics.curves\u003c/code\u003e returning duplicated box labels (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25148\"\u003e#25148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5e31e316d729b4781be067792fec46929a86ced3\"\u003e\u003ccode\u003e5e31e31\u003c/code\u003e\u003c/a\u003e Clarify streamed embedding return types (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24134\"\u003e#24134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/4fbd0882c88c25430a7c4bc23f69b92b294787ab\"\u003e\u003ccode\u003e4fbd088\u003c/code\u003e\u003c/a\u003e Clarify streamed prediction return types (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24391\"\u003e#24391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5eb325fa86a00faa3261f0e1530d8161d22ada15\"\u003e\u003ccode\u003e5eb325f\u003c/code\u003e\u003c/a\u003e Clarify automatic dataset downloads in training docs (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24155\"\u003e#24155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/71ca45a7b5d1e21d3416ce7e646200af4af41c8f\"\u003e\u003ccode\u003e71ca45a\u003c/code\u003e\u003c/a\u003e Normalize uint8 tensor sources without dtype errors (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/23743\"\u003e#23743\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/6754b6ecd5f3aa2d435db3c0bd9b0b9d24501f49\"\u003e\u003ccode\u003e6754b6e\u003c/code\u003e\u003c/a\u003e Simplify empty segment handling in segment2box (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/23770\"\u003e#23770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5acbce655cb6981759c1847c0c95d1a9be18ecd8\"\u003e\u003ccode\u003e5acbce6\u003c/code\u003e\u003c/a\u003e Process segmentation masks in deterministic order (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24390\"\u003e#24390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ultralytics/ultralytics/compare/v8.4.89...v8.4.95\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tqdm` from 4.68.3 to 4.68.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tqdm/tqdm/releases\"\u003etqdm's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003etqdm v4.68.4 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003etrim to \u003ccode\u003encols\u003c/code\u003e even when \u003ccode\u003e'{bar}' not in bar_format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1717\"\u003e#1717\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1767\"\u003e#1767\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003etqdm.write\u003c/code\u003e when \u003ccode\u003estdout=None\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1768\"\u003e#1768\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/53d096e77c28005b4f9fe1e9d6274ae311bf87e7\"\u003e\u003ccode\u003e53d096e\u003c/code\u003e\u003c/a\u003e bump version, merge pull request \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1768\"\u003e#1768\u003c/a\u003e from its-Sohan/fix/write-stdout-none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/74ff9929dfec128972eb68f9ff27ae40fae6a21c\"\u003e\u003ccode\u003e74ff992\u003c/code\u003e\u003c/a\u003e fix: prevent tqdm.write from crashing when sys.stdout is none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/3757d0d13ec86d73a838b55fc35ef89bc42a3461\"\u003e\u003ccode\u003e3757d0d\u003c/code\u003e\u003c/a\u003e Merge pull requests \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1717\"\u003e#1717\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1767\"\u003e#1767\u003c/a\u003e (fixes \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/55156ce4bed3457956d0557558b9bfb1c2de8a33\"\u003e\u003ccode\u003e55156ce\u003c/code\u003e\u003c/a\u003e fix: apply disp_trim to all format_meter return paths (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tqdm/tqdm/compare/v4.68.3...v4.68.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/11b997885803acb3a479c94338dcacbcfc107c64\"\u003e\u003ccode\u003e11b9978\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.47'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2a7cd54ca2b92b57deab9127ad73f11a162e634c\"\u003e\u003ccode\u003e2a7cd54\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/16f140d9d3b18e9957525c3ec2aa2af883f815d6\"\u003e\u003ccode\u003e16f140d\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c7888d6ae67b712df9be3462eeacd2c74e9e0c44\"\u003e\u003ccode\u003ec7888d6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/7db70eaaa1f3e68da7a6f590373a13b905c42849\"\u003e\u003ccode\u003e7db70ea\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1479621e3e478cfaa89f3b3327702865f0370968\"\u003e\u003ccode\u003e1479621\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.46\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/54abdb4aba7b980bf2fafd0d4e1043491eb6e63d\"\u003e\u003ccode\u003e54abdb4\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/75de6377d0a23c3468bfd8fc1740000599d73691\"\u003e\u003ccode\u003e75de637\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d3449aa60a089a207491d34f4a6f158bac78de50\"\u003e\u003ccode\u003ed3449aa\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/497253d2edd8f134e3af77d12916b89acb0857ba\"\u003e\u003ccode\u003e497253d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.45\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.40...1.43.47\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch3\u003ePackaging changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer provide mypyc-accelerated wheels for macOS x86_64 [mypyc-wheels \u003ca href=\"https://redirect.github.com/python/mypy/issues/119\"\u003e#119\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/mypyc/mypy_mypyc-wheels/pull/119\"\u003emypyc/mypy_mypyc-wheels#119\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3-stubs` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/youtype/mypy_boto3_builder/releases\"\u003eboto3-stubs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.8.0 - Python 3.8 runtime is back\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e \u003ccode\u003einstall_requires\u003c/code\u003e section is calculated based on dependencies in use, so \u003ccode\u003etyping-extensions\u003c/code\u003e version is set properly\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Replaced \u003ccode\u003etyping\u003c/code\u003e imports with \u003ccode\u003ecollections.abc\u003c/code\u003e with a fallback to \u003ccode\u003etyping\u003c/code\u003e for Python \u0026lt;3.9\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Added aliases for \u003ccode\u003ebuiltins.list\u003c/code\u003e, \u003ccode\u003ebuiltins.set\u003c/code\u003e, \u003ccode\u003ebuiltins.dict\u003c/code\u003e, and \u003ccode\u003ebuiltins.type\u003c/code\u003e, so Python 3.8 runtime should work as expected again (reported by \u003ca href=\"https://github.com/YHallouard\"\u003e\u003ccode\u003e@​YHallouard\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/youtype/mypy_boto3_builder/issues/340\"\u003e#340\u003c/a\u003e and \u003ca href=\"https://github.com/Omri-Ben-Yair\"\u003e\u003ccode\u003e@​Omri-Ben-Yair\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/youtype/mypy_boto3_builder/issues/336\"\u003e#336\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Unions use the same type annotations as the rest of the structures due to proper fallbacks\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e Universal input/output shapes were not replaced properly in service subresources\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[docs]\u003c/code\u003e Simplified doc links rendering for services\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e Cleaned up unnecessary imports in \u003ccode\u003eclient.pyi\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[builder]\u003c/code\u003e Import records with fallback are always rendered\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/youtype/mypy_boto3_builder/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `botocore` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/d5dccf3a48f775e729a550d81b4fe97d483ce2d7\"\u003e\u003ccode\u003ed5dccf3\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.47'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c4c3d0390f16ab46a67a072f94848deb0ac5bdac\"\u003e\u003ccode\u003ec4c3d03\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e8a69b4d1a7500ed3d8b623939ad8f7fb7bd9b92\"\u003e\u003ccode\u003ee8a69b4\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eefc25b1761c84e1e7e3fa237750daa79d7afbc6\"\u003e\u003ccode\u003eeefc25b\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/4249fcd7341f5d0168b038ce9ab30f98b1232c4e\"\u003e\u003ccode\u003e4249fcd\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/dbc7a739c17fac3a6d01d0e7b7e11b9faae4b580\"\u003e\u003ccode\u003edbc7a73\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/089203a13a3117eabaf8ca1f963b9665564888bf\"\u003e\u003ccode\u003e089203a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.46\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/601925e542e1cd3fcf2a861cbc0d1c0dbfacd92e\"\u003e\u003ccode\u003e601925e\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7831fa13c52d69b9f1caf2a85b0ef20dffa66ddf\"\u003e\u003ccode\u003e7831fa1\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/af6622c7a0c7d583fae766f96809ab856ce91a85\"\u003e\u003ccode\u003eaf6622c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.40...1.43.47\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.5.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(cli): accept sdist tarball as srcdir argument by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1057\"\u003epypa/build#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: drop 3.9 branches for version_info checks by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1059\"\u003epypa/build#1059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: skip test_uv_install_strips_pythonpath with missing uv by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1063\"\u003epypa/build#1063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove myself from codeowners by \u003ca href=\"https://github.com/FFY00\"\u003e\u003ccode\u003e@​FFY00\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1066\"\u003epypa/build#1066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: safe_extractall to use pathlib.Path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1060\"\u003epypa/build#1060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: secure GitHub Actions workflows by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1068\"\u003epypa/build#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings forwarding in build_package and build_package_via_sdist by \u003ca href=\"https://github.com/terminalchai\"\u003e\u003ccode\u003e@​terminalchai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1058\"\u003epypa/build#1058\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump virtualenv from 20.17 to 20.36.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1076\"\u003epypa/build#1076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump wheel from 0.36.0 to 0.38.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1075\"\u003epypa/build#1075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump pip from 22.3 to 26.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1074\"\u003epypa/build#1074\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: enforce lazy imports with flake8-lazy by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1088\"\u003epypa/build#1088\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(deps): show wanted vs found in missing-deps error by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1082\"\u003epypa/build#1082\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: align action pin version comments by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1091\"\u003epypa/build#1091\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update isolated env example to use DefaultIsolatedEnv by \u003ca href=\"https://github.com/shenxianpeng\"\u003e\u003ccode\u003e@​shenxianpeng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1090\"\u003epypa/build#1090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: compact test_parse_args with a typed make_kwargs helper by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1092\"\u003epypa/build#1092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(typing): ban explicit Any across src and tests by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1093\"\u003epypa/build#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): warn on valueless config settings by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1081\"\u003epypa/build#1081\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): add --sdist-extract-dir to reuse compiler caches by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1085\"\u003epypa/build#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⚠️ feat(util): deprecate project_wheel_metadata by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1084\"\u003epypa/build#1084\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump pre-commit tags by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1095\"\u003epypa/build#1095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat: report resolved build dependency versions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1086\"\u003epypa/build#1086\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(env): control the isolated build environment location by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1083\"\u003epypa/build#1083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): machine-readable build report, and metadata from a wheel by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1080\"\u003epypa/build#1080\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): drain verbose subprocess output without a worker thread by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1098\"\u003epypa/build#1098\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(cli): minor cleanups in builder and CLI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1099\"\u003epypa/build#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): reject a file as --env-dir and drop a mutable default by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1100\"\u003epypa/build#1100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add classifier for 3.15 (testing on beta already) by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1104\"\u003epypa/build#1104\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add lockfiles to gitignore by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1101\"\u003epypa/build#1101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add check-dist by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1103\"\u003epypa/build#1103\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): surface debug paths when a backend build fails by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1087\"\u003epypa/build#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: shorten changelog entries to concise highlights by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1105\"\u003epypa/build#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): raise dependency floors to 3.10 minimums and drop pytest cap by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1107\"\u003epypa/build#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump mypy, restrict pytest 9.1.0 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1108\"\u003epypa/build#1108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(cli): fix CLI warnings being written to stdout instead of stderr by \u003ca href=\"https://github.com/ymyzk\"\u003e\u003ccode\u003e@​ymyzk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1111\"\u003epypa/build#1111\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump vulnerable dependency floors (virtualenv, wheel) by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1113\"\u003epypa/build#1113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: default --installer to pip in argparse by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1117\"\u003epypa/build#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: build correct dest path in Windows symlink support probe by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1118\"\u003epypa/build#1118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: derive dist-info directory from wheel contents, not filename by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1119\"\u003epypa/build#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use LF instead of os.linesep when writing pip/uv requirements files by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1120\"\u003epypa/build#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: decide color support per output stream, not solely from stdout by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1123\"\u003epypa/build#1123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: open the wheel only once in metadata_path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1126\"\u003epypa/build#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: minor robustness fixes from code review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1121\"\u003epypa/build#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: simplify code paths found in review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1124\"\u003epypa/build#1124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eperf: memoize check_dependency by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1122\"\u003epypa/build#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: isolate color tests from NO_COLOR and FORCE_COLOR by \u003ca href=\"https://github.com/Yearnzq\"\u003e\u003ccode\u003e@​Yearnzq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1128\"\u003epypa/build#1128\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.5.1 (2026-07-09)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache\nreuse across rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds\n\u003cul\u003e\n\u003cli\u003eby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the\n\u0026quot;Debug a failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrain verbose subprocess output inline instead of using a \u003ccode\u003eThreadPoolExecutor\u003c/code\u003e, which silently swallowed logging\nerrors - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1098\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eReject a file passed as \u003ccode\u003e--env-dir\u003c/code\u003e with a clear error instead of a raw \u003ccode\u003eFileExistsError\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e\n(:issue:\u003ccode\u003e1100\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eEmit CLI warnings to stderr instead of stdout, so they no longer corrupt \u003ccode\u003e--metadata\u003c/code\u003e JSON output on stdout - by\n:user:\u003ccode\u003eymyzk\u003c/code\u003e (:issue:\u003ccode\u003e1111\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix the Windows symlink support probe always returning \u003ccode\u003eFalse\u003c/code\u003e due to a stale object interpolated into the\ndestination path - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emetadata_path\u003c/code\u003e's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by\n:user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWrite pip/uv requirements and constraints files with \u003ccode\u003e\\n\u003c/code\u003e instead of \u003ccode\u003eos.linesep\u003c/code\u003e, avoiding doubled \u003ccode\u003e\\r\\r\\n\u003c/code\u003e\nline endings on Windows - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1120\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eBatch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable\ndefault build-system table between builders, keep the original error when isolated-environment setup fails early, and\nraise \u003ccode\u003eBuildException\u003c/code\u003e for an invalid wheel - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDecide color support independently for stdout and stderr instead of only checking \u003ccode\u003estdout.isatty()\u003c/code\u003e, so redirecting\none stream no longer disables or leaks ANSI colors on the other - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1123\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eDeprecations and Removals\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate :func:\u003ccode\u003ebuild.util.project_wheel_metadata\u003c/code\u003e; use \u003ccode\u003epython -m build --metadata\u003c/code\u003e instead - by\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/d08fcd723500a7d676867144e1e7a22b650aeb7d\"\u003e\u003ccode\u003ed08fcd7\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/135801c502a7b36e25628d7c3ea9042fe8afa138\"\u003e\u003ccode\u003e135801c\u003c/code\u003e\u003c/a\u003e test: isolate color tests from NO_COLOR and FORCE_COLOR (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/820d4e5638eda9aa744528ab6b9a0e4be98d7d41\"\u003e\u003ccode\u003e820d4e5\u003c/code\u003e\u003c/a\u003e perf: memoize check_dependency (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/6c03264d186ce7a6c9f1e1990408a3a215dc7610\"\u003e\u003ccode\u003e6c03264\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/43c337a6bf55cbf2737bf938f3968be46ebc48b7\"\u003e\u003ccode\u003e43c337a\u003c/code\u003e\u003c/a\u003e refactor: simplify code paths found in review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1124\"\u003e#1124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/260ae22ee29fbca9b452a1b44cf3aacd09bb9250\"\u003e\u003ccode\u003e260ae22\u003c/code\u003e\u003c/a\u003e fix: minor robustness fixes from code review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/100e86e5e4f99167416b1d98783fc095223e0b8f\"\u003e\u003ccode\u003e100e86e\u003c/code\u003e\u003c/a\u003e refactor: open the wheel only once in metadata_path (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1126\"\u003e#1126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/272db6ce3474299b763674550ba0075954177ed3\"\u003e\u003ccode\u003e272db6c\u003c/code\u003e\u003c/a\u003e fix: decide color support per output stream, not solely from stdout (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1123\"\u003e#1123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/bc4ca7c7cb2033d7fecbfe82f8b3d7df7376572f\"\u003e\u003ccode\u003ebc4ca7c\u003c/code\u003e\u003c/a\u003e fix: use LF instead of os.linesep when writing pip/uv requirements files (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1120\"\u003e#1120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/16d8143d9979fc5432b8b1effb1dc3f6048c7840\"\u003e\u003ccode\u003e16d8143\u003c/code\u003e\u003c/a\u003e fix: derive dist-info directory from wheel contents, not filename (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.5.0...1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.4.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/cc6840753f17f00dea4e339ce37507747217e916\"\u003e\u003ccode\u003ecc68407\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/772\"\u003e#772\u003c/a\u003e from jawah/fix-regression-fallback-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/152b923c87e212e11c9591ff0a29ff35df719c91\"\u003e\u003ccode\u003e152b923\u003c/code\u003e\u003c/a\u003e chore: release 3.4.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2bc26076a86704fc19bc2ae811615b169373dea6\"\u003e\u003ccode\u003e2bc2607\u003c/code\u003e\u003c/a\u003e fix: unicodedecodeerror in fallback path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/be252d70c9f45846f0e851cc4d1829328540c825\"\u003e\u003ccode\u003ebe252d7\u003c/code\u003e\u003c/a\u003e chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/71c7bdd25514e5631c17be397abb6a2974b26e5b\"\u003e\u003ccode\u003e71c7bdd\u003c/code\u003e\u003c/a\u003e chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/768\"\u003e#768\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aeea391cc95761f1353b3914afcdee7a6e7589da\"\u003e\u003ccode\u003eaeea391\u003c/code\u003e\u003c/a\u003e chore(deps): bump pypa/cibuildwheel from 3.4.1 to 4.1.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/758\"\u003e#758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a6f8febd210c129ea741e6562fc06ee1ac437487\"\u003e\u003ccode\u003ea6f8feb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/770\"\u003e#770\u003c/a\u003e from jawah/unblock-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/528e16ce9105d10ea6cc66d41f237ba3c64c4392\"\u003e\u003ccode\u003e528e16c\u003c/code\u003e\u003c/a\u003e chore: add osv-scanner.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5993498b06d0bcb0cc1aaab1255742fef39a5aca\"\u003e\u003ccode\u003e5993498\u003c/code\u003e\u003c/a\u003e chore: ast_serialize musl missing prebuilt riscv,s390x,ppc64le\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aa2ddd8fb788b98a815f25c37609e919105d1dbb\"\u003e\u003ccode\u003eaa2ddd8\u003c/code\u003e\u003c/a\u003e Release 3.4.8 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.4.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: ...\n\n_Description has been truncated_","html_url":"https://github.com/rssrn/birdbird/pull/47","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/rssrn%2Fbirdbird/issues/47","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/47/packages"}},{"old_version":"0.15.20","new_version":"0.15.21","update_type":"patch","path":null,"pr_created_at":"2026-07-13T14:42:07.000Z","version_change":"0.15.20 → 0.15.21","issue":{"uuid":"4874721173","node_id":"PR_kwDOK8S49c7xHoEK","number":100,"state":"open","title":":arrow_up: Bump the all group with 8 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-13T14:42:07.000Z","updated_at":"2026-07-13T14:45:23.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":":arrow_up: Bump","group_name":"all","update_count":8,"packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"build","old_version":"1.5.0","new_version":"1.5.1","repository_url":"https://github.com/pypa/build"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.5","new_version":"3.29.7","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"librt","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/mypyc/librt"}],"path":null,"ecosystem":"pip"},"body":"Bumps the all group with 8 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.15.21` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [build](https://github.com/pypa/build) | `1.5.0` | `1.5.1` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.5` | `3.29.7` |\n| [librt](https://github.com/mypyc/librt) | `0.12.0` | `0.13.0` |\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003efor\u003c/code\u003e loop over list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21686\"\u003e21686\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix memory safety of \u003ccode\u003elist.count\u003c/code\u003e on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21680\"\u003e21680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003evec\u003c/code\u003e creation from list memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21681\"\u003e21681\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.5.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(cli): accept sdist tarball as srcdir argument by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1057\"\u003epypa/build#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: drop 3.9 branches for version_info checks by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1059\"\u003epypa/build#1059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: skip test_uv_install_strips_pythonpath with missing uv by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1063\"\u003epypa/build#1063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove myself from codeowners by \u003ca href=\"https://github.com/FFY00\"\u003e\u003ccode\u003e@​FFY00\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1066\"\u003epypa/build#1066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: safe_extractall to use pathlib.Path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1060\"\u003epypa/build#1060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: secure GitHub Actions workflows by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1068\"\u003epypa/build#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings forwarding in build_package and build_package_via_sdist by \u003ca href=\"https://github.com/terminalchai\"\u003e\u003ccode\u003e@​terminalchai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1058\"\u003epypa/build#1058\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump virtualenv from 20.17 to 20.36.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1076\"\u003epypa/build#1076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump wheel from 0.36.0 to 0.38.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1075\"\u003epypa/build#1075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump pip from 22.3 to 26.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1074\"\u003epypa/build#1074\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: enforce lazy imports with flake8-lazy by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1088\"\u003epypa/build#1088\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(deps): show wanted vs found in missing-deps error by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1082\"\u003epypa/build#1082\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: align action pin version comments by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1091\"\u003epypa/build#1091\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update isolated env example to use DefaultIsolatedEnv by \u003ca href=\"https://github.com/shenxianpeng\"\u003e\u003ccode\u003e@​shenxianpeng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1090\"\u003epypa/build#1090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: compact test_parse_args with a typed make_kwargs helper by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1092\"\u003epypa/build#1092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(typing): ban explicit Any across src and tests by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1093\"\u003epypa/build#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): warn on valueless config settings by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1081\"\u003epypa/build#1081\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): add --sdist-extract-dir to reuse compiler caches by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1085\"\u003epypa/build#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⚠️ feat(util): deprecate project_wheel_metadata by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1084\"\u003epypa/build#1084\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump pre-commit tags by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1095\"\u003epypa/build#1095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat: report resolved build dependency versions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1086\"\u003epypa/build#1086\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(env): control the isolated build environment location by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1083\"\u003epypa/build#1083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): machine-readable build report, and metadata from a wheel by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1080\"\u003epypa/build#1080\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): drain verbose subprocess output without a worker thread by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1098\"\u003epypa/build#1098\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(cli): minor cleanups in builder and CLI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1099\"\u003epypa/build#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): reject a file as --env-dir and drop a mutable default by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1100\"\u003epypa/build#1100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add classifier for 3.15 (testing on beta already) by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1104\"\u003epypa/build#1104\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add lockfiles to gitignore by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1101\"\u003epypa/build#1101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add check-dist by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1103\"\u003epypa/build#1103\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): surface debug paths when a backend build fails by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1087\"\u003epypa/build#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: shorten changelog entries to concise highlights by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1105\"\u003epypa/build#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): raise dependency floors to 3.10 minimums and drop pytest cap by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1107\"\u003epypa/build#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump mypy, restrict pytest 9.1.0 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1108\"\u003epypa/build#1108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(cli): fix CLI warnings being written to stdout instead of stderr by \u003ca href=\"https://github.com/ymyzk\"\u003e\u003ccode\u003e@​ymyzk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1111\"\u003epypa/build#1111\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump vulnerable dependency floors (virtualenv, wheel) by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1113\"\u003epypa/build#1113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: default --installer to pip in argparse by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1117\"\u003epypa/build#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: build correct dest path in Windows symlink support probe by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1118\"\u003epypa/build#1118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: derive dist-info directory from wheel contents, not filename by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1119\"\u003epypa/build#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use LF instead of os.linesep when writing pip/uv requirements files by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1120\"\u003epypa/build#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: decide color support per output stream, not solely from stdout by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1123\"\u003epypa/build#1123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: open the wheel only once in metadata_path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1126\"\u003epypa/build#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: minor robustness fixes from code review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1121\"\u003epypa/build#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: simplify code paths found in review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1124\"\u003epypa/build#1124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eperf: memoize check_dependency by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1122\"\u003epypa/build#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: isolate color tests from NO_COLOR and FORCE_COLOR by \u003ca href=\"https://github.com/Yearnzq\"\u003e\u003ccode\u003e@​Yearnzq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1128\"\u003epypa/build#1128\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.5.1 (2026-07-09)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache reuse\nacross rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds -\nby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the \u0026quot;Debug\na failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrain verbose subprocess output inline instead of using a \u003ccode\u003eThreadPoolExecutor\u003c/code\u003e, which silently swallowed logging\nerrors - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1098\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eReject a file passed as \u003ccode\u003e--env-dir\u003c/code\u003e with a clear error instead of a raw \u003ccode\u003eFileExistsError\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1100\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eEmit CLI warnings to stderr instead of stdout, so they no longer corrupt \u003ccode\u003e--metadata\u003c/code\u003e JSON output on stdout - by\n:user:\u003ccode\u003eymyzk\u003c/code\u003e (:issue:\u003ccode\u003e1111\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix the Windows symlink support probe always returning \u003ccode\u003eFalse\u003c/code\u003e due to a stale object interpolated into the destination\npath - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emetadata_path\u003c/code\u003e's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by\n:user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWrite pip/uv requirements and constraints files with \u003ccode\u003e\\n\u003c/code\u003e instead of \u003ccode\u003eos.linesep\u003c/code\u003e, avoiding doubled \u003ccode\u003e\\r\\r\\n\u003c/code\u003e line\nendings on Windows - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1120\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eBatch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable\ndefault build-system table between builders, keep the original error when isolated-environment setup fails early, and\nraise \u003ccode\u003eBuildException\u003c/code\u003e for an invalid wheel - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDecide color support independently for stdout and stderr instead of only checking \u003ccode\u003estdout.isatty()\u003c/code\u003e, so redirecting\none stream no longer disables or leaks ANSI colors on the other - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1123\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eDeprecations and Removals\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate :func:\u003ccode\u003ebuild.util.project_wheel_metadata\u003c/code\u003e; use \u003ccode\u003epython -m build --metadata\u003c/code\u003e instead - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e557\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWarn on config settings without a value (e.g. \u003ccode\u003e-C--my-flag\u003c/code\u003e); use \u003ccode\u003e-C--my-flag=\u003c/code\u003e instead for compatibility with pip\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/d08fcd723500a7d676867144e1e7a22b650aeb7d\"\u003e\u003ccode\u003ed08fcd7\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/135801c502a7b36e25628d7c3ea9042fe8afa138\"\u003e\u003ccode\u003e135801c\u003c/code\u003e\u003c/a\u003e test: isolate color tests from NO_COLOR and FORCE_COLOR (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/820d4e5638eda9aa744528ab6b9a0e4be98d7d41\"\u003e\u003ccode\u003e820d4e5\u003c/code\u003e\u003c/a\u003e perf: memoize check_dependency (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/6c03264d186ce7a6c9f1e1990408a3a215dc7610\"\u003e\u003ccode\u003e6c03264\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/43c337a6bf55cbf2737bf938f3968be46ebc48b7\"\u003e\u003ccode\u003e43c337a\u003c/code\u003e\u003c/a\u003e refactor: simplify code paths found in review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1124\"\u003e#1124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/260ae22ee29fbca9b452a1b44cf3aacd09bb9250\"\u003e\u003ccode\u003e260ae22\u003c/code\u003e\u003c/a\u003e fix: minor robustness fixes from code review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/100e86e5e4f99167416b1d98783fc095223e0b8f\"\u003e\u003ccode\u003e100e86e\u003c/code\u003e\u003c/a\u003e refactor: open the wheel only once in metadata_path (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1126\"\u003e#1126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/272db6ce3474299b763674550ba0075954177ed3\"\u003e\u003ccode\u003e272db6c\u003c/code\u003e\u003c/a\u003e fix: decide color support per output stream, not solely from stdout (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1123\"\u003e#1123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/bc4ca7c7cb2033d7fecbfe82f8b3d7df7376572f\"\u003e\u003ccode\u003ebc4ca7c\u003c/code\u003e\u003c/a\u003e fix: use LF instead of os.linesep when writing pip/uv requirements files (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1120\"\u003e#1120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/16d8143d9979fc5432b8b1effb1dc3f6048c7840\"\u003e\u003ccode\u003e16d8143\u003c/code\u003e\u003c/a\u003e fix: derive dist-info directory from wheel contents, not filename (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.5.0...1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.4.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/cc6840753f17f00dea4e339ce37507747217e916\"\u003e\u003ccode\u003ecc68407\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/772\"\u003e#772\u003c/a\u003e from jawah/fix-regression-fallback-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/152b923c87e212e11c9591ff0a29ff35df719c91\"\u003e\u003ccode\u003e152b923\u003c/code\u003e\u003c/a\u003e chore: release 3.4.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2bc26076a86704fc19bc2ae811615b169373dea6\"\u003e\u003ccode\u003e2bc2607\u003c/code\u003e\u003c/a\u003e fix: unicodedecodeerror in fallback path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/be252d70c9f45846f0e851cc4d1829328540c825\"\u003e\u003ccode\u003ebe252d7\u003c/code\u003e\u003c/a\u003e chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/71c7bdd25514e5631c17be397abb6a2974b26e5b\"\u003e\u003ccode\u003e71c7bdd\u003c/code\u003e\u003c/a\u003e chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/768\"\u003e#768\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aeea391cc95761f1353b3914afcdee7a6e7589da\"\u003e\u003ccode\u003eaeea391\u003c/code\u003e\u003c/a\u003e chore(deps): bump pypa/cibuildwheel from 3.4.1 to 4.1.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/758\"\u003e#758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a6f8febd210c129ea741e6562fc06ee1ac437487\"\u003e\u003ccode\u003ea6f8feb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/770\"\u003e#770\u003c/a\u003e from jawah/unblock-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/528e16ce9105d10ea6cc66d41f237ba3c64c4392\"\u003e\u003ccode\u003e528e16c\u003c/code\u003e\u003c/a\u003e chore: add osv-scanner.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5993498b06d0bcb0cc1aaab1255742fef39a5aca\"\u003e\u003ccode\u003e5993498\u003c/code\u003e\u003c/a\u003e chore: ast_serialize musl missing prebuilt riscv,s390x,ppc64le\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aa2ddd8fb788b98a815f25c37609e919105d1dbb\"\u003e\u003ccode\u003eaa2ddd8\u003c/code\u003e\u003c/a\u003e Release 3.4.8 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.4.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/182b010b63a2661c86df1ca3b3f84ce8511ee435\"\u003e\u003ccode\u003e182b010\u003c/code\u003e\u003c/a\u003e perf: resolve sysmon branch events lazily, one pair at a time (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2221\"\u003e#2221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ee271ee21fdf4c169648ff4ad3e9dd9d163e5e7f\"\u003e\u003ccode\u003eee271ee\u003c/code\u003e\u003c/a\u003e perf: compute multiline maps cheaply in the sysmon core (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2220\"\u003e#2220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1441b960c698d591d3a22a2190635039320459de\"\u003e\u003ccode\u003e1441b96\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 6 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2225\"\u003e#2225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/dd806350de678c9e4f137ffdda5cb131d269019c\"\u003e\u003ccode\u003edd80635\u003c/code\u003e\u003c/a\u003e fix: escape context labels in html report inline script block (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2224\"\u003e#2224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/7c3ae71ca654a0b0e3184d8574aefd9dd511a006\"\u003e\u003ccode\u003e7c3ae71\u003c/code\u003e\u003c/a\u003e docs: normalize earlier history order (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2222\"\u003e#2222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/088dc601697077364c46967f3ac9afe3bde0083b\"\u003e\u003ccode\u003e088dc60\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f7e15a8e31bd98d8f89a7e4602fa6b8bd7c5e468\"\u003e\u003ccode\u003ef7e15a8\u003c/code\u003e\u003c/a\u003e test: upload .json and .xml coverage reports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/3b6211214d7033e86b88a6e032474c20b7c32814\"\u003e\u003ccode\u003e3b62112\u003c/code\u003e\u003c/a\u003e docs: thanks, Paul Kehrer\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.0...7.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.29.5 to 3.29.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.29.7\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003easyncio: detect cross-instance reentrant deadlocks before the poll loop by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/586\"\u003etox-dev/filelock#586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft_rw): evict non-regular write marker without reading it by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/588\"\u003etox-dev/filelock#588\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e_util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/589\"\u003etox-dev/filelock#589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.6...3.29.7\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.6...3.29.7\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eserialise singleton construction in FileLockMeta by \u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/581\"\u003etox-dev/filelock#581\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e_util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/582\"\u003etox-dev/filelock#582\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: silence fork DeprecationWarning on 3.15 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/585\"\u003etox-dev/filelock#585\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.5...3.29.6\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.5...3.29.6\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1efb8932c08789deb08ad93a91d8996cc36bb9cc\"\u003e\u003ccode\u003e1efb893\u003c/code\u003e\u003c/a\u003e _util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/3547d58a293651fcf6cf8544b0002e6d7b357332\"\u003e\u003ccode\u003e3547d58\u003c/code\u003e\u003c/a\u003e soft_rw: evict a non-regular write marker without reading it (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/616400e382cdc9cc8c95823014e4d2d61a70095c\"\u003e\u003ccode\u003e616400e\u003c/code\u003e\u003c/a\u003e asyncio: detect cross-instance reentrant deadlocks before the poll loop (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/586\"\u003e#586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f8b0e9341cba0cc12eacf50605f290123f33ca32\"\u003e\u003ccode\u003ef8b0e93\u003c/code\u003e\u003c/a\u003e test: silence fork DeprecationWarning on 3.15 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/585\"\u003e#585\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b68be65b941836dce63cba2cf844dc55935ca8ba\"\u003e\u003ccode\u003eb68be65\u003c/code\u003e\u003c/a\u003e _util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/a833dd961e4a1ee569e42c10ca305cd088e14c1b\"\u003e\u003ccode\u003ea833dd9\u003c/code\u003e\u003c/a\u003e serialise singleton construction in FileLockMeta (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/581\"\u003e#581\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/bb2f884c275491222f620b8306d9b9bbc4f406bf\"\u003e\u003ccode\u003ebb2f884\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/da9c3ed54fec55dede6b308319587ec2242f709a\"\u003e\u003ccode\u003eda9c3ed\u003c/code\u003e\u003c/a\u003e :moneybag: Surface GitHub Sponsors + thanks.dev\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.5...3.29.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `librt` from 0.12.0 to 0.13.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/05a6a214c72932b113efc2012a7e9e6b54fd0ff8\"\u003e\u003ccode\u003e05a6a21\u003c/code\u003e\u003c/a\u003e Sync mypy and bump version to 0.13.0\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mypyc/librt/compare/v0.12.0...v0.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/dribia/poetry-git-branch-plugin/pull/100","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/dribia%2Fpoetry-git-branch-plugin/issues/100","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/100/packages"}},{"old_version":"0.15.20","new_version":"0.15.21","update_type":"patch","path":"/stacks/python","pr_created_at":"2026-07-12T17:59:31.000Z","version_change":"0.15.20 → 0.15.21","issue":{"uuid":"4868139614","node_id":"PR_kwDOTWWkL87wynnI","number":5,"state":"open","title":"deps: bump the python-dev group in /stacks/python with 2 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-12T17:59:31.000Z","updated_at":"2026-07-12T17:59:31.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps: bump","group_name":"python-dev","update_count":2,"packages":[{"name":"mypy","old_version":"2.1.0","new_version":"2.2.0","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":"/stacks/python","ecosystem":"pip"},"body":"Bumps the python-dev group in /stacks/python with 2 updates: [mypy](https://github.com/python/mypy) and [ruff](https://github.com/astral-sh/ruff).\n\nUpdates `mypy` from 2.1.0 to 2.2.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.2\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.2.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eSupport for Closed TypedDicts (PEP 728)\u003c/h3\u003e\n\u003cp\u003eMypy now supports closed TypedDicts as specified in PEP 728. A closed TypedDict cannot have extra\nkeys beyond those explicitly defined. This allows the type checker to determine that certain\noperations are safe when they otherwise wouldn't be due to the potential presence of unknown keys.\u003c/p\u003e\n\u003cp\u003eYou can use the \u003ccode\u003eclosed\u003c/code\u003e keyword argument with \u003ccode\u003eTypedDict\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eHasName = TypedDict(\u0026quot;HasName\u0026quot;, {\u0026quot;name\u0026quot;: str})\nHasOnlyName = TypedDict(\u0026quot;HasOnlyName\u0026quot;, {\u0026quot;name\u0026quot;: str}, closed=True)\nMovie = TypedDict(\u0026quot;Movie\u0026quot;, {\u0026quot;name\u0026quot;: str, \u0026quot;year\u0026quot;: int})\n\u003cp\u003emovie: Movie = {\u0026quot;name\u0026quot;: \u0026quot;Nimona\u0026quot;, \u0026quot;year\u0026quot;: 2023}\nhas_name: HasName = movie  # OK: HasName is open (default)\nhas_only_name: HasOnlyName = movie  # Error: HasOnlyName is closed and Movie has extra \u0026quot;year\u0026quot; key\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eClosed TypedDicts enable more precise type checking because the type checker knows exactly which\nkeys are present. This is particularly useful when working with TypedDict unions or when you want\nto ensure that a TypedDict conforms to an exact shape.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eclosed\u003c/code\u003e keyword also enables safe type narrowing with \u003ccode\u003ein\u003c/code\u003e checks:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eBook = TypedDict('Book', {'book': str}, closed=True)\nDVD = TypedDict('DVD', {'dvd': str}, closed=True)\ntype Inventory = Book | DVD\n\u003cp\u003edef print_type(inventory: Inventory) -\u0026gt; None:\nif \u0026quot;book\u0026quot; in inventory:\n# Type is narrowed to Book here - safe because DVD is closed\nprint(inventory[\u0026quot;book\u0026quot;])\nelse:\n# Type is narrowed to DVD here\nprint(inventory[\u0026quot;dvd\u0026quot;])\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b3c4a5b93adb49f979ab553fffebae7179cefa74\"\u003e\u003ccode\u003eb3c4a5b\u003c/code\u003e\u003c/a\u003e Mark release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/396f5082ac677a5115fbd6a0122328a6711f73dd\"\u003e\u003ccode\u003e396f508\u003c/code\u003e\u003c/a\u003e [Chore] Update changelog for 2.2 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21691\"\u003e#21691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/9592a9ea65a9502b14ac3094b28f9e0e3a2e500a\"\u003e\u003ccode\u003e9592a9e\u003c/code\u003e\u003c/a\u003e Upload wasm wheels to PyPI (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21671\"\u003e#21671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/1dc69620d9e827b015e6486114e0aaff7ec2d990\"\u003e\u003ccode\u003e1dc6962\u003c/code\u003e\u003c/a\u003e Bump ast-serialize to 0.6.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21664\"\u003e#21664\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/96a791310d47575827e44d10360505d8e23807b0\"\u003e\u003ccode\u003e96a7913\u003c/code\u003e\u003c/a\u003e Bump librt to 0.12.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21663\"\u003e#21663\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/5ef090270579013c337a9bcc79e2c58417f09538\"\u003e\u003ccode\u003e5ef0902\u003c/code\u003e\u003c/a\u003e Fix the exportjson tool (.ff cache to .json conversion) (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21628\"\u003e#21628\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8d621adb954731ba76b25bf7130275f3cadbb81a\"\u003e\u003ccode\u003e8d621ad\u003c/code\u003e\u003c/a\u003e Support --shadow-file with --native-parser (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21623\"\u003e#21623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/74ecdd8ecc9bee271eab49948436af63751ed1ff\"\u003e\u003ccode\u003e74ecdd8\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21612\"\u003e#21612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0cd154158ab2829a2f8c7a2728c7d4ed55e8f193\"\u003e\u003ccode\u003e0cd1541\u003c/code\u003e\u003c/a\u003e [mypyc] Make function wrappers thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21620\"\u003e#21620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/22a9cfd1595798810e27ef145ea4c989ccdcc883\"\u003e\u003ccode\u003e22a9cfd\u003c/code\u003e\u003c/a\u003e [mypyc] Make list remove and index thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21614\"\u003e#21614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/emigre459/ynab-mcp/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/emigre459%2Fynab-mcp/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}},{"old_version":"0.15.20","new_version":"0.15.21","update_type":"patch","path":null,"pr_created_at":"2026-07-12T17:59:31.000Z","version_change":"0.15.20 → 0.15.21","issue":{"uuid":"4868139610","node_id":"PR_kwDOTWWkL87wynnF","number":4,"state":"open","title":"deps: bump the python-dev group with 2 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-12T17:59:31.000Z","updated_at":"2026-07-12T17:59:31.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps: bump","group_name":"python-dev","update_count":2,"packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"2.1.0","new_version":"2.2.0","repository_url":"https://github.com/python/mypy"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dev group with 2 updates: [ruff](https://github.com/astral-sh/ruff) and [mypy](https://github.com/python/mypy).\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.2.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.2\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.2.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eSupport for Closed TypedDicts (PEP 728)\u003c/h3\u003e\n\u003cp\u003eMypy now supports closed TypedDicts as specified in PEP 728. A closed TypedDict cannot have extra\nkeys beyond those explicitly defined. This allows the type checker to determine that certain\noperations are safe when they otherwise wouldn't be due to the potential presence of unknown keys.\u003c/p\u003e\n\u003cp\u003eYou can use the \u003ccode\u003eclosed\u003c/code\u003e keyword argument with \u003ccode\u003eTypedDict\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eHasName = TypedDict(\u0026quot;HasName\u0026quot;, {\u0026quot;name\u0026quot;: str})\nHasOnlyName = TypedDict(\u0026quot;HasOnlyName\u0026quot;, {\u0026quot;name\u0026quot;: str}, closed=True)\nMovie = TypedDict(\u0026quot;Movie\u0026quot;, {\u0026quot;name\u0026quot;: str, \u0026quot;year\u0026quot;: int})\n\u003cp\u003emovie: Movie = {\u0026quot;name\u0026quot;: \u0026quot;Nimona\u0026quot;, \u0026quot;year\u0026quot;: 2023}\nhas_name: HasName = movie  # OK: HasName is open (default)\nhas_only_name: HasOnlyName = movie  # Error: HasOnlyName is closed and Movie has extra \u0026quot;year\u0026quot; key\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eClosed TypedDicts enable more precise type checking because the type checker knows exactly which\nkeys are present. This is particularly useful when working with TypedDict unions or when you want\nto ensure that a TypedDict conforms to an exact shape.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eclosed\u003c/code\u003e keyword also enables safe type narrowing with \u003ccode\u003ein\u003c/code\u003e checks:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eBook = TypedDict('Book', {'book': str}, closed=True)\nDVD = TypedDict('DVD', {'dvd': str}, closed=True)\ntype Inventory = Book | DVD\n\u003cp\u003edef print_type(inventory: Inventory) -\u0026gt; None:\nif \u0026quot;book\u0026quot; in inventory:\n# Type is narrowed to Book here - safe because DVD is closed\nprint(inventory[\u0026quot;book\u0026quot;])\nelse:\n# Type is narrowed to DVD here\nprint(inventory[\u0026quot;dvd\u0026quot;])\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b3c4a5b93adb49f979ab553fffebae7179cefa74\"\u003e\u003ccode\u003eb3c4a5b\u003c/code\u003e\u003c/a\u003e Mark release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/396f5082ac677a5115fbd6a0122328a6711f73dd\"\u003e\u003ccode\u003e396f508\u003c/code\u003e\u003c/a\u003e [Chore] Update changelog for 2.2 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21691\"\u003e#21691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/9592a9ea65a9502b14ac3094b28f9e0e3a2e500a\"\u003e\u003ccode\u003e9592a9e\u003c/code\u003e\u003c/a\u003e Upload wasm wheels to PyPI (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21671\"\u003e#21671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/1dc69620d9e827b015e6486114e0aaff7ec2d990\"\u003e\u003ccode\u003e1dc6962\u003c/code\u003e\u003c/a\u003e Bump ast-serialize to 0.6.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21664\"\u003e#21664\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/96a791310d47575827e44d10360505d8e23807b0\"\u003e\u003ccode\u003e96a7913\u003c/code\u003e\u003c/a\u003e Bump librt to 0.12.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21663\"\u003e#21663\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/5ef090270579013c337a9bcc79e2c58417f09538\"\u003e\u003ccode\u003e5ef0902\u003c/code\u003e\u003c/a\u003e Fix the exportjson tool (.ff cache to .json conversion) (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21628\"\u003e#21628\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8d621adb954731ba76b25bf7130275f3cadbb81a\"\u003e\u003ccode\u003e8d621ad\u003c/code\u003e\u003c/a\u003e Support --shadow-file with --native-parser (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21623\"\u003e#21623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/74ecdd8ecc9bee271eab49948436af63751ed1ff\"\u003e\u003ccode\u003e74ecdd8\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21612\"\u003e#21612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0cd154158ab2829a2f8c7a2728c7d4ed55e8f193\"\u003e\u003ccode\u003e0cd1541\u003c/code\u003e\u003c/a\u003e [mypyc] Make function wrappers thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21620\"\u003e#21620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/22a9cfd1595798810e27ef145ea4c989ccdcc883\"\u003e\u003ccode\u003e22a9cfd\u003c/code\u003e\u003c/a\u003e [mypyc] Make list remove and index thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21614\"\u003e#21614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/emigre459/ynab-mcp/pull/4","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/emigre459%2Fynab-mcp/issues/4","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4/packages"}},{"old_version":"\u003e=0.15.16","new_version":"\u003e=0.15.21","update_type":"patch","path":null,"pr_created_at":"2026-07-12T03:12:46.000Z","version_change":"\u003e=0.15.16 → \u003e=0.15.21","issue":{"uuid":"4865202159","node_id":"PR_kwDORWKw-c7wqqJ-","number":87,"state":"closed","title":"chore(deps-dev): update ruff requirement from \u003e=0.15.16 to \u003e=0.15.21","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-19T03:13:02.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-12T03:12:46.000Z","updated_at":"2026-07-19T03:13:04.000Z","time_to_close":604816,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps-dev): update","packages":[{"name":"ruff","old_version":"\u003e=0.15.16","new_version":"\u003e=0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [ruff](https://github.com/astral-sh/ruff) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.16...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/pantalytics/odoo-mcp-pro/pull/87","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/pantalytics%2Fodoo-mcp-pro/issues/87","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/87/packages"}},{"old_version":"0.15.20","new_version":"0.15.21","update_type":"patch","path":null,"pr_created_at":"2026-07-11T04:33:51.000Z","version_change":"0.15.20 → 0.15.21","issue":{"uuid":"4860552238","node_id":"PR_kwDON03-Qc7wcaX9","number":6,"state":"closed","title":"Bump the python-dependencies group across 1 directory with 4 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-18T04:33:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-11T04:33:51.000Z","updated_at":"2026-07-18T04:33:43.000Z","time_to_close":604790,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"python-dependencies","update_count":4,"packages":[{"name":"click","old_version":"8.4.0","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"pulumi","old_version":"3.250.0","new_version":"3.251.0","repository_url":"https://github.com/pulumi/pulumi"},{"name":"mypy","old_version":"2.1.0","new_version":"2.2.0","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 4 updates in the / directory: [click](https://github.com/pallets/click), [pulumi](https://github.com/pulumi/pulumi), [mypy](https://github.com/python/mypy) and [ruff](https://github.com/astral-sh/ruff).\n\nUpdates `click` from 8.4.0 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.1/\"\u003ehttps://pypi.org/project/click/8.4.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-1\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-1\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/32\"\u003ehttps://github.com/pallets/click/milestone/32\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type conversion again. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3458\"\u003e#3458\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3484\"\u003e#3484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3277\"\u003e#3277\u003c/a\u003e # 3466\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion result. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3015\"\u003e#3015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3487\"\u003e#3487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-06-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by {pr}\u003ccode\u003e3126\u003c/code\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. {issue}\u003ccode\u003e3502\u003c/code\u003e\n{issue}\u003ccode\u003e3043\u003c/code\u003e {pr}\u003ccode\u003e3504\u003c/code\u003e {pr}\u003ccode\u003e3508\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. {pr}\u003ccode\u003e3509\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n{issue}\u003ccode\u003e3059\u003c/code\u003e {pr}\u003ccode\u003e3507\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. {issue}\u003ccode\u003e3242\u003c/code\u003e {issue}\u003ccode\u003e2542\u003c/code\u003e {pr}\u003ccode\u003e3534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from {pr}\u003ccode\u003e3482\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e\n{pr}\u003ccode\u003e3533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. {pr}\u003ccode\u003e3578\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. {issue}\u003ccode\u003e2331\u003c/code\u003e {issue}\u003ccode\u003e1884\u003c/code\u003e {issue}\u003ccode\u003e3125\u003c/code\u003e {pr}\u003ccode\u003e3582\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.4.1\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-21\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type\nconversion again. {issue}\u003ccode\u003e3458\u003c/code\u003e {pr}\u003ccode\u003e3484\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. {issue}\u003ccode\u003e3277\u003c/code\u003e {pr}\u003ccode\u003e3466\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eEnum\u003c/code\u003e values used as \u003ccode\u003eChoice\u003c/code\u003e options produces a\nvalid completion result. {issue}\u003ccode\u003e3015\u003c/code\u003e {pr}\u003ccode\u003e3471\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. {issue}\u003ccode\u003e3487\u003c/code\u003e {pr}\u003ccode\u003e3493\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e {pr}\u003ccode\u003e3482\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eopen_url\u003c/code\u003e on Windows when the file path contains spaces.\n{issue}\u003ccode\u003e2994\u003c/code\u003e {pr}\u003ccode\u003e3478\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.4.0...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pulumi` from 3.250.0 to 3.251.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pulumi/pulumi/releases\"\u003epulumi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.251.0\u003c/h2\u003e\n\u003ch2\u003e3.251.0 (2026-07-08)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli] Show a \u003ccode\u003eretain\u003c/code\u003e marker for retain-on-delete resources in \u003ccode\u003e--diff\u003c/code\u003e output \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23754\"\u003e#23754\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli] Don't miscopy out archives \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23798\"\u003e#23798\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMiscellaneous\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli] Add \u003ccode\u003epulumi neo --debug-update\u003c/code\u003e and \u003ccode\u003epulumi neo --debug-preview\u003c/code\u003e flags to investigate a failed update or preview, suggested in the failure output \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23499\"\u003e#23499\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/convert] Add an \u003ccode\u003eecosystem\u003c/code\u003e field to converter mapping requests so a converter can request mappings for the ecosystem it consumes rather than its own name \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23804\"\u003e#23804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/deployment] \u003ccode\u003epulumi deployment settings\u003c/code\u003e no longer writes the local \u003ccode\u003ePulumi.\u0026lt;stack\u0026gt;.deploy.yaml\u003c/code\u003e file: the experimental \u003ccode\u003einit\u003c/code\u003e, \u003ccode\u003epull\u003c/code\u003e, \u003ccode\u003econfigure\u003c/code\u003e, and \u003ccode\u003eenv\u003c/code\u003e subcommands have been removed, and the CLI no longer calls the deployment-settings encrypt endpoint. \u003ccode\u003eget\u003c/code\u003e/\u003ccode\u003eedit\u003c/code\u003e/\u003ccode\u003edestroy\u003c/code\u003e continue to manage settings directly in Pulumi Cloud \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23480\"\u003e#23480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/deployment] The deployment settings file (\u003ccode\u003ePulumi.\u0026lt;stack\u0026gt;.deploy.yaml\u003c/code\u003e) has been removed entirely. The experimental \u003ccode\u003epulumi deployment settings push\u003c/code\u003e (\u003ccode\u003eupdate\u003c/code\u003e/\u003ccode\u003eup\u003c/code\u003e) command, the \u003ccode\u003e--config-file\u003c/code\u003e flag, and the SDK helpers that read the file have been removed. Manage deployment settings directly in Pulumi Cloud with \u003ccode\u003epulumi deployment settings get\u003c/code\u003e, \u003ccode\u003eedit\u003c/code\u003e, and \u003ccode\u003edestroy\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23480\"\u003e#23480\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/display] Prevent plugin debug logs from appearing as raw JSON in the CLI's output when logging with \u003ccode\u003e--logtostderr\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23633\"\u003e#23633\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/env] Report the new revision number when an environment definition is updated (e.g. \u003ccode\u003epulumi env edit\u003c/code\u003e, \u003ccode\u003epulumi env provider\u003c/code\u003e, \u003ccode\u003epulumi env version rollback\u003c/code\u003e) \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23799\"\u003e#23799\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMiscellaneous\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/env] Fold the Pulumi ESC engine and CLI into the pulumi/pulumi monorepo, removing the sdk↔esc Go module cycle. Internal refactor with no user-facing behavior change; \u003ccode\u003epulumi env\u003c/code\u003e/\u003ccode\u003epulumi esc\u003c/code\u003e are unaffected. \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23746\"\u003e#23746\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/import] Support importing resources under parameterized providers from a converter or import file \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23763\"\u003e#23763\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/import] Support importing resources under extension-parameterized providers \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23779\"\u003e#23779\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[engine] Add \u003ccode\u003eTargetSnippets\u003c/code\u003e to deployment options to target snippets by UUID. \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23745\"\u003e#23745\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[engine] Add OpenTelemetry spans to the StackReference read path so performance traces can pinpoint slow snapshot fetches, deserialization, or secret decryption \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23787\"\u003e#23787\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[programgen/pcl] Invoke functions declared with multi-argument inputs using positional arguments in PCL \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23571\"\u003e#23571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[sdk/nodejs] Don't include the version in module paths when serializing functions when using pnpm \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23767\"\u003e#23767\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pulumi/pulumi/blob/master/CHANGELOG.md\"\u003epulumi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.251.0 (2026-07-08)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli] Show a \u003ccode\u003eretain\u003c/code\u003e marker for retain-on-delete resources in \u003ccode\u003e--diff\u003c/code\u003e output \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23754\"\u003e#23754\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli] Don't miscopy out archives \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23798\"\u003e#23798\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMiscellaneous\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli] Add \u003ccode\u003epulumi neo --debug-update\u003c/code\u003e and \u003ccode\u003epulumi neo --debug-preview\u003c/code\u003e flags to investigate a failed update or preview, suggested in the failure output \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23499\"\u003e#23499\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/convert] Add an \u003ccode\u003eecosystem\u003c/code\u003e field to converter mapping requests so a converter can request mappings for the ecosystem it consumes rather than its own name \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23804\"\u003e#23804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/deployment] \u003ccode\u003epulumi deployment settings\u003c/code\u003e no longer writes the local \u003ccode\u003ePulumi.\u0026lt;stack\u0026gt;.deploy.yaml\u003c/code\u003e file: the experimental \u003ccode\u003einit\u003c/code\u003e, \u003ccode\u003epull\u003c/code\u003e, \u003ccode\u003econfigure\u003c/code\u003e, and \u003ccode\u003eenv\u003c/code\u003e subcommands have been removed, and the CLI no longer calls the deployment-settings encrypt endpoint. \u003ccode\u003eget\u003c/code\u003e/\u003ccode\u003eedit\u003c/code\u003e/\u003ccode\u003edestroy\u003c/code\u003e continue to manage settings directly in Pulumi Cloud \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23480\"\u003e#23480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/deployment] The deployment settings file (\u003ccode\u003ePulumi.\u0026lt;stack\u0026gt;.deploy.yaml\u003c/code\u003e) has been removed entirely. The experimental \u003ccode\u003epulumi deployment settings push\u003c/code\u003e (\u003ccode\u003eupdate\u003c/code\u003e/\u003ccode\u003eup\u003c/code\u003e) command, the \u003ccode\u003e--config-file\u003c/code\u003e flag, and the SDK helpers that read the file have been removed. Manage deployment settings directly in Pulumi Cloud with \u003ccode\u003epulumi deployment settings get\u003c/code\u003e, \u003ccode\u003eedit\u003c/code\u003e, and \u003ccode\u003edestroy\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23480\"\u003e#23480\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/display] Prevent plugin debug logs from appearing as raw JSON in the CLI's output when logging with \u003ccode\u003e--logtostderr\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23633\"\u003e#23633\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/env] Report the new revision number when an environment definition is updated (e.g. \u003ccode\u003epulumi env edit\u003c/code\u003e, \u003ccode\u003epulumi env provider\u003c/code\u003e, \u003ccode\u003epulumi env version rollback\u003c/code\u003e) \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23799\"\u003e#23799\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMiscellaneous\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/env] Fold the Pulumi ESC engine and CLI into the pulumi/pulumi monorepo, removing the sdk↔esc Go module cycle. Internal refactor with no user-facing behavior change; \u003ccode\u003epulumi env\u003c/code\u003e/\u003ccode\u003epulumi esc\u003c/code\u003e are unaffected. \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23746\"\u003e#23746\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[cli/import] Support importing resources under parameterized providers from a converter or import file \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23763\"\u003e#23763\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[cli/import] Support importing resources under extension-parameterized providers \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23779\"\u003e#23779\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[engine] Add \u003ccode\u003eTargetSnippets\u003c/code\u003e to deployment options to target snippets by UUID. \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23745\"\u003e#23745\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[engine] Add OpenTelemetry spans to the StackReference read path so performance traces can pinpoint slow snapshot fetches, deserialization, or secret decryption \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23787\"\u003e#23787\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[programgen/pcl] Invoke functions declared with multi-argument inputs using positional arguments in PCL \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23571\"\u003e#23571\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[sdk/nodejs] Don't include the version in module paths when serializing functions when using pnpm \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23767\"\u003e#23767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[sdk/nodejs] Support pnpm 11 \u003ca href=\"https://redirect.github.com/pulumi/pulumi/pull/23815\"\u003e#23815\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/aff0ffa2cc499d598c71d6de589592a132f042a5\"\u003e\u003ccode\u003eaff0ffa\u003c/code\u003e\u003c/a\u003e do: fix \u003ccode\u003e--dry-run\u003c/code\u003e for delete (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23809\"\u003e#23809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/c9a87908cd8cb920058b5d093e46e8fd0740be29\"\u003e\u003ccode\u003ec9a8790\u003c/code\u003e\u003c/a\u003e Add pulumi neo debug command (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23499\"\u003e#23499\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/4a79549ecd9cfe052a29082e1fe4082e27ba5b96\"\u003e\u003ccode\u003e4a79549\u003c/code\u003e\u003c/a\u003e Invoke multi-argument-input functions positionally in PCL (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23571\"\u003e#23571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/32121529201daacd45ca959e14bfd3186aa0aafe\"\u003e\u003ccode\u003e3212152\u003c/code\u003e\u003c/a\u003e do: make default input YAML (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23808\"\u003e#23808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/93ab9680c5b3e5c3857c1166a423aad3151131d1\"\u003e\u003ccode\u003e93ab968\u003c/code\u003e\u003c/a\u003e Add an ecosystem to converter mapping requests (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23804\"\u003e#23804\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/82c41645622c58ab7361e4fe393d0ee329f213e8\"\u003e\u003ccode\u003e82c4164\u003c/code\u003e\u003c/a\u003e do: align prompting with up/destroy (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23805\"\u003e#23805\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/3ec25324d40d47d63107a0347ba6d473adc71a0a\"\u003e\u003ccode\u003e3ec2532\u003c/code\u003e\u003c/a\u003e Update actions/download-artifact action to v8 (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23793\"\u003e#23793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/5e1b1d0903b6655a261465040bcd91e59f9375d5\"\u003e\u003ccode\u003e5e1b1d0\u003c/code\u003e\u003c/a\u003e Add more tracing spans around stack references (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23787\"\u003e#23787\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/45b7ec7e172379ac79f91d1e0d46230200af0713\"\u003e\u003ccode\u003e45b7ec7\u003c/code\u003e\u003c/a\u003e do: improve usage section (\u003ca href=\"https://redirect.github.com/pulumi/pulumi/issues/23782\"\u003e#23782\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pulumi/pulumi/commit/54b4e80e49a3e6ba415bc967212d104edb7e56d9\"\u003e\u003ccode\u003e54b4e80\u003c/code\u003e\u003c/a\u003e Don't include the version in module paths when serializing functions when usi...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pulumi/pulumi/compare/v3.250.0...v3.251.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.2.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.2\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.2.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eSupport for Closed TypedDicts (PEP 728)\u003c/h3\u003e\n\u003cp\u003eMypy now supports closed TypedDicts as specified in PEP 728. A closed TypedDict cannot have extra\nkeys beyond those explicitly defined. This allows the type checker to determine that certain\noperations are safe when they otherwise wouldn't be due to the potential presence of unknown keys.\u003c/p\u003e\n\u003cp\u003eYou can use the \u003ccode\u003eclosed\u003c/code\u003e keyword argument with \u003ccode\u003eTypedDict\u003c/code\u003e:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eHasName = TypedDict(\u0026quot;HasName\u0026quot;, {\u0026quot;name\u0026quot;: str})\nHasOnlyName = TypedDict(\u0026quot;HasOnlyName\u0026quot;, {\u0026quot;name\u0026quot;: str}, closed=True)\nMovie = TypedDict(\u0026quot;Movie\u0026quot;, {\u0026quot;name\u0026quot;: str, \u0026quot;year\u0026quot;: int})\n\u003cp\u003emovie: Movie = {\u0026quot;name\u0026quot;: \u0026quot;Nimona\u0026quot;, \u0026quot;year\u0026quot;: 2023}\nhas_name: HasName = movie  # OK: HasName is open (default)\nhas_only_name: HasOnlyName = movie  # Error: HasOnlyName is closed and Movie has extra \u0026quot;year\u0026quot; key\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eClosed TypedDicts enable more precise type checking because the type checker knows exactly which\nkeys are present. This is particularly useful when working with TypedDict unions or when you want\nto ensure that a TypedDict conforms to an exact shape.\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eclosed\u003c/code\u003e keyword also enables safe type narrowing with \u003ccode\u003ein\u003c/code\u003e checks:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eBook = TypedDict('Book', {'book': str}, closed=True)\nDVD = TypedDict('DVD', {'dvd': str}, closed=True)\ntype Inventory = Book | DVD\n\u003cp\u003edef print_type(inventory: Inventory) -\u0026gt; None:\nif \u0026quot;book\u0026quot; in inventory:\n# Type is narrowed to Book here - safe because DVD is closed\nprint(inventory[\u0026quot;book\u0026quot;])\nelse:\n# Type is narrowed to DVD here\nprint(inventory[\u0026quot;dvd\u0026quot;])\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b3c4a5b93adb49f979ab553fffebae7179cefa74\"\u003e\u003ccode\u003eb3c4a5b\u003c/code\u003e\u003c/a\u003e Mark release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/396f5082ac677a5115fbd6a0122328a6711f73dd\"\u003e\u003ccode\u003e396f508\u003c/code\u003e\u003c/a\u003e [Chore] Update changelog for 2.2 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21691\"\u003e#21691\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/9592a9ea65a9502b14ac3094b28f9e0e3a2e500a\"\u003e\u003ccode\u003e9592a9e\u003c/code\u003e\u003c/a\u003e Upload wasm wheels to PyPI (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21671\"\u003e#21671\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/1dc69620d9e827b015e6486114e0aaff7ec2d990\"\u003e\u003ccode\u003e1dc6962\u003c/code\u003e\u003c/a\u003e Bump ast-serialize to 0.6.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21664\"\u003e#21664\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/96a791310d47575827e44d10360505d8e23807b0\"\u003e\u003ccode\u003e96a7913\u003c/code\u003e\u003c/a\u003e Bump librt to 0.12.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21663\"\u003e#21663\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/5ef090270579013c337a9bcc79e2c58417f09538\"\u003e\u003ccode\u003e5ef0902\u003c/code\u003e\u003c/a\u003e Fix the exportjson tool (.ff cache to .json conversion) (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21628\"\u003e#21628\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8d621adb954731ba76b25bf7130275f3cadbb81a\"\u003e\u003ccode\u003e8d621ad\u003c/code\u003e\u003c/a\u003e Support --shadow-file with --native-parser (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21623\"\u003e#21623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/74ecdd8ecc9bee271eab49948436af63751ed1ff\"\u003e\u003ccode\u003e74ecdd8\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21612\"\u003e#21612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0cd154158ab2829a2f8c7a2728c7d4ed55e8f193\"\u003e\u003ccode\u003e0cd1541\u003c/code\u003e\u003c/a\u003e [mypyc] Make function wrappers thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21620\"\u003e#21620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/22a9cfd1595798810e27ef145ea4c989ccdcc883\"\u003e\u003ccode\u003e22a9cfd\u003c/code\u003e\u003c/a\u003e [mypyc] Make list remove and index thread-safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21614\"\u003e#21614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/JayDoubleu/tlumi/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/JayDoubleu%2Ftlumi/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}}]}