{"id":1886,"name":"typing-extensions","ecosystem":"pip","repository_url":"https://github.com/python/typing_extensions","issues_count":3668,"created_at":"2025-06-06T15:01:52.345Z","updated_at":"2025-06-06T15:01:52.345Z","purl":"pkg:pypi/typing-extensions","metadata":{"id":2957737,"name":"typing-extensions","ecosystem":"pypi","description":"Backported and Experimental Type Hints for Python 3.9+","homepage":"https://github.com/python/typing_extensions","licenses":"other","normalized_licenses":["GPL-1.0+"],"repository_url":"https://github.com/python/typing_extensions","keywords_array":["annotations","backport","checker","checking","function","hinting","hints","type","typechecking","typehinting","typehints","typing"],"namespace":null,"versions_count":46,"first_release_published_at":"2017-09-17T12:25:17.000Z","latest_release_published_at":"2025-06-02T14:52:10.000Z","latest_release_number":"4.14.0","last_synced_at":"2025-06-05T21:01:54.188Z","created_at":"2022-04-10T12:56:22.933Z","updated_at":"2025-06-05T21:01:54.188Z","registry_url":"https://pypi.org/project/typing-extensions/","install_command":"pip install typing-extensions --index-url https://pypi.org/simple","documentation_url":"https://typing-extensions.readthedocs.io/","metadata":{"funding":null,"documentation":"https://typing-extensions.readthedocs.io/","classifiers":["Development Status :: 5 - Production/Stable","Environment :: Console","Intended Audience :: Developers","Operating System :: OS Independent","Programming Language :: Python :: 3","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.14","Programming Language :: Python :: 3.9","Topic :: Software Development"],"normalized_name":"typing-extensions"},"repo_metadata":{"id":37017343,"uuid":"494077289","full_name":"python/typing_extensions","owner":"python","description":"Backported and experimental type hints for Python","archived":false,"fork":false,"pushed_at":"2025-05-29T16:19:44.000Z","size":2250,"stargazers_count":497,"open_issues_count":16,"forks_count":117,"subscribers_count":20,"default_branch":"main","last_synced_at":"2025-05-30T19:22:11.448Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/python.png","metadata":{"funding":{"custom":"https://www.python.org/psf/donations/python-dev/","github":["python"]},"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-05-19T13:12:25.000Z","updated_at":"2025-05-29T16:19:48.000Z","dependencies_parsed_at":"2023-10-04T11:00:55.674Z","dependency_job_id":"cc967fff-2aac-4181-bd06-4b30e59a0749","html_url":"https://github.com/python/typing_extensions","commit_stats":{"total_commits":384,"total_committers":67,"mean_commits":5.731343283582089,"dds":0.6770833333333333,"last_synced_commit":"67c16e190e7ebe6a9130b63839520ce01bdd6422"},"previous_names":[],"tags_count":51,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/python","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":257795341,"owners_count":22604273,"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":"python","name":"Python","uuid":"1525981","kind":"organization","description":"Repositories related to the Python Programming language","email":null,"website":"https://www.python.org/","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1525981?v=4","repositories_count":85,"last_synced_at":"2025-05-29T00:18:41.563Z","metadata":{"has_sponsors_listing":true,"funding":{"custom":"https://www.python.org/psf/donations/python-dev/","github":["python"]}},"html_url":"https://github.com/python","funding_links":["https://www.python.org/psf/donations/python-dev/","https://github.com/sponsors/python"],"total_stars":108359,"followers":25850,"following":0,"created_at":"2022-11-02T16:22:47.410Z","updated_at":"2025-05-29T00:18:41.564Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/python","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/python/repositories"},"tags":[{"name":"4.14.0rc1","sha":"36cc47605804318bf40ee26d765de2070741c25c","kind":"commit","published_at":"2025-05-24T21:31:59.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.14.0rc1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.14.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.14.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.14.0rc1/manifests"},{"name":"4.13.2","sha":"4525e9dbbd177b4ef8a84f55ff5fe127582a071d","kind":"commit","published_at":"2025-04-10T14:16:36.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.13.2","html_url":"https://github.com/python/typing_extensions/releases/tag/4.13.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.13.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.13.2/manifests"},{"name":"4.13.1","sha":"45a8847aad979d2f1f7dff075ac52df5df7b7adb","kind":"commit","published_at":"2025-04-03T16:06:38.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.13.1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.13.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.13.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.13.1/manifests"},{"name":"4.13.0","sha":"c8934015b7e2feb65dc461fef202ef69611d7d0e","kind":"commit","published_at":"2025-03-26T03:44:47.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.13.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.13.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.13.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.13.0/manifests"},{"name":"4.13.0rc1","sha":"3c66d2692214bdc29550bcb8e537b104ea23cb0b","kind":"commit","published_at":"2025-03-18T18:00:18.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.13.0rc1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.13.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.13.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.13.0rc1/manifests"},{"name":"4.12.2","sha":"e1250ff869e7ee5ad05170d8a4b65469f13801c3","kind":"commit","published_at":"2024-06-07T18:48:59.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.12.2","html_url":"https://github.com/python/typing_extensions/releases/tag/4.12.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.2/manifests"},{"name":"4.12.1","sha":"726963800030ab35ba5b975fc3a60486c26c5050","kind":"commit","published_at":"2024-06-01T17:25:21.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.12.1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.12.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.1/manifests"},{"name":"4.12.0","sha":"f90a8dc40b60bf43510b8611a07d8cc570544ffe","kind":"commit","published_at":"2024-05-24T00:22:42.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.12.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.12.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.0/manifests"},{"name":"4.12.0rc1","sha":"0dbc7c971f7ec61f12a1466f8d8f222bdf9a4b31","kind":"commit","published_at":"2024-05-16T19:55:11.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.12.0rc1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.12.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.0rc1/manifests"},{"name":"4.12.0a2","sha":"72298f05fc520f05ca9a280f5ed0fa3e5de27041","kind":"commit","published_at":"2024-05-16T19:18:42.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.12.0a2","html_url":"https://github.com/python/typing_extensions/releases/tag/4.12.0a2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.0a2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.0a2/manifests"},{"name":"4.12.0a1","sha":"21fde1f0d04f78e080ca4f6119293b607d9a0475","kind":"commit","published_at":"2024-05-16T19:08:31.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.12.0a1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.12.0a1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.0a1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.12.0a1/manifests"},{"name":"4.11.0","sha":"d4d929d44bd984350e2d17726362295f588eaace","kind":"commit","published_at":"2024-04-05T12:33:24.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.11.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.11.0/manifests"},{"name":"4.11.0rc1","sha":"94bec447d6f7b9d3625ef0e688a0b0f9e487e951","kind":"commit","published_at":"2024-03-24T14:02:37.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.11.0rc1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.11.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.11.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.11.0rc1/manifests"},{"name":"4.10.0","sha":"ed81f2b2043f60b0c159914e264e127f5d0b4cda","kind":"commit","published_at":"2024-02-25T22:08:26.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.10.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.10.0/manifests"},{"name":"4.10.0rc1","sha":"06b23e3f05fd0f929dbaea17ae51621dcc8434ab","kind":"commit","published_at":"2024-02-18T02:56:17.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.10.0rc1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.10.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.10.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.10.0rc1/manifests"},{"name":"4.9.0","sha":"fc461d6faf4585849b561f2e4cbb06e9db095307","kind":"commit","published_at":"2023-12-10T01:11:53.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.9.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.9.0/manifests"},{"name":"4.9.0rc1","sha":"f82d6367f3ff8f16b6291de06394ec6b9318bfc3","kind":"commit","published_at":"2023-11-29T18:13:59.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.9.0rc1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.9.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.9.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.9.0rc1/manifests"},{"name":"4.8.0","sha":"c17c499b865585458bc334a1f895ebaedd2ab854","kind":"commit","published_at":"2023-09-18T04:00:06.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.8.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.8.0/manifests"},{"name":"4.8.0rc1","sha":"7e294992dfe3070b3ca228555fa3887001ceaab2","kind":"commit","published_at":"2023-09-08T00:44:05.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.8.0rc1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.8.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.8.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.8.0rc1/manifests"},{"name":"4.7.1","sha":"b518f6a64400fd5a25e5b72668370b9792ef9ae6","kind":"commit","published_at":"2023-07-02T14:18:05.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.7.1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.7.1/manifests"},{"name":"4.7.0","sha":"633d2e2942372848d8d7859cf71a569259dba9ee","kind":"commit","published_at":"2023-06-28T20:52:52.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.7.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.7.0/manifests"},{"name":"4.7.0rc1","sha":"e69eea0043237af911353a44bfa50d94821f2af5","kind":"commit","published_at":"2023-06-21T14:50:58.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.7.0rc1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.7.0rc1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.7.0rc1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.7.0rc1/manifests"},{"name":"4.6.3","sha":"c57333b77603298e2d79fdaf7632e09e40d11f54","kind":"commit","published_at":"2023-06-01T23:39:37.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.6.3","html_url":"https://github.com/python/typing_extensions/releases/tag/4.6.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.6.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.6.3/manifests"},{"name":"4.6.2","sha":"e84f909f6a9e8e03ef444a3a3c7e506e8e3b19e4","kind":"commit","published_at":"2023-05-25T13:13:04.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.6.2","html_url":"https://github.com/python/typing_extensions/releases/tag/4.6.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.6.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.6.2/manifests"},{"name":"4.6.1","sha":"f62fa3f37ce1949e8a536691b30c59c4889445eb","kind":"commit","published_at":"2023-05-24T03:04:34.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.6.1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.6.1/manifests"},{"name":"4.6.0","sha":"356934ca69a223416a199c2b26c19315382738db","kind":"commit","published_at":"2023-05-23T00:06:45.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.6.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.6.0/manifests"},{"name":"4.5.0","sha":"8dcd89993c3926d6c704232b9c56160447fa81fe","kind":"commit","published_at":"2023-02-15T00:16:20.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.5.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.5.0/manifests"},{"name":"4.4.0","sha":"b5f375a332840cf8543bfc191463266382edec6a","kind":"commit","published_at":"2022-10-06T22:37:48.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.4.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.4.0/manifests"},{"name":"4.3.0","sha":"9c0759a260fe126210a1e2026720000a3c40a919","kind":"commit","published_at":"2022-07-01T14:52:07.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.3.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.3.0/manifests"},{"name":"4.2.0","sha":"7d76a775b0ddd7632e654adc05ab2968727a2807","kind":"commit","published_at":"2022-04-17T21:21:53.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.2.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.2.0/manifests"},{"name":"4.1.1","sha":"07a103710e5a22e4c1b6a5803a14720d64717df2","kind":"commit","published_at":"2022-02-14T03:15:26.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.1.1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.1.1/manifests"},{"name":"4.1.0","sha":"e3359a92257b7abcbb5d24a1f3a81c1b007defbc","kind":"commit","published_at":"2022-02-12T21:27:07.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.1.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.1.0/manifests"},{"name":"4.0.1","sha":"cd9faac806f991344ade6c81cb5b321242f611c3","kind":"commit","published_at":"2021-12-01T01:42:06.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.0.1","html_url":"https://github.com/python/typing_extensions/releases/tag/4.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.0.1/manifests"},{"name":"4.0.0","sha":"cf75e420a23c28fd6fd963573a55450db7237ab7","kind":"commit","published_at":"2021-11-14T15:22:59.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/4.0.0","html_url":"https://github.com/python/typing_extensions/releases/tag/4.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/4.0.0/manifests"},{"name":"3.10.0.2","sha":"a9be78c5dcf0ce475b3b561b326637ecca2e8e50","kind":"commit","published_at":"2021-08-30T18:42:55.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.10.0.2","html_url":"https://github.com/python/typing_extensions/releases/tag/3.10.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.10.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.10.0.2/manifests"},{"name":"3.10.0.1","sha":"0c70227e221866b74b5cf6b3e251bc67864781ef","kind":"commit","published_at":"2021-08-29T15:52:30.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.10.0.1","html_url":"https://github.com/python/typing_extensions/releases/tag/3.10.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.10.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.10.0.1/manifests"},{"name":"3.10.0.0","sha":"faa7ce22752123e616a08c9e4fe81c3b234c1354","kind":"commit","published_at":"2021-05-01T17:49:46.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.10.0.0","html_url":"https://github.com/python/typing_extensions/releases/tag/3.10.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.10.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.10.0.0/manifests"},{"name":"3.7.4.3","sha":"ffebbecbf4ad162572050ecfaac4335cc5431c24","kind":"commit","published_at":"2020-07-13T23:17:15.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.7.4.3","html_url":"https://github.com/python/typing_extensions/releases/tag/3.7.4.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.7.4.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.7.4.3/manifests"},{"name":"3.7.4.2","sha":"c85016137eab6d0784b76252460235638087f468","kind":"commit","published_at":"2020-07-09T22:43:22.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.7.4.2","html_url":"https://github.com/python/typing_extensions/releases/tag/3.7.4.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.7.4.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.7.4.2/manifests"},{"name":"3.7.4.1","sha":"7c00cacae00c4f3263e939e88b5e7739150851e5","kind":"commit","published_at":"2019-08-22T13:25:36.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.7.4.1","html_url":"https://github.com/python/typing_extensions/releases/tag/3.7.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.7.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.7.4.1/manifests"},{"name":"3.7.4","sha":"baf63c5924a2b9695175df5d47ced40596024b78","kind":"commit","published_at":"2019-06-19T21:53:26.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.7.4","html_url":"https://github.com/python/typing_extensions/releases/tag/3.7.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.7.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.7.4/manifests"},{"name":"3.6.6","sha":"d6631e8ea56063897e341207477e0cc3231f20b2","kind":"commit","published_at":"2018-08-26T18:56:24.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.6.6","html_url":"https://github.com/python/typing_extensions/releases/tag/3.6.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.6.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.6.6/manifests"},{"name":"3.6.4","sha":"ae9f5edd9575f7f94e45c6e9b64898db73a8b62a","kind":"commit","published_at":"2018-01-25T00:37:07.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.6.4","html_url":"https://github.com/python/typing_extensions/releases/tag/3.6.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.6.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.6.4/manifests"},{"name":"3.6.2","sha":"a84d7ada69d2d27f984d521c41047aefc791ca58","kind":"commit","published_at":"2017-08-08T08:35:32.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.6.2","html_url":"https://github.com/python/typing_extensions/releases/tag/3.6.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.6.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.6.2/manifests"},{"name":"3.6.1","sha":"f264669254f0e6121f683e74e2947aa6e4b43b6f","kind":"commit","published_at":"2017-03-27T01:27:20.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.6.1","html_url":"https://github.com/python/typing_extensions/releases/tag/3.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.6.1/manifests"},{"name":"3.5.3.0","sha":"60c8fc785c28950c77e598b46cdf3903944b8875","kind":"commit","published_at":"2017-01-01T02:57:19.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.5.3.0","html_url":"https://github.com/python/typing_extensions/releases/tag/3.5.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.3.0/manifests"},{"name":"3.5.2","sha":"1e4c0bae6f797ee5878ce4bb30f3b03c679e3e11","kind":"commit","published_at":"2016-06-09T18:09:47.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.5.2","html_url":"https://github.com/python/typing_extensions/releases/tag/3.5.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.2/manifests"},{"name":"3.5.2.2","sha":"1e4c0bae6f797ee5878ce4bb30f3b03c679e3e11","kind":"commit","published_at":"2016-06-09T18:09:47.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.5.2.2","html_url":"https://github.com/python/typing_extensions/releases/tag/3.5.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.2.2/manifests"},{"name":"3.5.1","sha":"8b173130b22b7ef376b8c67111051702fcf66c08","kind":"commit","published_at":"2016-04-16T04:01:20.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.5.1","html_url":"https://github.com/python/typing_extensions/releases/tag/3.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.1/manifests"},{"name":"3.5.0.1","sha":"c448a763ad2c28bcc390222122a61a172dae1283","kind":"commit","published_at":"2015-10-28T09:41:18.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.5.0.1","html_url":"https://github.com/python/typing_extensions/releases/tag/3.5.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.0.1/manifests"},{"name":"3.5.0","sha":"9693f868783b10719ce6ef0dd4e3768b65911eac","kind":"commit","published_at":"2015-10-03T00:09:47.000Z","download_url":"https://codeload.github.com/python/typing_extensions/tar.gz/3.5.0","html_url":"https://github.com/python/typing_extensions/releases/tag/3.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python%2Ftyping_extensions/tags/3.5.0/manifests"}]},"repo_metadata_updated_at":"2025-06-03T20:06:38.960Z","dependent_packages_count":7473,"downloads":593947687,"downloads_period":"last-month","dependent_repos_count":120765,"rankings":{"downloads":0.0009170828694422486,"dependent_repos_count":0.008437162398868686,"dependent_packages_count":0.0033014983299920943,"stargazers_count":4.303503073144696,"forks_count":5.896109184218104,"docker_downloads_count":0.050256141245435225,"average":1.7104206903677561},"purl":"pkg:pypi/typing-extensions","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/typing-extensions","docker_dependents_count":6593,"docker_downloads_count":1786863279,"usage_url":"https://repos.ecosyste.ms/usage/pypi/typing-extensions","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/typing-extensions/dependencies","status":null,"funding_links":["https://www.python.org/psf/donations/python-dev/","https://github.com/sponsors/python"],"critical":true,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/typing-extensions/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/typing-extensions/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/typing-extensions/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/typing-extensions/related_packages","maintainers":[{"uuid":"hauntsaninja","login":"hauntsaninja","name":null,"email":null,"url":null,"packages_count":18,"html_url":"https://pypi.org/user/hauntsaninja/","role":null,"created_at":"2023-01-31T11:54:04.692Z","updated_at":"2023-01-31T11:54:04.692Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/hauntsaninja/packages"},{"uuid":"srittau","login":"srittau","name":null,"email":null,"url":null,"packages_count":15,"html_url":"https://pypi.org/user/srittau/","role":null,"created_at":"2023-01-31T11:54:04.712Z","updated_at":"2023-01-31T11:54:04.712Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/srittau/packages"},{"uuid":"JelleZijlstra","login":"JelleZijlstra","name":null,"email":null,"url":null,"packages_count":27,"html_url":"https://pypi.org/user/JelleZijlstra/","role":null,"created_at":"2023-01-31T11:54:04.702Z","updated_at":"2023-01-31T11:54:04.702Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/JelleZijlstra/packages"},{"uuid":"guido","login":"guido","name":null,"email":null,"url":null,"packages_count":12,"html_url":"https://pypi.org/user/guido/","role":null,"created_at":"2023-01-31T11:54:04.605Z","updated_at":"2023-01-31T11:54:04.605Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/guido/packages"},{"uuid":"ilevkivskyi","login":"ilevkivskyi","name":null,"email":null,"url":null,"packages_count":8,"html_url":"https://pypi.org/user/ilevkivskyi/","role":null,"created_at":"2023-01-31T11:54:04.620Z","updated_at":"2023-01-31T11:54:04.620Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/ilevkivskyi/packages"},{"uuid":"jukkal","login":"jukkal","name":null,"email":null,"url":null,"packages_count":8,"html_url":"https://pypi.org/user/jukkal/","role":null,"created_at":"2023-01-31T11:54:04.659Z","updated_at":"2023-01-31T11:54:04.659Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/jukkal/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":690057,"maintainers_count":292646,"namespaces_count":0,"keywords_count":228482,"github":"pypi","metadata":{"funded_packages_count":48953},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2025-06-05T05:19:27.498Z","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":1302,"unique_repositories_count_past_30_days":15,"recent_issues":[{"uuid":"4964417245","node_id":"PR_kwDOSuNyS871pZua","number":26,"state":"open","title":"build(deps): Bump the dependencies group across 3 directories with 73 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-24T01:50:20.000Z","updated_at":"2026-07-24T01:50:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","group_name":"dependencies","update_count":73,"packages":[{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"bleach","old_version":"4.1.0","new_version":"6.4.0","repository_url":"https://github.com/mozilla/bleach"},{"name":"blessed","old_version":"1.39.0","new_version":"1.47.0","repository_url":"https://github.com/jquast/blessed"},{"name":"boto3","old_version":"1.43.8","new_version":"1.43.50","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.8","new_version":"1.43.50","repository_url":"https://github.com/boto/botocore"},{"name":"certifi","old_version":"2026.4.22","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"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":"django","old_version":"5.2.14","new_version":"6.0.7","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.18.0","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-filter","old_version":"25.2","new_version":"26.1","repository_url":"https://github.com/carltongibson/django-filter"},{"name":"django-js-asset","old_version":"3.1.2","new_version":"4.0.1","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-maintenance-mode","old_version":"0.22.0","new_version":"0.23.0","repository_url":"https://github.com/fabiocaccamo/django-maintenance-mode"},{"name":"django-markdownify","old_version":"0.9.1","new_version":"0.9.7","repository_url":"https://github.com/erwinmatijsen/django-markdownify"},{"name":"django-money","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/django-money/django-money"},{"name":"django-oauth-toolkit","old_version":"3.2.0","new_version":"3.3.0","repository_url":"https://github.com/django-oauth/django-oauth-toolkit"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"django-redis","old_version":"6.0.0","new_version":"7.0.0","repository_url":"https://github.com/jazzband/django-redis"},{"name":"django-structlog","old_version":"10.0.0","new_version":"10.1.0","repository_url":"https://github.com/jrobichaud/django-structlog"},{"name":"docutils","old_version":"0.22.4","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"dulwich","old_version":"1.2.1","new_version":"1.2.11","repository_url":"https://github.com/dulwich/dulwich"},{"name":"fido2","old_version":"2.2.0","new_version":"2.2.1","repository_url":"https://github.com/Yubico/python-fido2"},{"name":"grpcio","old_version":"1.80.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"icalendar","old_version":"7.1.0","new_version":"7.2.0","repository_url":"https://github.com/collective/icalendar"},{"name":"idna","old_version":"3.15","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"importlib-metadata","old_version":"8.7.1","new_version":"9.0.0","repository_url":"https://github.com/python/importlib_metadata"},{"name":"jwcrypto","old_version":"1.5.7","new_version":"1.5.8","repository_url":"https://github.com/latchset/jwcrypto"},{"name":"lxml","old_version":"6.1.0","new_version":"6.1.1","repository_url":"https://github.com/lxml/lxml"},{"name":"nh3","old_version":"0.3.5","new_version":"0.3.6","repository_url":"https://github.com/messense/nh3"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-dbapi","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.9.6","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"prettytable","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/prettytable/prettytable"},{"name":"protobuf","old_version":"6.33.6","new_version":"7.35.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pypdf","old_version":"6.11.0","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"python-fsutil","old_version":"0.16.1","new_version":"0.17.0","repository_url":"https://github.com/fabiocaccamo/python-fsutil"},{"name":"redis","old_version":"7.4.0","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"rpds-py","old_version":"0.30.0","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"s3transfer","old_version":"0.17.0","new_version":"0.19.1","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.60.0","new_version":"2.66.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"setuptools","old_version":"82.0.1","new_version":"83.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.68.4","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"tzdata","old_version":"2026.2","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"wcwidth","old_version":"0.7.0","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"weasyprint","old_version":"68.1","new_version":"69.0","repository_url":"https://github.com/Kozea/WeasyPrint"},{"name":"wrapt","old_version":"1.17.3","new_version":"2.2.2","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"zipp","old_version":"3.23.1","new_version":"4.1.0","repository_url":"https://github.com/jaraco/zipp"},{"name":"zopfli","old_version":"0.4.1","new_version":"0.4.3","repository_url":"https://github.com/fonttools/py-zopfli"},{"name":"click","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.14.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-stubs","old_version":"6.0.4","new_version":"6.0.7","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.4","new_version":"6.0.7","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"pip","old_version":"26.1.1","new_version":"26.1.2","repository_url":"https://github.com/pypa/pip"},{"name":"prek","old_version":"0.4.0","new_version":"0.4.10","repository_url":"https://github.com/j178/prek"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-codspeed","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"},{"name":"ty","old_version":"0.0.1a21","new_version":"0.0.60","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-psycopg2","old_version":"2.9.21.20260509","new_version":"2.9.21.20260712","repository_url":"https://github.com/python/typeshed"},{"name":"types-pyyaml","old_version":"6.0.12.20260510","new_version":"6.0.12.20260518","repository_url":"https://github.com/python/typeshed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 1 update in the /contrib/dev_reqs directory: [jc](https://github.com/kellyjonbrazil/jc).\nBumps the dependencies group with 2 updates in the /docs directory: [mkdocs-git-revision-date-localized-plugin](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).\nBumps the dependencies group with 70 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [bleach](https://github.com/mozilla/bleach) | `4.1.0` | `6.4.0` |\n| [blessed](https://github.com/jquast/blessed) | `1.39.0` | `1.47.0` |\n| [boto3](https://github.com/boto/boto3) | `1.43.8` | `1.43.50` |\n| [botocore](https://github.com/boto/botocore) | `1.43.8` | `1.43.50` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.4.22` | `2026.6.17` |\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| [django](https://github.com/django/django) | `5.2.14` | `6.0.7` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.18.0` |\n| [django-filter](https://github.com/carltongibson/django-filter) | `25.2` | `26.1` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `3.1.2` | `4.0.1` |\n| [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) | `0.22.0` | `0.23.0` |\n| [django-markdownify](https://github.com/erwinmatijsen/django-markdownify) | `0.9.1` | `0.9.7` |\n| [django-money](https://github.com/django-money/django-money) | `3.6.0` | `3.6.1` |\n| [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) | `3.2.0` | `3.3.0` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [django-redis](https://github.com/jazzband/django-redis) | `6.0.0` | `7.0.0` |\n| [django-structlog](https://github.com/jrobichaud/django-structlog) | `10.0.0` | `10.1.0` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.22.4` | `0.23` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `1.2.1` | `1.2.11` |\n| [fido2](https://github.com/Yubico/python-fido2) | `2.2.0` | `2.2.1` |\n| [grpcio](https://github.com/grpc/grpc) | `1.80.0` | `1.82.1` |\n| [icalendar](https://github.com/collective/icalendar) | `7.1.0` | `7.2.0` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.18` |\n| [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` |\n| [jwcrypto](https://github.com/latchset/jwcrypto) | `1.5.7` | `1.5.8` |\n| [lxml](https://github.com/lxml/lxml) | `6.1.0` | `6.1.1` |\n| [nh3](https://github.com/messense/nh3) | `0.3.5` | `0.3.6` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.62b1` | `0.65b0` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.6` | `4.10.0` |\n| [prettytable](https://github.com/prettytable/prettytable) | `3.17.0` | `3.18.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.35.1` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.11.0` | `6.14.2` |\n| [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.1` | `0.17.0` |\n| [redis](https://github.com/redis/redis-py) | `7.4.0` | `8.0.1` |\n| [rpds-py](https://github.com/crate-py/rpds) | `0.30.0` | `2026.6.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.17.0` | `0.19.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.60.0` | `2.66.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `83.0.0` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.4` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.2` | `2026.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.7.0` | `0.8.2` |\n| [weasyprint](https://github.com/Kozea/WeasyPrint) | `68.1` | `69.0` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.2.2` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.1` | `4.1.0` |\n| [zopfli](https://github.com/fonttools/py-zopfli) | `0.4.1` | `0.4.3` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.2` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.0` | `7.15.2` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.4` | `6.0.7` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.4` | `6.0.7` |\n| [pip](https://github.com/pypa/pip) | `26.1.1` | `26.1.2` |\n| [prek](https://github.com/j178/prek) | `0.4.0` | `0.4.10` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `5.0.2` | `5.0.3` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a21` | `0.0.60` |\n| [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260509` | `2.9.21.20260712` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20260510` | `6.0.12.20260518` |\n\n\nUpdates `jc` from 1.25.6 to 1.25.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kellyjonbrazil/jc/releases\"\u003ejc's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eJC version 1.25.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\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/kellyjonbrazil/jc/blob/master/CHANGELOG\"\u003ejc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ejc changelog\u003c/p\u003e\n\u003cp\u003e20260617 v1.25.7\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20251012 v1.25.6\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-localgroup\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-user\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eroute-print\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etraceroute-s\u003c/code\u003e streaming command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_hops\u003c/code\u003e and \u003ccode\u003edata_bytes\u003c/code\u003e fields to \u003ccode\u003etraceroute\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ex509-crl\u003c/code\u003e file parser to support Certificate Revocation List PEM and DER files\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eyay\u003c/code\u003e as a magic command for the \u003ccode\u003epacman\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e command parser to support output with the \u003ccode\u003ecable_pairing\u003c/code\u003e attribute\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support blank \u003ccode\u003eteam.config\u003c/code\u003e JSON value and \u003ccode\u003eteam-port.config\u003c/code\u003e JSON value\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etop\u003c/code\u003e command parsers to correct memory size field parsing. Several new unit\nand byte conversion fields have been added\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ewho\u003c/code\u003e command parser to support the \u003ccode\u003eprocess\u003c/code\u003e field on Debian13\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20250503 v1.25.5\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eamixer\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003eiptables\u003c/code\u003e command parser to add default policy statistics fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e parser failing to parse controllers with power state prop\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsblk\u003c/code\u003e command parser to support multiple mountpoints. Also, added\nbyte conversions for size fields.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support \u003ccode\u003eteam.config\u003c/code\u003e JSON field\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etime\u003c/code\u003e command parser for output that does not contain centiseconds\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ex509-cert\u003c/code\u003e parser to handle IDNA2008 encoded email addresses with a warning\u003c/li\u003e\n\u003cli\u003eFix typing for upcoming python v3.14\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/kellyjonbrazil/jc/commit/8290734a87a30e5f0af7e1fba5ecbda2e1c145a8\"\u003e\u003ccode\u003e8290734\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/712\"\u003e#712\u003c/a\u003e from kellyjonbrazil/dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/9d11e1fe5bbdfb9f68b001940a7ae235b68db637\"\u003e\u003ccode\u003e9d11e1f\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/3a2946b6584f2128917ffe908f749498b8c5ea5c\"\u003e\u003ccode\u003e3a2946b\u003c/code\u003e\u003c/a\u003e add streaming csv-ih, tsv, and tsv-ih parsers with doc fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/22ff0e33c3957c929d45864cc9790b8f7b6fe9c8\"\u003e\u003ccode\u003e22ff0e3\u003c/code\u003e\u003c/a\u003e fix for python 3.15 behavior changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/fab550e3b8fef49abe297c5ac4f0b2f9b330d3a9\"\u003e\u003ccode\u003efab550e\u003c/code\u003e\u003c/a\u003e docs: fix typos (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/711\"\u003e#711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/6e79f08c9083836467711e6965f5ca18b1505674\"\u003e\u003ccode\u003e6e79f08\u003c/code\u003e\u003c/a\u003e Add TSV alias and CSV/TSV \u0026quot;No Header\u0026quot; alias (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/900aed5d880f2c1150739976bfbfb1f87e64cbc9\"\u003e\u003ccode\u003e900aed5\u003c/code\u003e\u003c/a\u003e fix tests and update docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/676695eacf75aa01920b89bb1809ee96e47d20bb\"\u003e\u003ccode\u003e676695e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/701\"\u003e#701\u003c/a\u003e from jeffdyke/feature/certs-with-cert-name\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/30c75073044dd364174b080709e9fb6c870ce82e\"\u003e\u003ccode\u003e30c7507\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/7d801f30bb9b35b60938c193d76227f5a3473b50\"\u003e\u003ccode\u003e7d801f3\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kellyjonbrazil/jc/compare/v1.25.6...v1.25.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-git-revision-date-localized-plugin` from 1.5.2 to 1.5.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/releases\"\u003emkdocs-git-revision-date-localized-plugin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix paths in MANIFEST.in by \u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\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/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\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/timvink/mkdocs-git-revision-date-localized-plugin/commit/30e58767a16cd9ec1dd2669f0bdc1af8630af18c\"\u003e\u003ccode\u003e30e5876\u003c/code\u003e\u003c/a\u003e Bump version to 1.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/d58c5becb14bcd4a6143768fb3b7478954c09133\"\u003e\u003ccode\u003ed58c5be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/211\"\u003e#211\u003c/a\u003e from mitya57/fix-manifest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/6da0b4ea1b8c379164a4f1db8e005e98a0b4557d\"\u003e\u003ccode\u003e6da0b4e\u003c/code\u003e\u003c/a\u003e Fix paths in MANIFEST.in\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/aa0d4a3b93f6c4cc36afbf2d8def4af5566d0834\"\u003e\u003ccode\u003eaa0d4a3\u003c/code\u003e\u003c/a\u003e Constrain mkdocs to \u0026lt;2\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.4 to 1.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/commit/9a11dcb8e9b39ff6e1a22abdd362350de4e68e9f\"\u003e\u003ccode\u003e9a11dcb\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e\u003ccode\u003e4732798\u003c/code\u003e\u003c/a\u003e fix: Stop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ecbaa9a05dde5bdc83accf8814fa1c9a1ffe1473\"\u003e\u003ccode\u003eecbaa9a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/64260f748f3db8b301a9d6fa05b2609ab6f6876c\"\u003e\u003ccode\u003e64260f7\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003e\u003ccode\u003eacc0da3\u003c/code\u003e\u003c/a\u003e fix: Parse inventory project and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ec45a9b7a1301a4c70e02e6c92e1b9caff6df61f\"\u003e\u003ccode\u003eec45a9b\u003c/code\u003e\u003c/a\u003e ci: Fix warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ce2199c5195535f8c3b4907dd3ac7de2181925cc\"\u003e\u003ccode\u003ece2199c\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README (\u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\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/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `bleach` from 4.1.0 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mozilla/bleach/blob/main/CHANGES\"\u003ebleach's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.4.0 (June 5th, 2026)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNOTE: 2026-06-05: Bleach is no longer maintained. There will be no future\nreleases including for security issues.\u003c/strong\u003e\nSee issue: \u003ccode\u003e\u0026lt;https://github.com/mozilla/bleach/issues/698\u0026gt;\u003c/code\u003e__\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eBackwards incompatible changes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for pypy 3.10. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/764\"\u003e#764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix bug 2023812 / GHSA-8rfp-98v4-mmr6.\u003c/p\u003e\n\u003cp\u003eFix XSS issue with sanitize_uri_value where disallowed schemes with\nUnicode invisible characters wouldn't be rejected.\u003c/p\u003e\n\u003cp\u003eFor example::\u003c/p\u003e\n\u003cp\u003eimport bleach\npayload1 = '\u003c!-- raw HTML omitted --\u003eClick\u003c!-- raw HTML omitted --\u003e'\nresult1 = bleach.clean(payload1)\nprint(repr(result1))\u003c/p\u003e\n\u003cp\u003eoutputs::\u003c/p\u003e\n\u003cp\u003e'\u003c!-- raw HTML omitted --\u003eClick\u003c!-- raw HTML omitted --\u003e'\u003c/p\u003e\n\u003cp\u003eSee the advisory for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix GHSA-gj48-438w-jh9v.\u003c/p\u003e\n\u003cp\u003eFix issue where URI sanitization wasn't happening in formaction attributes.\u003c/p\u003e\n\u003cp\u003eSee the advisory for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd support for pypy 3.11. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/764\"\u003e#764\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop version max in tinycss2 pin. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/772\"\u003e#772\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis removes one of the things we had to keep checking and updating. Users\nnow own the responsibility for correctness with the version of tinycss2\nthey're using.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 6.3.0 (October 27th, 2025)\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/mozilla/bleach/commit/f0355a7af00500482c5292c6c83290c6a178068d\"\u003e\u003ccode\u003ef0355a7\u003c/code\u003e\u003c/a\u003e fix: fix last release date in CHANGES\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/ae4e8a26706516ad01b92e66321b480208a440da\"\u003e\u003ccode\u003eae4e8a2\u003c/code\u003e\u003c/a\u003e chore: bleach 6.4.0 and final release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/970df58e9f0c55cc52244f3f0106e473a40d886d\"\u003e\u003ccode\u003e970df58\u003c/code\u003e\u003c/a\u003e fix: uri-sanitization in formaction attributes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/7c4867c32344d1c961107fae62240a6f0dc680dc\"\u003e\u003ccode\u003e7c4867c\u003c/code\u003e\u003c/a\u003e fix: xss bypass in allowed protocol test using unicode invisible characters\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/913ab75992b845e2c9c060c41f24d46921db4693\"\u003e\u003ccode\u003e913ab75\u003c/code\u003e\u003c/a\u003e fix: reduce redundancy in workflow jobs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/218c15af455c8dec14f98fcb2e235f8680e93930\"\u003e\u003ccode\u003e218c15a\u003c/code\u003e\u003c/a\u003e fix: rework pip caching\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/4f0b097bf80548a022050e2f71f024d755a9f154\"\u003e\u003ccode\u003e4f0b097\u003c/code\u003e\u003c/a\u003e fix: fix tox platform restrictions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/e95a79d07bb5d792425c2bc0ef5dd03f6614f3bb\"\u003e\u003ccode\u003ee95a79d\u003c/code\u003e\u003c/a\u003e chore: update pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/91539d4e80d4685b8f2bedc79076ff0ff6c1b911\"\u003e\u003ccode\u003e91539d4\u003c/code\u003e\u003c/a\u003e Bump actions/cache from 5.0.3 to 5.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/cd47b4ce495859065da23c2116f651e591e1e90d\"\u003e\u003ccode\u003ecd47b4c\u003c/code\u003e\u003c/a\u003e fix: handle left-angle-bracket that's not a tag (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mozilla/bleach/compare/v4.1.0...v6.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `blessed` from 1.39.0 to 1.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jquast/blessed/releases\"\u003eblessed's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.46\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix DA1 response for some terminals (kitty) by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/392\"\u003ejquast/blessed#392\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved remote truecolor detection by unique TERM by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/394\"\u003ejquast/blessed#394\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd sugar for some extended capabilities by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/393\"\u003ejquast/blessed#393\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.45...1.46\"\u003ehttps://github.com/jquast/blessed/compare/1.45...1.46\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.43: bugfix leaked XTGETTCAP responses into inkey()\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix leaked XTGETTCAP responses into inkey() by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/383\"\u003ejquast/blessed#383\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.42...1.43\"\u003ehttps://github.com/jquast/blessed/compare/1.42...1.43\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.42: bugfix regression: cbreak and raw() were not thread-safe\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression in \u003ccode\u003eTerminal.cbreak()\u003c/code\u003e and \u003ccode\u003eraw\u003c/code\u003e were not thread-safe broken in versions 1.40 and 1.41, remove signal ignore of SIGTTOU \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/380\"\u003e#380\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.41...1.42\"\u003ehttps://github.com/jquast/blessed/compare/1.41...1.42\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.41: bugfix get_location() regression\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix get_location() return type in 1.40 release by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/379\"\u003ejquast/blessed#379\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.40...1.41\"\u003ehttps://github.com/jquast/blessed/compare/1.40...1.41\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.40: XTGETTCAP support\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ecurses-free jinxed 2.0 integration by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/374\"\u003ejquast/blessed#374\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eQuery XTGETTCAP on Terminal init by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/375\"\u003ejquast/blessed#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.39...1.40\"\u003ehttps://github.com/jquast/blessed/compare/1.39...1.40\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.17.9: Initial support for Python 3.10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: Now imports on 3.10+\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.15.0: Disable various integration tests, support python 3.7\u003c/h2\u003e\n\u003cp\u003eNo release notes provided.\u003c/p\u003e\n\u003ch2\u003e1.14.0: bugfix term.wrap for text containing newlines\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: term.wrap misbehaved for text containing newlines, \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/74\"\u003e#74\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.13.0: new Terminal.split_seqs() function, speed enhancement\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eenhancement: method \u003ccode\u003eTerminal.split_seqs\u003c/code\u003e introduced, and 4x cost reduction in related sequence-aware functions, \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/29\"\u003e#29\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003edeprecated: function \u003ccode\u003eblessed.sequences.measure_length\u003c/code\u003e superseded by \u003ccode\u003eblessed.sequences.iter_parse\u003c/code\u003e if necessary.\u003c/li\u003e\n\u003cli\u003edeprecated: warnings about \u0026quot;binary-packed capabilities\u0026quot; are no longer emitted on strange terminal types, making best effort.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.12.0: add Terminal.get_location() method\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eenhancement: method Terminal.get_location\u003ccode\u003ereturns the\u003c/code\u003e(row, col)`` position of the cursor at the time of call for attached terminal.\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/jquast/blessed/blob/master/docs/history.rst\"\u003eblessed's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. py:currentmodule:: blessed.terminal\u003c/p\u003e\n\u003ch1\u003eVersion History\u003c/h1\u003e\n\u003cp\u003e1.47\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~Terminal.does_sixel\u003c/code\u003e now returns \u003ccode\u003eTrue\u003c/code\u003e for SyncTERM using special-case\nmatching of its illegal DA1 response.\u003c/li\u003e\n\u003cli\u003ebugfix: legacy SGR mouse decoder reported no-button motion event (mode 1003) as \u003ccode\u003eLEFT_MOTION\u003c/code\u003e\ninstead of \u003ccode\u003eMOTION\u003c/code\u003e, :ghpull:\u003ccode\u003e398\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ebugfix: match keyboard input \u003ccode\u003e\\x1b\\n\u003c/code\u003e as \u003ccode\u003eKEY_ALT_ENTER\u003c/code\u003e instead of \u003ccode\u003eKEY_CTRL_ALT_J\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.46\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~Terminal.does_sixel\u003c/code\u003e failed to detect DA1 and caused the response to \u0026quot;leak\u0026quot; into\nnext call to :meth:\u003ccode\u003e~Terminal.inkey\u003c/code\u003e for some terminals of unmatched patterns (e.g., kitty).\u003c/li\u003e\n\u003cli\u003eimprove: add new sugar for extended cap-defined styles, like 'clear_scrollback' (common),\n'strikethrough', and 'overline' (not common).\u003c/li\u003e\n\u003cli\u003eimprove: Truecolor support by unique TERM, improves remote sessions like SSH that do not forward\n\u003ccode\u003eCOLORTERM\u003c/code\u003e, and, for the few terminals that do not respond to XTGETTCAP request for \u003ccode\u003eRGB\u003c/code\u003e:\n(kitty).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.45\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: name consistency of kitty keyboard modifiers :ghpull:\u003ccode\u003e390\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.44\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eimprove: reduce errant XTGETTCAP output for Terminal.app and ConEmu.exe :ghpull:\u003ccode\u003e385\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.43\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression of XTGETTCAP responses leaking into first call for empty/non-response\nterminals (libvte/Gnome Terminal), in versions 1.40 to 1.42 :ghpull:\u003ccode\u003e383\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.42\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression in :meth:\u003ccode\u003e~.Terminal.cbreak\u003c/code\u003e and :meth:\u003ccode\u003e~.Terminal.raw\u003c/code\u003e were not thread-safe\nbroken in versions 1.40 and 1.41, remove signal ignore of SIGTTOU :ghissue:\u003ccode\u003e380\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.41\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~.Terminal.get_location\u003c/code\u003e broken in 1.40, returned a generator instead of a tuple.\n:ghissue:\u003ccode\u003e378\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.40\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eimproved: jinxed_ is \u003cstrong\u003enow required on all platforms\u003c/strong\u003e, providing a curses-free and\n\u003ccode\u003esingleton-free \u0026lt;https://jinxed.readthedocs.io/en/stable/capabilities.html#singleton-free\u0026gt;\u003c/code\u003e_\nimplementation of the subset of curses_ used by blessed.  The jinxed_ 1.5.0 release provides a\nterminal \u003ccode\u003ecapability database \u0026lt;https://jinxed.readthedocs.io/en/stable/capabilities.html#database\u0026gt;\u003c/code\u003e of 45 terminals and their\ncommon aliases.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eimproved: Class initialization of :class:\u003ccode\u003e~.Terminal()\u003c/code\u003e now uses \u003ccode\u003eXTGETTCAP\u003c/code\u003e_ to determine\npreferred terminal name \u003ccode\u003eTN\u003c/code\u003e, 24-bit color support \u003ccode\u003eRGB\u003c/code\u003e, number of colors \u003ccode\u003eCo\u003c/code\u003e, \u003ccode\u003eitalic\u003c/code\u003e,\nand \u003ccode\u003eblink\u003c/code\u003e capabilities.\u003c/p\u003e\n\u003cp\u003eThis improves detection of Terminal \u003ccode\u003ekind\u003c/code\u003e and \u003ccode\u003enumber_of_colors\u003c/code\u003e over protocols like serial\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/jquast/blessed/commits\"\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.8 to 1.43.50\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a8ae7f0619b16600dfb006b07c55c3e276cbf21a\"\u003e\u003ccode\u003ea8ae7f0\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.50'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b8c36a990c84df2cdec68b0af03194c619e3e8f1\"\u003e\u003ccode\u003eb8c36a9\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.50\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/fa19980a5c4eee55479fb56b444dc785a6e6b988\"\u003e\u003ccode\u003efa19980\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/2ce2fd5ac8a6e5069465b4eface2938a940bc8b2\"\u003e\u003ccode\u003e2ce2fd5\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d2937da5351e7da82f983c2c572ba35615746b62\"\u003e\u003ccode\u003ed2937da\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/159cb6abdba69c6a433ad2b83920e850643a85cc\"\u003e\u003ccode\u003e159cb6a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.49\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2b8f4d84ae0fb264813e0997f3e510d517b4a1ab\"\u003e\u003ccode\u003e2b8f4d8\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/aa40f37ebe773ef7e8aadbeffee37aeaec8a29c2\"\u003e\u003ccode\u003eaa40f37\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.48'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/652b573c3d4853497e60f983ff2938d2c4efbb4e\"\u003e\u003ccode\u003e652b573\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.48' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/13cce5d163edd8e436f51d61c9fde9619c48993b\"\u003e\u003ccode\u003e13cce5d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.48\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.8...1.43.50\"\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.8 to 1.43.50\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/42b0340e335b1f633be78fa7e59832bb37951a68\"\u003e\u003ccode\u003e42b0340\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.50'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/febd30f4a24b77afe9ef211aad0675453d621618\"\u003e\u003ccode\u003efebd30f\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.50\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/31af253ee49bea34214380b92e7d0152d5f69fa4\"\u003e\u003ccode\u003e31af253\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e179889d6e2bc604b77b9785735d336612e7108a\"\u003e\u003ccode\u003ee179889\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eceb63d43b437b7e5cc67251c07bdb583ee845bd\"\u003e\u003ccode\u003eeceb63d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3749\"\u003e#3749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eecee80c7891c35f2f60ec00d7c4fa81b5fce388\"\u003e\u003ccode\u003eeecee80\u003c/code\u003e\u003c/a\u003e Bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3745\"\u003e#3745\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7d6402f9d49dfa0a873f07b57b888b8d5158738c\"\u003e\u003ccode\u003e7d6402f\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/10f305e588ce4ebe24dd0c8d8ff0e825782bbd85\"\u003e\u003ccode\u003e10f305e\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/2b632ee6822a4f254a02aae6e37b479ae77b688f\"\u003e\u003ccode\u003e2b632ee\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.49\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7ef2356e4892dfb360bddfb0fba8632ac8a59797\"\u003e\u003ccode\u003e7ef2356\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.8...1.43.50\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.4.22 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.06.17\"\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 `django` from 5.2.14 to 6.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/e2a424605ac2e7e6e799496542fb2997207e2f23\"\u003e\u003ccode\u003ee2a4246\u003c/code\u003e\u003c/a\u003e [6.0.x] Bumped version for 6.0.7 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/a5de13f1491f1dbf2bb0ad9b91570524ebbc8acd\"\u003e\u003ccode\u003ea5de13f\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-53878 -- Prevented newlines from being accepted in Dom...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/38dfbd27d7d4f4e6eaa087d7a90f2613fbf55b3a\"\u003e\u003ccode\u003e38dfbd2\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-53877 -- Prevented heap buffer over-read when creating...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/64f9a2b2283fde3ec69fb0dfe441cf0f6f411ba3\"\u003e\u003ccode\u003e64f9a2b\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-48588 -- Prevented caching of responses that set cooki...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c26957a58241037f5849171f35177b95c7ec6660\"\u003e\u003ccode\u003ec26957a\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed flatpages synopsis in docs.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/0b60f44b77510c00ca79403560987cfbaf5a0037\"\u003e\u003ccode\u003e0b60f44\u003c/code\u003e\u003c/a\u003e [6.0.x] Added FILE_UPLOAD_DIRECTORY_PERMISSIONS to docs settings index.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/d928e3060b258fcd002c80d80bb40390efc988db\"\u003e\u003ccode\u003ed928e30\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37172\"\u003e#37172\u003c/a\u003e -- Linked to upload handlers section in FILE_UPLOAD_* se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/e18935cc265aa30079b9c2d280e53cfb91679bba\"\u003e\u003ccode\u003ee18935c\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37158\"\u003e#37158\u003c/a\u003e -- Reordered the contribution checklist sections.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/490eb9cfb68848b88c91f2b6c75d57e2620c7304\"\u003e\u003ccode\u003e490eb9c\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed document referenced in multiple toctrees warning in docs/intern...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/748a9b53c5864f87f4501378d2748199ff0063bb\"\u003e\u003ccode\u003e748a9b5\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed duplicate target name in docs/internals/howto-release-django.txt.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/5.2.14...6.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth` from 65.14.3 to 65.18.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-filter` from 25.2 to 26.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst\"\u003edjango-filter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 26.1 (2026-07-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded testing for Django 6.1.\u003c/p\u003e\n\u003cp\u003eDRF integration will require the upcoming DRF v3.18.\nSee \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded testing against Python 3.14.\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/carltongibson/django-filter/commit/52c3c0f21ef8fe281982ec0e95a3675cd8402214\"\u003e\u003ccode\u003e52c3c0f\u003c/code\u003e\u003c/a\u003e Set date and bump version for 26.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/6a3222aaf83170df0f967423444d5312b99a3d69\"\u003e\u003ccode\u003e6a3222a\u003c/code\u003e\u003c/a\u003e Add testing for Python 3.14.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/aa3bd8e87136d4730f4eb44b3386e52c218bcf66\"\u003e\u003ccode\u003eaa3bd8e\u003c/code\u003e\u003c/a\u003e Added testing against Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/ec717ea11378a4dc003cbe2f77b5211d8815a0b6\"\u003e\u003ccode\u003eec717ea\u003c/code\u003e\u003c/a\u003e Correct Language header in Greek locale file (el) (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1751\"\u003e#1751\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/31b297ca2414218052476ba458c4d1eedc0a0f99\"\u003e\u003ccode\u003e31b297c\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1733\"\u003e#1733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/590c0a3e7d73fafa4fb25df45b53fcc79258d09f\"\u003e\u003ccode\u003e590c0a3\u003c/code\u003e\u003c/a\u003e Fix version range for Django 6.0 (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1731\"\u003e#1731\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/6204bc4eb75edf7ba766fc256d72a68fa80c3029\"\u003e\u003ccode\u003e6204bc4\u003c/code\u003e\u003c/a\u003e Added release date for v25.2.\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/carltongibson/django-filter/compare/25.2...26.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-js-asset` from 3.1.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/feincms/django-js-asset/blob/main/CHANGELOG.rst\"\u003edjango-js-asset's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. _changelog:\u003c/p\u003e\n\u003ch1\u003eChange log\u003c/h1\u003e\n\u003cp\u003eNext version\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Fixed ``js_asset.Media`` crashing with an ``AttributeError`` when rendering an\n  asset that only implements Django's plain ``__html__`` contract (neither a\n  ``MediaAsset`` nor one of our ``ImportMap``/``JSON`` types). Such assets now\n  fall back to ``__html__()`` exactly like ``django.forms.Media`` does; the\n  nonce cannot be threaded into an opaque ``__html__`` asset, same as with stock\n  Django.\n- Corrected the docs around Django 6.1 support. Thanks James Bligh!\n- Finally set up a documentation site at Read the Docs for django-js-asset.\n\u003cp\u003e4.0 (2026-06-11)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eThis is a major release. Most code keeps working unchanged and the rendered\nHTML is the same, but \u003cstrong\u003eif you use import maps the upgrade is not automatic\u003c/strong\u003e --\nsee the import-map note at the end.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003ejs_asset.Media\u003c/code\u003e, a \u003ccode\u003edjango.forms.Media\u003c/code\u003e subclass with two extra\nabilities. First, it merges every embedded \u003ccode\u003eImportMap\u003c/code\u003e into a single\n\u003ccode\u003e\u0026lt;script type=\u0026quot;importmap\u0026quot;\u0026gt;\u003c/code\u003e rendered before any other script -- this\nreplaces the old global \u003ccode\u003eimportmap\u003c/code\u003e object and works no matter how many\nmedia objects Django combines. Second, it applies a request-scoped CSP nonce\nto the tags it renders. It implements \u003ccode\u003e__add__\u003c/code\u003e \u003cstrong\u003eand\u003c/strong\u003e \u003ccode\u003e__radd__\u003c/code\u003e, so it\nkeeps its type -- and its nonce -- when combined with a plain \u003ccode\u003eforms.Media\u003c/code\u003e\nfrom either side (e.g. while Django collects form and widget media). The nonce\ncan be passed to the constructor (\u003ccode\u003enonce=\u003c/code\u003e), copied onto a clone with\n\u003ccode\u003ewith_nonce()\u003c/code\u003e, or passed to \u003ccode\u003erender(nonce=...)\u003c/code\u003e; \u003ccode\u003erender()\u003c/code\u003e also accepts\n\u003ccode\u003eattrs={\u0026quot;nonce\u0026quot;: ...}\u003c/code\u003e so it plugs straight into Django 6.2's\n\u003ccode\u003e{% csp_nonce_attr %}\u003c/code\u003e tag. \u003ccode\u003eMedia.from_media()\u003c/code\u003e wraps an existing\n\u003ccode\u003eforms.Media\u003c/code\u003e instance (e.g. \u003ccode\u003eform.media\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eJS\u003c/code\u003e and \u003ccode\u003eCSS\u003c/code\u003e now \u003cem\u003eproduce\u003c/em\u003e Django's own \u003ccode\u003eScript\u003c/code\u003e and \u003ccode\u003eStylesheet\u003c/code\u003e\nobjects (backported via \u003ccode\u003ejs_asset._compat\u003c/code\u003e on Django versions that lack\nthem) instead of being standalone dataclasses. They therefore share merge\nbuckets with native Django assets and with bare path strings, so the same\nfile is no longer rendered more than once when \u003ccode\u003ejs_asset\u003c/code\u003e assets, plain\nstrings and Django's auto-wrapped assets meet in \u003ccode\u003eforms.Media.merge()\u003c/code\u003e.\n\u003ccode\u003eisinstance(x, JS)\u003c/code\u003e / \u003ccode\u003eisinstance(x, CSS)\u003c/code\u003e keep working (via a metaclass).\nInline CSS (\u003ccode\u003eCSS(src, inline=True)\u003c/code\u003e) is rendered by a small dedicated\n\u003ccode\u003eInlineStyle\u003c/code\u003e asset. Rendered output is unchanged.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eScript\u003c/code\u003e, \u003ccode\u003eStylesheet\u003c/code\u003e, \u003ccode\u003eMediaAsset\u003c/code\u003e and \u003ccode\u003eInlineStyle\u003c/code\u003e can now be\nimported from \u003ccode\u003ejs_asset\u003c/code\u003e -- prefer these in \u003ccode\u003eisinstance\u003c/code\u003e checks over\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/feincms/django-js-asset/commit/7c024a3ef83a1c2951f2ab3925e85b81ebbc8bc0\"\u003e\u003ccode\u003e7c024a3\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/59aa7e529ef7052c3c1710e8a673c14c852334f6\"\u003e\u003ccode\u003e59aa7e5\u003c/code\u003e\u003c/a\u003e Fix \u003cstrong\u003ehtml\u003c/strong\u003e objects in Media\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b3c515c793185d96d43124a8239267a535bdd18f\"\u003e\u003ccode\u003eb3c515c\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/8a343389d9500999bd3397a1d1c44cb5ee709a00\"\u003e\u003ccode\u003e8a34338\u003c/code\u003e\u003c/a\u003e Address review comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b7d05eb0f4d7548219b06eb4057fe908c2e85a23\"\u003e\u003ccode\u003eb7d05eb\u003c/code\u003e\u003c/a\u003e Remove the global importmap and update the guidance accordingly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/3213b9bd209527e989c0fb8f552e7941407460cc\"\u003e\u003ccode\u003e3213b9b\u003c/code\u003e\u003c/a\u003e Increase interoperability with Django's own object-based media assets\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/cfe3b529f22bd8dcd1abf193aa4af0f1e96681be\"\u003e\u003ccode\u003ecfe3b52\u003c/code\u003e\u003c/a\u003e Add a Media subclass with import-map merging and CSP nonce support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/6708307bd5e1d5cc18cb58da63e2c6ace07e653c\"\u003e\u003ccode\u003e6708307\u003c/code\u003e\u003c/a\u003e dj62 does not exist yet as a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/9961d4871605432a9923d2a844d51d9efca47c73\"\u003e\u003ccode\u003e9961d48\u003c/code\u003e\u003c/a\u003e Run tests with newer Django and Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/f77abf57e6754612793c9976305f704f61dfceff\"\u003e\u003ccode\u003ef77abf5\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/feincms/django-js-asset/issues/20\"\u003e#20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/feincms/django-js-asset/compare/3.1.2...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-maintenance-mode` from 0.22.0 to 0.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fabiocaccamo/django-maintenance-mode/releases\"\u003edjango-maintenance-mode's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.23.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePython 3.14\u003c/code\u003e and \u003ccode\u003eDjango 6.0\u003c/code\u003e support.\u003c/li\u003e\n\u003cli\u003eAdd scheduled maintenance mode support: \u003ccode\u003eset_maintenance_mode(True, start=..., end=...)\u003c/code\u003e and \u003ccode\u003emanage.py maintenance_mode on --start ... --end ...\u003c/code\u003e (maintenance mode automatically activates/deactivates itself based on the scheduled datetimes). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/64\"\u003e#64\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote for custom state backends consumers: \u003ccode\u003eget_value()\u003c/code\u003e now returns \u003ccode\u003ebool\u003c/code\u003e or \u003ccode\u003edict\u003c/code\u003e (scheduled state), and the state file format is extended accordingly (running \u003ccode\u003emaintenance_mode off\u003c/code\u003e restores the plain bool format).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_STAFF_USER\u003c/code\u003e and \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_SUPERUSER\u003c/code\u003e settings to override the \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_AUTHENTICATED_USER\u003c/code\u003e behavior for staff users and superusers (if \u003ccode\u003eNone\u003c/code\u003e, default, they inherit the \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_AUTHENTICATED_USER\u003c/code\u003e behavior). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/191\"\u003e#191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003eMAINTENANCE_MODE_RESPONSE_TYPE\u003c/code\u003e to be the path of a function that receives the request and returns the response type (\u003ccode\u003e\u0026quot;html\u0026quot;\u003c/code\u003e or \u003ccode\u003e\u0026quot;json\u0026quot;\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/204\"\u003e#204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTENANCE_MODE_GET_AUTHENTICATED_USER\u003c/code\u003e setting to support non-session authentication (eg. \u003ccode\u003eJWT\u003c/code\u003e / token authentication with \u003ccode\u003edjango-rest-framework\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/233\"\u003e#233\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove middleware position docs. \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/251\"\u003e#251\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/fabiocaccamo/django-maintenance-mode/blob/main/CHANGELOG.md\"\u003edjango-maintenance-mode's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/fabiocaccamo/django-maintenance-mode/releases/tag/0.23.0\"\u003e0.23.0\u003c/a\u003e - 2026-07-13\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePython 3.14\u003c/code\u003e and \u003ccode\u003eDjango 6.0\u003c/code\u003e support.\u003c/li\u003e\n\u003cli\u003eAdd scheduled maintenance mode support: \u003ccode\u003eset_maintenance_mode(True, start=..., end=...)\u003c/code\u003e and \u003ccode\u003emanage.py maintenance_mode on --start ... --end ...\u003c/code\u003e (maintenance mode automatically activates/deactivates itself based on the scheduled datetimes). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/64\"\u003e#64\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote for custom state backends consumers: \u003ccode\u003eget_value()\u003c/code\u003e now returns \u003ccode\u003ebool\u003c/code\u003e or \u003ccode\u003edict\u003c/code\u003e (scheduled state), and the state file format is extended accordingly (running \u003ccode\u003emaintenance_mode off\u003c/code\u003e restores the plain bool format).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTE...\n\n_Description has been truncated_","html_url":"https://github.com/artursampaio-gc/goproduct/pull/26","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/artursampaio-gc%2Fgoproduct/issues/26","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/26/packages"},{"uuid":"4945586489","node_id":"PR_kwDOSftIMc70sZjY","number":80,"state":"open","title":"chore(deps)(deps): bump the python-patch-minor group across 1 directory with 37 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-22T04:55:23.000Z","updated_at":"2026-07-22T04:55:24.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): bump","group_name":"python-patch-minor","update_count":37,"packages":[{"name":"fastapi","old_version":"0.136.1","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.51.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"python-multipart","old_version":"0.0.31","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"alembic","old_version":"1.18.4","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"pymupdf","old_version":"1.24.10","new_version":"1.28.0","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"pypdf","old_version":"6.13.3","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"pdfplumber","old_version":"0.11.9","new_version":"0.11.10","repository_url":"https://github.com/jsvine/pdfplumber"},{"name":"openai","old_version":"2.32.0","new_version":"2.46.0","repository_url":"https://github.com/openai/openai-python"},{"name":"google-genai","old_version":"2.10.0","new_version":"2.13.0","repository_url":"https://github.com/googleapis/python-genai"},{"name":"google-cloud-vision","old_version":"3.14.0","new_version":"3.15.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"playwright","old_version":"1.60.0","new_version":"1.61.0","repository_url":"https://github.com/microsoft/playwright-python"},{"name":"ruff","old_version":"0.15.14","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"coverage","old_version":"7.14.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"httpx2","old_version":"2.4.0","new_version":"2.7.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"pip-audit","old_version":"2.10.0","new_version":"2.10.1","repository_url":"https://github.com/pypa/pip-audit"},{"name":"anyio","old_version":"4.13.0","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"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":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"google-api-core","old_version":"2.30.3","new_version":"2.32.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-api-python-client","old_version":"2.196.0","new_version":"2.198.0","repository_url":"https://github.com/googleapis/google-api-python-client"},{"name":"google-auth","old_version":"2.53.0","new_version":"2.56.2","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"greenlet","old_version":"3.5.1","new_version":"3.5.3","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"grpcio","old_version":"1.80.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"grpcio-status","old_version":"1.71.2","new_version":"1.82.1"},{"name":"idna","old_version":"3.16","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"jiter","old_version":"0.15.0","new_version":"0.16.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"proto-plus","old_version":"1.28.0","new_version":"1.28.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pypdfium2","old_version":"5.8.0","new_version":"5.12.1","repository_url":"https://github.com/pypdfium2-team/pypdfium2"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.69.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"websockets","old_version":"16.0","new_version":"16.1.1","repository_url":"https://github.com/python-websockets/websockets"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-patch-minor group with 37 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.139.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.51.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.31` | `0.0.32` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.18.4` | `1.18.5` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.51` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.24.10` | `1.28.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.3` | `6.14.2` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.9` | `0.11.10` |\n| [openai](https://github.com/openai/openai-python) | `2.32.0` | `2.46.0` |\n| [google-genai](https://github.com/googleapis/python-genai) | `2.10.0` | `2.13.0` |\n| [google-cloud-vision](https://github.com/googleapis/google-cloud-python) | `3.14.0` | `3.15.0` |\n| [playwright](https://github.com/microsoft/playwright-python) | `1.60.0` | `1.61.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.14` | `0.15.22` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.0` | `7.15.2` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.4.0` | `2.7.0` |\n| [pip-audit](https://github.com/pypa/pip-audit) | `2.10.0` | `2.10.1` |\n| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.2` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.7.22` |\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| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [google-api-core](https://github.com/googleapis/google-cloud-python) | `2.30.3` | `2.32.0` |\n| [google-api-python-client](https://github.com/googleapis/google-api-python-client) | `2.196.0` | `2.198.0` |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.53.0` | `2.56.2` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.1` | `3.5.3` |\n| [grpcio](https://github.com/grpc/grpc) | `1.80.0` | `1.82.1` |\n| [grpcio-status](https://grpc.io) | `1.71.2` | `1.82.1` |\n| [idna](https://github.com/kjd/idna) | `3.16` | `3.18` |\n| [jiter](https://github.com/pydantic/jiter) | `0.15.0` | `0.16.0` |\n| [proto-plus](https://github.com/googleapis/google-cloud-python) | `1.28.0` | `1.28.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.47.0` |\n| [pypdfium2](https://github.com/pypdfium2-team/pypdfium2) | `5.8.0` | `5.12.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.69.0` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `16.0` | `16.1.1` |\n\n\nUpdates `fastapi` from 0.136.1 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!-- 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/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.136.1...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.47.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\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\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.47.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 `python-multipart` from 0.0.31 to 0.0.32\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.32\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace per-byte partial-boundary scan with rfind lookbehind 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/python-multipart/pull/300\"\u003eKludex/python-multipart#300\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/python-multipart/compare/0.0.31...0.0.32\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\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/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.32 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary scanning for CR/LF-dense part data \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003e#300\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/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6\"\u003e\u003ccode\u003e238ead6\u003c/code\u003e\u003c/a\u003e Version 0.0.32 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af\"\u003e\u003ccode\u003e8672979\u003c/code\u003e\u003c/a\u003e Replace per-byte partial-boundary scan with rfind lookbehind (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df\"\u003e\u003ccode\u003e8190779\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 7 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/301\"\u003e#301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44\"\u003e\u003ccode\u003e0d3c086\u003c/code\u003e\u003c/a\u003e Use uv package ecosystem for Dependabot (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.18.4 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 `sqlalchemy` from 2.0.49 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 `pydantic` from 2.13.2 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\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/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\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/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.13.2...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 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/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/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.33.1...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.24.10 to 1.28.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.28.0\u003c/strong\u003e (2026-06-29)\u003c/p\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4114 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4114\u0026gt;\u003c/code\u003e_: ComboBox choice_values full of empty strings despite PDF having valid choices.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4950 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4950\u0026gt;\u003c/code\u003e_: remove_rotation() raises ValueError on widgets with empty/infinite rects\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e5001 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/5001\u0026gt;\u003c/code\u003e_: Formulae incorrectly rendered as black boxes\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e5033 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/5033\u0026gt;\u003c/code\u003e_: Annot.set_rotation(0) followed by Annot.update() throws AttributeError\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse MuPDF-1.28.0.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.\u003cstrong\u003einit\u003c/strong\u003e(): new arg \u003ccode\u003earchive\u003c/code\u003e to support documents with archives.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.convert_to_pdf(): also generate links.\u003c/li\u003e\n\u003cli\u003eFixed MacOS x64 platform tag - used to be macosx_10_9_x86_64, but we actually\nrequire MacOS 10.15, so platform tag is now macosx_10_15_x86_64.\u003c/li\u003e\n\u003cli\u003eSupport Windows builds with free thread python.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.save() now saves non-PDF documents in PDF format.\u003c/li\u003e\n\u003cli\u003eNew method pymupdf.Document.apply_css().\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\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/pymupdf/PyMuPDF/commit/e9cdfc9e7fe3260efcc9d28713903f075ab05bce\"\u003e\u003ccode\u003ee9cdfc9\u003c/code\u003e\u003c/a\u003e changes.txt: fix mupdf version number.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/629a3582fd31d352f042c9f444b984d8ed22e449\"\u003e\u003ccode\u003e629a358\u003c/code\u003e\u003c/a\u003e docs/document.rst: add new in 1.28.0 to \u003cstrong\u003einit\u003c/strong\u003e's archive.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/7264f27eecc53dcfe0401d3ba97c10b1aa97669d\"\u003e\u003ccode\u003e7264f27\u003c/code\u003e\u003c/a\u003e README.md: updated example conversion from md to pdf.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/119a0bca69156375494eacff9725bb0221fa9b19\"\u003e\u003ccode\u003e119a0bc\u003c/code\u003e\u003c/a\u003e docs/document.rst: document that save() now also works for non-pdf documents.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5ebfc4c03195b56e5ed62d45c895823354b92af7\"\u003e\u003ccode\u003e5ebfc4c\u003c/code\u003e\u003c/a\u003e setup.py: use mupdf-1.28.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/14d8fac83f51b6659015066d5a57ce72b9209438\"\u003e\u003ccode\u003e14d8fac\u003c/code\u003e\u003c/a\u003e changes.txt: removed bogus \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4423\"\u003e#4423\u003c/a\u003e entry, added \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/5033\"\u003e#5033\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d9616168f3d23779b7289acdb0950544f6795031\"\u003e\u003ccode\u003ed961616\u003c/code\u003e\u003c/a\u003e tests/test_annots.py: added test_5033() for setRect() vs set_rect() bug.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d91bd63304edc6685c9561e923e2fda30d603e9f\"\u003e\u003ccode\u003ed91bd63\u003c/code\u003e\u003c/a\u003e changes.txt: added note about save() and non-pdf documents.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/fd409de6680d9a4532ac07560d724d7dc2833b43\"\u003e\u003ccode\u003efd409de\u003c/code\u003e\u003c/a\u003e .github/workflows/: updated to use mupdf branch 1.28.x.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/04aa7dd994f282b1835ac01784b80bd66ce4b09c\"\u003e\u003ccode\u003e04aa7dd\u003c/code\u003e\u003c/a\u003e Remove old setRect Name\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.10...1.28.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.13.3 to 6.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/releases\"\u003epypdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.14.2, 2026-06-23\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3892\"\u003e#3892\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.1...6.14.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.1, 2026-06-23\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.0...6.14.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.0, 2026-06-22\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApply general limit for requested image size (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3888\"\u003e#3888\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSpeed up recovery when reading broken cross-reference table (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3887\"\u003e#3887\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCheck whether image is displayed on a given page (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3738\"\u003e#3738\u003c/a\u003e) by \u003ca href=\"https://github.com/andreasntr\"\u003e\u003ccode\u003e@​andreasntr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSeveral fixes by \u003ca href=\"https://github.com/metsw24-max\"\u003e\u003ccode\u003e@​metsw24-max\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.0\"\u003eFull Changelog\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/py-pdf/pypdf/blob/main/CHANGELOG.md\"\u003epypdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.14.2, 2026-06-23\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3892\"\u003e#3892\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.1...6.14.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.1, 2026-06-23\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.0...6.14.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.0, 2026-06-22\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApply general limit for requested image size (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3888\"\u003e#3888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSpeed up recovery when reading broken cross-reference table (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3887\"\u003e#3887\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCheck whether image is displayed on a given page (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3738\"\u003e#3738\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSeveral fixes\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.0\"\u003eFull Changelog\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/py-pdf/pypdf/commit/2266ee853d1420c8774f6657ce3b8f1502cac713\"\u003e\u003ccode\u003e2266ee8\u003c/code\u003e\u003c/a\u003e REL: 6.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/5a33a46416aa1ae6c025ff90a3cca57631fdafd2\"\u003e\u003ccode\u003e5a33a46\u003c/code\u003e\u003c/a\u003e SEC: Avoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/1ee4e58bea04bfca119c7c2fe29d8167dcddcb81\"\u003e\u003ccode\u003e1ee4e58\u003c/code\u003e\u003c/a\u003e REL: 6.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/ec3b14596186c40caca7cf8ab9b2155203e01b5b\"\u003e\u003ccode\u003eec3b145\u003c/code\u003e\u003c/a\u003e SEC: Detect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/c6cd82e82e4906ff29eeeea0e5b81ae38b00be9c\"\u003e\u003ccode\u003ec6cd82e\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed inline image settings in _read_inline_image (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3889\"\u003e#3889\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/0ae42ba0f683e26c76968529a94905587c181010\"\u003e\u003ccode\u003e0ae42ba\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed page label entries in get_label_from_nums (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3884\"\u003e#3884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/50617b5fae0138a30995eebec169d7e63e3ed797\"\u003e\u003ccode\u003e50617b5\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed Tm operand count in extract_text (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3877\"\u003e#3877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/86e5a82471587570c269194e5220d588b06a1119\"\u003e\u003ccode\u003e86e5a82\u003c/code\u003e\u003c/a\u003e MAINT: Improve readability (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3874\"\u003e#3874\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/83cb25f33f41abcbec59e7866e9530b93b7c1ae3\"\u003e\u003ccode\u003e83cb25f\u003c/code\u003e\u003c/a\u003e DEV: Fix sample files commit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/06588ecb5127fe08045e10fa0f227f231ad259ee\"\u003e\u003ccode\u003e06588ec\u003c/code\u003e\u003c/a\u003e REL: 6.14.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pdfplumber` from 0.11.9 to 0.11.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/releases\"\u003epdfplumber's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.11.10\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\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/jsvine/pdfplumber/blob/stable/CHANGELOG.md\"\u003epdfplumber's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.11.10] — 2026-06-14\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\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/jsvine/pdfplumber/commit/7d4f2f582f2d99f9e60ba522fdf7afd2f6d54c62\"\u003e\u003ccode\u003e7d4f2f5\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b2f8f6fd7f7f92b73d2f1f9350b6e7e9d2\"\u003e\u003ccode\u003e1e6de0b\u003c/code\u003e\u003c/a\u003e Upgrade dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/91b2b6cbca6efd8b94cc44f942385b1047f00661\"\u003e\u003ccode\u003e91b2b6c\u003c/code\u003e\u003c/a\u003e Appease linter/coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/98041536932ce85d18a1fba80d9db0686b831d9d\"\u003e\u003ccode\u003e9804153\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ebafd6e9cb81afcfee0e4d79d119d3058490467a\"\u003e\u003ccode\u003eebafd6e\u003c/code\u003e\u003c/a\u003e Update Python versions in setup.py classifiers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/fc2c9a9001415ebf7b7221eb89db4cb7d2f65fc8\"\u003e\u003ccode\u003efc2c9a9\u003c/code\u003e\u003c/a\u003e Fix list of tested Python versions in README \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1355\"\u003e#1355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff65d4c92b648bf306e3e782e481258b6c6d\"\u003e\u003ccode\u003e07a5ff6\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251230 to 20260107\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ec96f7256dde1ccad940c19bf9eb97ddb98cfae6\"\u003e\u003ccode\u003eec96f72\u003c/code\u003e\u003c/a\u003e Update Makefile\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jsvine/pdfplumber/compare/v0.11.9...v0.11.10\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.32.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/{...\n\n_Description has been truncated_","html_url":"https://github.com/skin306152-star/pearnly-app/pull/80","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/skin306152-star%2Fpearnly-app/issues/80","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/80/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":"4817205032","node_id":"PR_kwDOLs4Ev87uPrXS","number":244,"state":"open","title":"deps(deps-dev): bump the python-development group with 2 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-06T08:08:49.000Z","updated_at":"2026-07-06T08:10:28.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(deps-dev): bump","group_name":"python-development","update_count":2,"packages":[{"name":"responses","old_version":"0.26.1","new_version":"0.26.2","repository_url":"https://github.com/getsentry/responses"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-development group with 2 updates: [responses](https://github.com/getsentry/responses) and [typing-extensions](https://github.com/python/typing_extensions).\n\nUpdates `responses` from 0.26.1 to 0.26.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/responses/releases\"\u003eresponses's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.26.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault headers (such as \u003ccode\u003eContent-Type\u003c/code\u003e, \u003ccode\u003eDate\u003c/code\u003e and \u003ccode\u003eServer\u003c/code\u003e) are now stripped\nfrom recorded files regardless of header name case. Previously, responses recorded from\nservers that send lowercase header names (for example over HTTP/2) kept these redundant\nheaders in the generated file.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003equery_param_matcher\u003c/code\u003e mutating the caller's params dict when numeric\nvalues are provided. See \u003ca href=\"https://redirect.github.com/getsentry/responses/issues/801\"\u003e#801\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/getsentry/responses/blob/master/CHANGES\"\u003eresponses's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.26.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault headers (such as \u003ccode\u003eContent-Type\u003c/code\u003e, \u003ccode\u003eDate\u003c/code\u003e and \u003ccode\u003eServer\u003c/code\u003e) are now stripped\nfrom recorded files regardless of header name case. Previously, responses recorded from\nservers that send lowercase header names (for example over HTTP/2) kept these redundant\nheaders in the generated file.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003equery_param_matcher\u003c/code\u003e mutating the caller's params dict when numeric\nvalues are provided. See \u003ca href=\"https://redirect.github.com/getsentry/responses/issues/801\"\u003e#801\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/getsentry/responses/commit/31d28eb21745379bd1ad2154838187e23aa92a3e\"\u003e\u003ccode\u003e31d28eb\u003c/code\u003e\u003c/a\u003e release: 0.26.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/6fb610d1ca8f4bf35af8bfa5d0ac4a97fd53a99c\"\u003e\u003ccode\u003e6fb610d\u003c/code\u003e\u003c/a\u003e Fix CHANGES (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/802\"\u003e#802\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/aae1d471f3ef5c120c99a178a621e8276c164ab6\"\u003e\u003ccode\u003eaae1d47\u003c/code\u003e\u003c/a\u003e Set license format to SPDX identifier in setup.py (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/803\"\u003e#803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/a19add7777d7d0c64eeb364f6cc9de624c33f4f8\"\u003e\u003ccode\u003ea19add7\u003c/code\u003e\u003c/a\u003e fix: query_param_matcher no longer mutates the caller's params dict (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/801\"\u003e#801\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/88e15db329b8731d27210fe73e11056210309829\"\u003e\u003ccode\u003e88e15db\u003c/code\u003e\u003c/a\u003e Strip default headers from recorded files case-insensitively (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/798\"\u003e#798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/1d48f2f202a5a9cdbb008aa9de2e255cbe897c81\"\u003e\u003ccode\u003e1d48f2f\u003c/code\u003e\u003c/a\u003e docs: fix typos (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/800\"\u003e#800\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/853e7d2ddde86315d2dd936185de427b595499bc\"\u003e\u003ccode\u003e853e7d2\u003c/code\u003e\u003c/a\u003e docs: update tox Python version examples (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/797\"\u003e#797\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/705067bccc9bffbe0a2a69aff6e12e812fe36a7a\"\u003e\u003ccode\u003e705067b\u003c/code\u003e\u003c/a\u003e Merge branch 'release/0.26.1'\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/getsentry/responses/compare/0.26.1...0.26.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.15.0 to 4.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.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/softwareone-platform/swo-marketplace-cli/pull/244","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwareone-platform%2Fswo-marketplace-cli/issues/244","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/244/packages"},{"uuid":"4814778822","node_id":"PR_kwDOOHh4U87uIDjT","number":166,"state":"open","title":"chore(deps): Bump the python-minor-and-patch group across 1 directory with 12 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-05T23:06:42.000Z","updated_at":"2026-07-05T23:08:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","group_name":"python-minor-and-patch","update_count":12,"packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"pytest","old_version":"9.0.2","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"nox","old_version":"2026.2.9","new_version":"2026.4.10","repository_url":"https://github.com/wntrblm/nox"},{"name":"ruff","old_version":"0.15.9","new_version":"0.15.20","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pre-commit","old_version":"4.5.1","new_version":"4.6.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"argcomplete","old_version":"3.6.3","new_version":"3.7.0","repository_url":"https://github.com/kislyuk/argcomplete"},{"name":"distlib","old_version":"0.4.0","new_version":"0.4.3","repository_url":"https://github.com/pypa/distlib"},{"name":"filelock","old_version":"3.25.2","new_version":"3.29.5","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"humanize","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"identify","old_version":"2.6.18","new_version":"2.6.19","repository_url":"https://github.com/pre-commit/identify"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"platformdirs","old_version":"4.9.4","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-and-patch group with 12 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.1.1` |\n| [nox](https://github.com/wntrblm/nox) | `2026.2.9` | `2026.4.10` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.9` | `0.15.20` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.6.0` |\n| [argcomplete](https://github.com/kislyuk/argcomplete) | `3.6.3` | `3.7.0` |\n| [distlib](https://github.com/pypa/distlib) | `0.4.0` | `0.4.3` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.25.2` | `3.29.5` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.15.0` | `4.16.0` |\n| [identify](https://github.com/pre-commit/identify) | `2.6.18` | `2.6.19` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.4` | `4.10.0` |\n\n\nUpdates `typing-extensions` from 4.15.0 to 4.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.0.2 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e9.1.0\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.0 (2026-06-13)\u003c/h1\u003e\n\u003ch2\u003eRemovals and backward incompatible breaking changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14533\"\u003e#14533\u003c/a\u003e: When using \u003ccode\u003e--doctest-modules\u003c/code\u003e, autouse fixtures with \u003ccode\u003emodule\u003c/code\u003e, \u003ccode\u003epackage\u003c/code\u003e or \u003ccode\u003esession\u003c/code\u003e scope that are defined inline in Python test modules (not plugins or conftests) will now possibly execute twice.\u003c/p\u003e\n\u003cp\u003eIf this is undesirable, move the fixture definition to a \u003ccode\u003econftest.py\u003c/code\u003e file if possible.\u003c/p\u003e\n\u003cp\u003eTechnical explanation for those interested:\nWhen using \u003c!-- raw HTML omitted --\u003e--doctest-modules\u003c!-- raw HTML omitted --\u003e, pytest possibly collects Python modules twice, once as \u003ccode\u003epytest.Module\u003c/code\u003e and once as a \u003ccode\u003eDoctestModule\u003c/code\u003e (depending on the configuration).\nDue to improvements in pytest's fixture implementation, if e.g. the \u003ccode\u003eDoctestModule\u003c/code\u003e collects a fixture, it is now visible to it only, and not to the \u003ccode\u003eModule\u003c/code\u003e.\nThis means that both need to register the fixtures independently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations (removal in next major release)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/10819\"\u003e#10819\u003c/a\u003e: Added a deprecation warning for class-scoped fixtures defined as instance methods (without \u003ccode\u003e@classmethod\u003c/code\u003e). Such fixtures set attributes on a different instance than the test methods use, leading to unexpected behavior. Use \u003ccode\u003e@classmethod\u003c/code\u003e decorator instead -- by \u003ccode\u003eyastcher\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003e10819\u003c/code\u003e and \u003ccode\u003e14011\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12882\"\u003e#12882\u003c/a\u003e: Calling \u003ccode\u003erequest.getfixturevalue() \u0026lt;pytest.FixtureRequest.getfixturevalue\u0026gt;\u003c/code\u003e during teardown to request a fixture that was not already requested is now deprecated and will become an error in pytest 10.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003edynamic-fixture-request-during-teardown\u003c/code\u003e for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13409\"\u003e#13409\u003c/a\u003e: Using non-\u003ccode\u003e~collections.abc.Collection\u003c/code\u003e iterables (such as generators, iterators, or custom iterable objects) for the \u003ccode\u003eargvalues\u003c/code\u003e parameter in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e and \u003ccode\u003emetafunc.parametrize \u0026lt;pytest.Metafunc.parametrize\u0026gt;\u003c/code\u003e is now deprecated.\u003c/p\u003e\n\u003cp\u003eThese iterables get exhausted after the first iteration,\nleading to tests getting unexpectedly skipped in cases such as running \u003ccode\u003epytest.main()\u003c/code\u003e multiple times,\nusing class-level parametrize decorators,\nor collecting tests multiple times.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eparametrize-iterators\u003c/code\u003e for details and suggestions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13946\"\u003e#13946\u003c/a\u003e: The private \u003ccode\u003econfig.inicfg\u003c/code\u003e attribute is now deprecated.\nUse \u003ccode\u003econfig.getini() \u0026lt;pytest.Config.getini\u0026gt;\u003c/code\u003e to access configuration values instead.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003econfig-inicfg\u003c/code\u003e for more details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14004\"\u003e#14004\u003c/a\u003e: Passing \u003ccode\u003ebaseid\u003c/code\u003e to \u003ccode\u003e~pytest.FixtureDef\u003c/code\u003e or \u003ccode\u003enodeid\u003c/code\u003e strings to fixture registration APIs is now deprecated. These are internal pytest APIs that are used by some plugins.\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/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.2...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `nox` from 2026.2.9 to 2026.4.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/wntrblm/nox/releases\"\u003enox's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2026.04.10 🧹\u003c/h2\u003e\n\u003cp\u003eThis release drops Python 3.8 and adds a \u003ccode\u003e--usage\u003c/code\u003e command for full docstrings. Our \u003ccode\u003e.nox\u003c/code\u003e dir is now ignored by default, virtualenvs are recreated if symlinks are broken (such as after a Python upgrade), and \u003ccode\u003e-t\u003c/code\u003e now selects from all available sessions.\u003c/p\u003e\n\u003cp\u003eWe'd like to thank the following folks who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/scop\"\u003e\u003ccode\u003e@​scop\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Python 3.8 (reapply \u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1004\"\u003e#1004\u003c/a\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/wntrblm/nox/pull/1062\"\u003ewntrblm/nox#1062\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003enox --usage \u0026lt;session\u0026gt;\u003c/code\u003e command to print full docstrings for provided sessions by \u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1064\"\u003ewntrblm/nox#1064\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWrite out \u003ccode\u003e.gitignore\u003c/code\u003e/\u003ccode\u003eCACHEDIR.TAG\u003c/code\u003e to \u003ccode\u003e.nox\u003c/code\u003e dir by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1072\"\u003ewntrblm/nox#1072\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRecreate venv if broken symlinks are present by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1078\"\u003ewntrblm/nox#1078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore default selection for tags and keywords by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1057\"\u003ewntrblm/nox#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMore uv variables set by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1056\"\u003ewntrblm/nox#1056\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore forcecolor falsy by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1073\"\u003ewntrblm/nox#1073\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFully pin actions in composite action by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1080\"\u003ewntrblm/nox#1080\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePin CI to working conda version by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1079\"\u003ewntrblm/nox#1079\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse prek by \u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1065\"\u003ewntrblm/nox#1065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSwitch artifact attestations to actions/attest by \u003ca href=\"https://github.com/scop\"\u003e\u003ccode\u003e@​scop\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1070\"\u003ewntrblm/nox#1070\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse 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/wntrblm/nox/pull/1082\"\u003ewntrblm/nox#1082\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/wntrblm/nox/compare/2026.02.09...2026.04.10\"\u003ehttps://github.com/wntrblm/nox/compare/2026.02.09...2026.04.10\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/wntrblm/nox/blob/main/CHANGELOG.md\"\u003enox's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003e2026.04.10\u003c/h2\u003e\n\u003cp\u003eThis release drops Python 3.8 and adds a \u003ccode\u003e--usage\u003c/code\u003e command for full docstrings.\nOur \u003ccode\u003e.nox\u003c/code\u003e dir is now ignored by default, virtualenvs are recreated if symlinks\nare broken (such as after a Python upgrade), and \u003ccode\u003e-t\u003c/code\u003e now selects from all\navailable sessions.\u003c/p\u003e\n\u003cp\u003eWe'd like to thank the following folks who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/scop\"\u003e\u003ccode\u003e@​scop\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Python 3.8 (reapply \u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1004\"\u003e#1004\u003c/a\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/wntrblm/nox/pull/1062\"\u003ewntrblm/nox#1062\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003enox --usage \u0026lt;session\u0026gt;\u003c/code\u003e command to print full docstrings for provided sessions by \u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1064\"\u003ewntrblm/nox#1064\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWrite out \u003ccode\u003e.gitignore\u003c/code\u003e/\u003ccode\u003eCACHEDIR.TAG\u003c/code\u003e to \u003ccode\u003e.nox\u003c/code\u003e dir by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1072\"\u003ewntrblm/nox#1072\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRecreate venv if broken symlinks are present by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1078\"\u003ewntrblm/nox#1078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore default selection for tags and keywords by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1057\"\u003ewntrblm/nox#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMore uv variables set by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1056\"\u003ewntrblm/nox#1056\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore forcecolor falsy by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1073\"\u003ewntrblm/nox#1073\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFully pin actions in composite action by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1080\"\u003ewntrblm/nox#1080\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePin CI to working conda version by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1079\"\u003ewntrblm/nox#1079\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse prek by \u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1065\"\u003ewntrblm/nox#1065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSwitch artifact attestations to actions/attest by \u003ca href=\"https://github.com/scop\"\u003e\u003ccode\u003e@​scop\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1070\"\u003ewntrblm/nox#1070\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse 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/wntrblm/nox/pull/1082\"\u003ewntrblm/nox#1082\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2026.02.09\u003c/h2\u003e\n\u003cp\u003eThis small release supports uv 0.10's new requirement that \u003ccode\u003e--clear\u003c/code\u003e be passed\nto clear an environment. Python 3.8 support was temporarily re-added since uv\n0.10 still supports 3.8, so nox on 3.8 was affected.\u003c/p\u003e\n\u003cp\u003eWe'd like to thank the following folks who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kai687\"\u003e\u003ccode\u003e@​kai687\u003c/code\u003e\u003c/a\u003e (first contribution)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wu-zhao-min\"\u003e\u003ccode\u003e@​wu-zhao-min\u003c/code\u003e\u003c/a\u003e (first contribution)\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/wntrblm/nox/commit/97e345e6a26bb2c5aacff9cc4327bd4ac1b00ce6\"\u003e\u003ccode\u003e97e345e\u003c/code\u003e\u003c/a\u003e docs: add thanks section (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1083\"\u003e#1083\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/8d5c759d5d3f1f2c80ada8f05cd994c673905898\"\u003e\u003ccode\u003e8d5c759\u003c/code\u003e\u003c/a\u003e chore: prepare for 2026.04.10 (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1081\"\u003e#1081\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/2577f31eb4d6d94f18157c444464fdd1e4a7e3df\"\u003e\u003ccode\u003e2577f31\u003c/code\u003e\u003c/a\u003e ci: add zizmor (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1082\"\u003e#1082\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/b6a61563737b2e42790f8ea509fe1ddd76fa464f\"\u003e\u003ccode\u003eb6a6156\u003c/code\u003e\u003c/a\u003e fix: fully pin actions in composite action (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1080\"\u003e#1080\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/4c7a2151c538b739337dbbd759aaf440fa1991ac\"\u003e\u003ccode\u003e4c7a215\u003c/code\u003e\u003c/a\u003e fix: write out .gitignore/CACHEDIR.TAG to our dir (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1072\"\u003e#1072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/47cb9c300e07c3a8ca4d5b240dad1a178a65dcdb\"\u003e\u003ccode\u003e47cb9c3\u003c/code\u003e\u003c/a\u003e fix: ignore default selection for tags and keywords (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1057\"\u003e#1057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/63dcab98ecd4f784537a3c1fa1319bac6cbf2436\"\u003e\u003ccode\u003e63dcab9\u003c/code\u003e\u003c/a\u003e fix: more uv variables set (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1056\"\u003e#1056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/e0f64e6c3cb24e3f870f4df8dd38830e03546dce\"\u003e\u003ccode\u003ee0f64e6\u003c/code\u003e\u003c/a\u003e fix: recreate if broken symlinks are present (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/bf9095287afacc1f5b94e5da54f4dbed4ccce875\"\u003e\u003ccode\u003ebf90952\u003c/code\u003e\u003c/a\u003e tests: pin to working conda version (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1079\"\u003e#1079\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/4ff681f169c4043ce3b3d19cba1eadd66720bf1d\"\u003e\u003ccode\u003e4ff681f\u003c/code\u003e\u003c/a\u003e fix: ignore forcecolor falsy (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1073\"\u003e#1073\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/wntrblm/nox/compare/2026.02.09...2026.04.10\"\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.9 to 0.15.20\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.20\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-25.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning instead of an error for unknown rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26113\"\u003e#26113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch \u003ccode\u003enoqa\u003c/code\u003e shebang handling in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26286\"\u003e#26286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26240\"\u003e#26240\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd versioning sections to custom crate READMEs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26317\"\u003e#26317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eruff_python_parser\u003c/code\u003e README for crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26315\"\u003e#26315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Clarify that \u003ccode\u003ePERF402\u003c/code\u003e applies to any iterable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26242\"\u003e#26242\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/dhruvmanila\"\u003e\u003ccode\u003e@​dhruvmanila\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/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.20\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.15.20\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFile\u003c/th\u003e\n\u003cth\u003ePlatform\u003c/th\u003e\n\u003cth\u003eChecksum\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz\"\u003eruff-aarch64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eApple Silicon macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz\"\u003eruff-x86_64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eIntel macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip\"\u003eruff-aarch64-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eARM64 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip\"\u003eruff-i686-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex86 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip\"\u003eruff-x86_64-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex64 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz\"\u003eruff-aarch64-unknown-linux-gnu.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eARM64 Linux\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz\"\u003eruff-i686-unknown-linux-gnu.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex86 Linux\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\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.20\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-25.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning instead of an error for unknown rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26113\"\u003e#26113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch \u003ccode\u003enoqa\u003c/code\u003e shebang handling in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26286\"\u003e#26286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26240\"\u003e#26240\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd versioning sections to custom crate READMEs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26317\"\u003e#26317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eruff_python_parser\u003c/code\u003e README for crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26315\"\u003e#26315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Clarify that \u003ccode\u003ePERF402\u003c/code\u003e applies to any iterable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26242\"\u003e#26242\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/dhruvmanila\"\u003e\u003ccode\u003e@​dhruvmanila\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/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.19\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-23.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport human-readable names when hovering suppression comments and in code actions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26114\"\u003e#26114\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFall back to default settings when editor-only settings are invalid (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26244\"\u003e#26244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix panic when inserting text at a notebook cell boundary (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26111\"\u003e#26111\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] Update fix suggestions for \u003ccode\u003e__floor__\u003c/code\u003e, \u003ccode\u003e__trunc__\u003c/code\u003e, \u003ccode\u003e__length_hint__\u003c/code\u003e, and \u003ccode\u003e__matmul__\u003c/code\u003e variants (\u003ccode\u003ePLC2801\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26239\"\u003e#26239\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid allocating when parsing single string literals (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26200\"\u003e#26200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid reallocating singleton call arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26223\"\u003e#26223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create source files for lint diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26226\"\u003e#26226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eOptimize formatter text width and indentation (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26236\"\u003e#26236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReserve capacity for builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26229\"\u003e#26229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip repeated-key checks for singleton dictionaries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26228\"\u003e#26228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ArrayVec for qualified name segments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26224\"\u003e#26224\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/f82a36b6baf8c0547a17bbde6c0d927ccd45d938\"\u003e\u003ccode\u003ef82a36b\u003c/code\u003e\u003c/a\u003e Bump 0.15.20 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26376\"\u003e#26376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/af329438b55d5aa8ca28725f17abbae63b5c815d\"\u003e\u003ccode\u003eaf32943\u003c/code\u003e\u003c/a\u003e Improve the summarise-ecosystem-results skill (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26378\"\u003e#26378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/485ebab5de692aad34720898cd80245b6092ba86\"\u003e\u003ccode\u003e485ebab\u003c/code\u003e\u003c/a\u003e Remove \u003ccode\u003eRUF076\u003c/code\u003e name from schema (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ef81835ce3da615346584dc446de0fe26bfc154b\"\u003e\u003ccode\u003eef81835\u003c/code\u003e\u003c/a\u003e [ty] Implement rust-analyzer's \u0026quot;Click for full compiler diagnostic\u0026quot; feature (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/572b31e2377a701a7365f069f6ef87002962cb2b\"\u003e\u003ccode\u003e572b31e\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26240\"\u003e#26240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f703f219d7fddd1a4abba9fa81e34773c185a4b9\"\u003e\u003ccode\u003ef703f21\u003c/code\u003e\u003c/a\u003e Allow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0d726b28ee35413926145ffef4ac1143cae9ea1e\"\u003e\u003ccode\u003e0d726b2\u003c/code\u003e\u003c/a\u003e [ty] Reuse equality semantics for membership compatibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25955\"\u003e#25955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/dbe6e9848c3f78fdaf543cfc000939ebc73b5f00\"\u003e\u003ccode\u003edbe6e98\u003c/code\u003e\u003c/a\u003e [ty] Infer definite equality comparison results (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26337\"\u003e#26337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e700ea357a2196d76b58eb89b2031ddb5ca896e0\"\u003e\u003ccode\u003ee700ea3\u003c/code\u003e\u003c/a\u003e [ty] Prove TypedDict structural patterns exhaustive (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26285\"\u003e#26285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6a0d2ec93959d966430b8c39d4de5c3e8a88e911\"\u003e\u003ccode\u003e6a0d2ec\u003c/code\u003e\u003c/a\u003e [ty] Widen inferred class-valued instance attributes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26338\"\u003e#26338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.9...0.15.20\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.5.1 to 4.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier usage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.0 - 2026-04-21\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier\nusage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/commit/f35134b05028ec938ac605ae500fdf95462655d3\"\u003e\u003ccode\u003ef35134b\u003c/code\u003e\u003c/a\u003e v4.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2a51ffcb81f6c8ed2e6467913c3343a8800f3ab9\"\u003e\u003ccode\u003e2a51ffc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e from pre-commit/hook-impl-optional-hook-dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/d7dee322abfc765b042f2e3b872aab3c3a867610\"\u003e\u003ccode\u003ed7dee32\u003c/code\u003e\u003c/a\u003e make --hook-dir optional for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/965aeb1c680e8b526342153547f0ec014484c63d\"\u003e\u003ccode\u003e965aeb1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e from pre-commit/hook-impl-required\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2eacc064aa9b5bb33d3a0d84a234b475e34f3096\"\u003e\u003ccode\u003e2eacc06\u003c/code\u003e\u003c/a\u003e --hook-type is required for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f5678bf4ac35cffc0ff7174ad85f7fdc2a5c977e\"\u003e\u003ccode\u003ef5678bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3657\"\u003e#3657\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/054cc5bd6bb1b20faa1eefe09f0de3b68fceee94\"\u003e\u003ccode\u003e054cc5b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/5c0f3024d2524f6e029a4c333392fd9be9fb27f6\"\u003e\u003ccode\u003e5c0f302\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3652\"\u003e#3652\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/a5d91142676630f8130020b35e166e0c0e92b8f4\"\u003e\u003ccode\u003ea5d9114\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/129a1f5ca1eaee0c952a5e7a07faae305c5e15bc\"\u003e\u003ccode\u003e129a1f5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3641\"\u003e#3641\u003c/a\u003e from pre-commit/mxr-patch-1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.5.1...v4.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `argcomplete` from 3.6.3 to 3.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kislyuk/argcomplete/releases\"\u003eargcomplete's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.7.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEscape glob and brace metacharacters in quote_completions (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eQuote prefix passed to compgen in FilesCompleter (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated easy_install script detection\u003c/li\u003e\n\u003cli\u003eType hinting improvements\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/kislyuk/argcomplete/blob/main/Changes.rst\"\u003eargcomplete's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChanges for v3.7.0 (2026-06-30)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eEscape glob and brace metacharacters in quote_completions (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eQuote prefix passed to compgen in FilesCompleter (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated easy_install script detection\u003c/li\u003e\n\u003cli\u003eType hinting improvements\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/kislyuk/argcomplete/commit/6b4528d801bc38e4be7f374ffda416fd82785529\"\u003e\u003ccode\u003e6b4528d\u003c/code\u003e\u003c/a\u003e v3.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/81608a8891885dcc60adc06c45baf2dcb2e8b61b\"\u003e\u003ccode\u003e81608a8\u003c/code\u003e\u003c/a\u003e Use Python 3.15 in test matrix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/a59f151dda6a42d721410a165f62972f50391e5a\"\u003e\u003ccode\u003ea59f151\u003c/code\u003e\u003c/a\u003e Update Python classifiers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/598c77951c259b8a1b1b2c9769298c3a93e2bb5d\"\u003e\u003ccode\u003e598c779\u003c/code\u003e\u003c/a\u003e Add test for \u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/552\"\u003e#552\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/d543c6fea9f24713995d153e48642566e4a80c21\"\u003e\u003ccode\u003ed543c6f\u003c/code\u003e\u003c/a\u003e escape glob and brace metacharacters in quote_completions (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/24ea0e3ba5f11c72e9debece9aa1685584f52ac1\"\u003e\u003ccode\u003e24ea0e3\u003c/code\u003e\u003c/a\u003e Upgrade GHA to latest supported runners and actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/8e6423bed6c79c86f0dd54d9d15a2f485902bb89\"\u003e\u003ccode\u003e8e6423b\u003c/code\u003e\u003c/a\u003e type hinting fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/93eab006915f94a0e31af2b115c4680b69592ae5\"\u003e\u003ccode\u003e93eab00\u003c/code\u003e\u003c/a\u003e Add test for \u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/551\"\u003e#551\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/5fefb4597387eada27b1e312436298931f0439ed\"\u003e\u003ccode\u003e5fefb45\u003c/code\u003e\u003c/a\u003e quote prefix passed to compgen in FilesCompleter (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/8e5ad6a5a702e5529f61ae9a63f720beda68ffaf\"\u003e\u003ccode\u003e8e5ad6a\u003c/code\u003e\u003c/a\u003e Remove easy_install script detection\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/kislyuk/argcomplete/compare/v3.6.3...v3.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `distlib` from 0.4.0 to 0.4.3\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/distlib/blob/master/CHANGES.rst\"\u003edistlib's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.4.3\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nReleased: 2026-06-12\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eresources\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved too-restrictive check for escaping resources.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e0.4.2\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eReleased: 2026-06-08\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003elocators\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix URL percent-encoding using space-padding instead of zero-padding. Thanks to\nKadir Can Ozden for the patch.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHarden decompression against malicious input. Thanks to tonghuaroot for the patch,\nwhich was adapted slightly.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003emanifest\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse os.lstat in findall to correctly detect symlinked directories. Thanks to\nKadir Can Ozden for the patch.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003emetadata\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eImprove logic to incorporate newer metadata versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eresources\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure that constructed resource paths don't escape the package. Thanks to\ntonghuaroot for the patch.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eutil\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ca href=\"https://redirect.github.com/pypa/distlib/issues/255\"\u003e#255\u003c/a\u003e: Update cache_from_source() for Python 3.15. Thanks to Victor Stinner\nfor the patch.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCheck during unarchiving that the destination directory isn't escaped via symlinks.\nThanks to tonghuaroot for the patch.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved performance of normalize_name using dual replace. Thanks to\nHugo van Kemenade for the patch.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ewheel\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/pypa/distlib/commit/3f4a377c8b164ba1c22a2a61de560f6f80ca7394\"\u003e\u003ccode\u003e3f4a377\u003c/code\u003e\u003c/a\u003e Changes for 0.4.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/5ee19e6bac8248d7d5246d498d79abe96faa89a5\"\u003e\u003ccode\u003e5ee19e6\u003c/code\u003e\u003c/a\u003e Relax too-strict escaping check for resources.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/f0e3d1ae3e694045b44a5b0e0a50177429ca1b06\"\u003e\u003ccode\u003ef0e3d1a\u003c/code\u003e\u003c/a\u003e Bump version.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/06e010db2ddc9497d5bbd886747ff4990ac528a9\"\u003e\u003ccode\u003e06e010d\u003c/code\u003e\u003c/a\u003e Add upper version limit for setuptools for build, to keep metadata version to...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/8b5aa55adf617bd3e81da716d44d034d7938f503\"\u003e\u003ccode\u003e8b5aa55\u003c/code\u003e\u003c/a\u003e Added tag 0.4.2 for changeset 5295c0ceb419\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/8183ea60e83bf021bf7d6903f4a6b3c8df0905a6\"\u003e\u003ccode\u003e8183ea6\u003c/code\u003e\u003c/a\u003e Update change log.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/55ca016b2d597ac5eecb10b6c43b4d9652b73462\"\u003e\u003ccode\u003e55ca016\u003c/code\u003e\u003c/a\u003e Changes for 0.4.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/7e282abde14bebec2c0e5342faa5a420e70799ca\"\u003e\u003ccode\u003e7e282ab\u003c/code\u003e\u003c/a\u003e Update metadata logic to incorporate newer versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/fa4ea501acb14baa31df6b823006da4fd1f8e0dd\"\u003e\u003ccode\u003efa4ea50\u003c/code\u003e\u003c/a\u003e Remove non-portable portion of test.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/e06a1d5fb237cff35c0bd58fe917ef44c84e41cf\"\u003e\u003ccode\u003ee06a1d5\u003c/code\u003e\u003c/a\u003e Further refine tests.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/distlib/compare/0.4.0...0.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.25.2 to 3.29.5\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.5\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eserialise read/write release rollback against a concurrent acquire 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/563\"\u003etox-dev/filelock#563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft_rw): refresh held marker through the verified fd 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/565\"\u003etox-dev/filelock#565\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eonly unlink the writer marker on release if it is still ours 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/566\"\u003etox-dev/filelock#566\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edon't follow symlinks in raise_on_not_writable_file 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/567\"\u003etox-dev/filelock#567\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edon't complete a writer acquire on a peer's reclaimed marker 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/571\"\u003etox-dev/filelock#571\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003euse a private break name in break_lock_file 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/576\"\u003etox-dev/filelock#576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep Unix lock files after release by \u003ca href=\"https://github.com/itscloud0\"\u003e\u003ccode\u003e@​itscloud0\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/577\"\u003etox-dev/filelock#577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: fix Windows type check broken by \u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/577\"\u003e#577\u003c/a\u003e 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/580\"\u003etox-dev/filelock#580\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eroll back a read acquire's open transaction when its SELECT fails 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/575\"\u003etox-dev/filelock#575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003elifetime: reject negative, non-numeric, and bool values at the setter 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/573\"\u003etox-dev/filelock#573\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/itscloud0\"\u003e\u003ccode\u003e@​itscloud0\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/577\"\u003etox-dev/filelock#577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/573\"\u003etox-dev/filelock#573\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.4...3.29.5\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.4...3.29.5\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.4\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock 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/561\"\u003etox-dev/filelock#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error 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/562\"\u003etox-dev/filelock#562\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.3...3.29.4\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.3...3.29.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push 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/557\"\u003etox-dev/filelock#557\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder 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/556\"\u003etox-dev/filelock#556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job 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/559\"\u003etox-dev/filelock#559\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(ci): publish from release.yaml on tag push 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/560\"\u003etox-dev/filelock#560\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.2...3.29.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.2...3.29.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo 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/549\"\u003etox-dev/filelock#549\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed 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/551\"\u003etox-dev/filelock#551\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us 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/553\"\u003etox-dev/filelock#553\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/tox-dev/filelock/commit/be562277636140c26578a98a2a487fdb6f446ee6\"\u003e\u003ccode\u003ebe56227\u003c/code\u003e\u003c/a\u003e lifetime: reject negative, non-numeric, and bool values at the setter (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1f6cde4ab93d30dfe9867d462e3e1055aaba01c5\"\u003e\u003ccode\u003e1f6cde4\u003c/code\u003e\u003c/a\u003e roll back a read acquire's open transaction when its SELECT fails (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/575\"\u003e#575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/c76dee6674011e8ba28a5b2e3285af4a738e4109\"\u003e\u003ccode\u003ec76dee6\u003c/code\u003e\u003c/a\u003e test: fix Windows type check broken by \u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/577\"\u003e#577\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/580\"\u003e#580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/ea594a5cbca43cec92d62f740a8e510a7db0ceed\"\u003e\u003ccode\u003eea594a5\u003c/code\u003e\u003c/a\u003e Keep Unix lock files after release (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/577\"\u003e#577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7595a7b48738642ace65a8fbe54bc03ae4317708\"\u003e\u003ccode\u003e7595a7b\u003c/code\u003e\u003c/a\u003e use a private break name in break_lock_file (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/576\"\u003e#576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0b707fe1a7edf5f5e421d2e0c63acd82017011d4\"\u003e\u003ccode\u003e0b707fe\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/572\"\u003e#572\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/22ecd6a51dacfad30a96d62f291d2707dccf4efb\"\u003e\u003ccode\u003e22ecd6a\u003c/code\u003e\u003c/a\u003e don't complete a writer acquire on a peer's reclaimed marker (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/571\"\u003e#571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/70ecdb27fedb590ffdb44722c71355d99644148d\"\u003e\u003ccode\u003e70ecdb2\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/570\"\u003e#570\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/dbcc83a38bab6435e3809594b9de01aa037f2b39\"\u003e\u003ccode\u003edbcc83a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/568\"\u003e#568\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/022394c34bb61271a813c038cf11b7e886b8123c\"\u003e\u003ccode\u003e022394c\u003c/code\u003e\u003c/a\u003e don't follow symlinks in raise_on_not_writable_file (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/567\"\u003e#567\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.25.2...3.29.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.15.0 to 4.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Latvian language localization (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/301\"\u003e#301\u003c/a\u003e) \u003ca href=\"https://github.com/EPoikans\"\u003e\u003ccode\u003e@​EPoikans\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd i18n support for \u003ccode\u003enaturalsize()\u003c/code\u003e and French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/294\"\u003e#294\u003c/a\u003e) \u003ca href=\"https://github.com/Yibomao\"\u003e\u003ccode\u003e@​Yibomao\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePerformance improvements: 1.07x - 8.4x (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/315\"\u003e#315\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLazy imports for Python 3.15+ (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/335\"\u003e#335\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop experimental Python 3.13 free-threaded (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/336\"\u003e#336\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRefactor: simplify \u003ccode\u003escientific()\u003c/code\u003e and extract \u003ccode\u003e_SUPERSCRIPT_MAP\u003c/code\u003e constant (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/313\"\u003e#313\u003c/a\u003e) \u003ca href=\"https://github.com/maayanmatsliah-tech\"\u003e\u003ccode\u003e@​maayanmatsliah-tech\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003enaturalsize()\u003c/code\u003e rounding rollover at unit boundaries (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/329\"\u003e#329\u003c/a\u003e) \u003ca href=\"https://github.com/patchwright\"\u003e\u003ccode\u003e@​patchwright\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCarry \u003ccode\u003emetric()\u003c/code\u003e to the next SI prefix when rounding reaches 1000 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/328\"\u003e#328\u003c/a\u003e) \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop printing two minus signs in fractional for a negative mixed number (\u003ca href=\"https://redirect.githu...\n\n_Description has been truncated_","html_url":"https://github.com/de-odex/whoosh-novo/pull/166","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/de-odex%2Fwhoosh-novo/issues/166","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/166/packages"},{"uuid":"4813279223","node_id":"PR_kwDORDrEC87uDnE5","number":220,"state":"closed","title":"chore(deps): bump the python-deps group across 1 directory with 24 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-06T00:22:01.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-05T14:51:49.000Z","updated_at":"2026-07-06T00:22:02.000Z","time_to_close":34212,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-deps","update_count":24,"packages":[{"name":"aiohappyeyeballs","old_version":"2.6.2","new_version":"2.7.1","repository_url":"https://github.com/aio-libs/aiohappyeyeballs"},{"name":"anyio","old_version":"4.14.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"boto3","old_version":"1.43.30","new_version":"1.43.40","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.30","new_version":"1.43.40","repository_url":"https://github.com/boto/botocore"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"croniter","old_version":"6.0.0","new_version":"6.2.3","repository_url":"https://github.com/pallets-eco/croniter"},{"name":"google-auth","old_version":"2.55.0","new_version":"2.55.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-cloud-resource-manager","old_version":"1.17.0","new_version":"1.18.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"langchain","old_version":"1.3.9","new_version":"1.3.11","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-core","old_version":"1.4.7","new_version":"1.4.8","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-google-genai","old_version":"4.2.5","new_version":"4.2.6","repository_url":"https://github.com/langchain-ai/langchain-google"},{"name":"langgraph","old_version":"1.2.5","new_version":"1.2.7","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.8.16","new_version":"0.9.7","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"msgpack","old_version":"1.2.0","new_version":"1.2.1","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"redis","old_version":"8.0.0","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"s3transfer","old_version":"0.18.0","new_version":"0.19.0","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.63.0","new_version":"2.64.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"tzlocal","old_version":"5.4","new_version":"5.4.4","repository_url":"https://github.com/regebro/tzlocal"},{"name":"uuid-utils","old_version":"0.16.1","new_version":"0.16.2","repository_url":"https://github.com/aminalaee/uuid-utils"},{"name":"uvicorn","old_version":"0.49.0","new_version":"0.50.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"wcwidth","old_version":"0.8.1","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"xxhash","old_version":"3.7.0","new_version":"3.8.0","repository_url":"https://github.com/ifduyue/python-xxhash"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-deps group with 24 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [aiohappyeyeballs](https://github.com/aio-libs/aiohappyeyeballs) | `2.6.2` | `2.7.1` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.0` | `4.14.1` |\n| [boto3](https://github.com/boto/boto3) | `1.43.30` | `1.43.40` |\n| [botocore](https://github.com/boto/botocore) | `1.43.30` | `1.43.40` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.6.17` |\n| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [croniter](https://github.com/pallets-eco/croniter) | `6.0.0` | `6.2.3` |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.55.0` | `2.55.1` |\n| [google-cloud-resource-manager](https://github.com/googleapis/google-cloud-python) | `1.17.0` | `1.18.0` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.3.9` | `1.3.11` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.4.7` | `1.4.8` |\n| [langchain-google-genai](https://github.com/langchain-ai/langchain-google) | `4.2.5` | `4.2.6` |\n| [langgraph](https://github.com/langchain-ai/langgraph) | `1.2.5` | `1.2.7` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.8.16` | `0.9.7` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.2.0` | `1.2.1` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.0.1` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.18.0` | `0.19.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.63.0` | `2.64.0` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [tzlocal](https://github.com/regebro/tzlocal) | `5.4` | `5.4.4` |\n| [uuid-utils](https://github.com/aminalaee/uuid-utils) | `0.16.1` | `0.16.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.49.0` | `0.50.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.8.1` | `0.8.2` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.7.0` | `3.8.0` |\n\n\nUpdates `aiohappyeyeballs` from 2.6.2 to 2.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/releases\"\u003eaiohappyeyeballs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1 (2026-07-01)\u003c/h2\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse defaultdict to help with performance (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/239\"\u003e#239\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactoring\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCollapse collect-then-remove pattern in utils helpers (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/227\"\u003e#227\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/0dd3fd16fe394eb8493000dc9b9894fad3ca3190\"\u003e\u003ccode\u003e0dd3fd1\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMerge identical except blocks in _connect_sock cleanup (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/229\"\u003e#229\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/b7c186e3242eb4d6eaf0918857a99c263b3186fb\"\u003e\u003ccode\u003eb7c186e\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSimplify _interleave_addrinfos family grouping (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/226\"\u003e#226\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/fdf6548a5f8b38e45ad7cee8add3c3a7e34e2805\"\u003e\u003ccode\u003efdf6548\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eDetailed Changes\u003c/strong\u003e: \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.7.0...v2.7.1\"\u003ev2.7.0...v2.7.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.7.0 (2026-05-20)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Python 3.14 support (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/224\"\u003e#224\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/10e7d4341666605de295dd00da716e30002e78c2\"\u003e\u003ccode\u003e10e7d43\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eDetailed Changes\u003c/strong\u003e: \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.6.2...v2.7.0\"\u003ev2.6.2...v2.7.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/aio-libs/aiohappyeyeballs/blob/main/CHANGELOG.md\"\u003eaiohappyeyeballs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1 (2026-07-01)\u003c/h2\u003e\n\u003ch3\u003ePerformance improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse defaultdict to help with performance (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactoring\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify _interleave_addrinfos family grouping (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/fdf6548a5f8b38e45ad7cee8add3c3a7e34e2805\"\u003e\u003ccode\u003efdf6548\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCollapse collect-then-remove pattern in utils helpers (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/0dd3fd16fe394eb8493000dc9b9894fad3ca3190\"\u003e\u003ccode\u003e0dd3fd1\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMerge identical except blocks in _connect_sock cleanup (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/b7c186e3242eb4d6eaf0918857a99c263b3186fb\"\u003e\u003ccode\u003eb7c186e\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0 (2026-05-20)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd python 3.14 support (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/10e7d4341666605de295dd00da716e30002e78c2\"\u003e\u003ccode\u003e10e7d43\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/aio-libs/aiohappyeyeballs/commit/4dfc926e30eea8d24c1a71602d73c0e9a895c191\"\u003e\u003ccode\u003e4dfc926\u003c/code\u003e\u003c/a\u003e 2.7.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e perf: use defaultdict to help with performance (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/239\"\u003e#239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/338277badfb25fc38759ce38ab9ea2c20ec1bfff\"\u003e\u003ccode\u003e338277b\u003c/code\u003e\u003c/a\u003e chore: stop tracking .DS_Store files (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/251\"\u003e#251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/16978694944ed7fb5e7b49a173160144ccac45bc\"\u003e\u003ccode\u003e1697869\u003c/code\u003e\u003c/a\u003e ci: add codspeed benchmark suite for addrinfo reordering hot paths (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/250\"\u003e#250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/d40a848cd2262b435242646fa8e220300bcd6952\"\u003e\u003ccode\u003ed40a848\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump starlette from 1.0.1 to 1.3.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/242\"\u003e#242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/51d42669b2b94a78c6d4bd059e449b8ef51c6646\"\u003e\u003ccode\u003e51d4266\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump cryptography from 46.0.7 to 48.0.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/243\"\u003e#243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/2df44b3987d3c887a8493ba19259c63588226d6c\"\u003e\u003ccode\u003e2df44b3\u003c/code\u003e\u003c/a\u003e chore(pre-commit.ci): pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/241\"\u003e#241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/3e3cb615f00bfb4d29c30e0c86c897f4de8fb02d\"\u003e\u003ccode\u003e3e3cb61\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.3 to 9.1.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/922dcd79a66d67fdd98a5f9b7587c4f8cda44653\"\u003e\u003ccode\u003e922dcd7\u003c/code\u003e\u003c/a\u003e chore(deps-ci): bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/245\"\u003e#245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/70461c583a8cf3c6fa85b8c48b8e4b576cee8083\"\u003e\u003ccode\u003e70461c5\u003c/code\u003e\u003c/a\u003e ci: drop .github/FUNDING.yml to inherit org-wide config (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/247\"\u003e#247\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.6.2...v2.7.1\"\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.0 to 4.14.1\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.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed teardown of higher-scoped async fixtures failing on asyncio with \u003ccode\u003eRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\u003c/code\u003e when an async test raise an outcome exception (e.g., \u003ccode\u003epytest.skip()\u003c/code\u003e, \u003ccode\u003epytest.xfail()\u003c/code\u003e, or \u003ccode\u003epytest.fail()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1179\"\u003e#1179\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting a value of \u003ccode\u003e0\u003c/code\u003e when the limiter was instantiated outside of an event loop, contradicting the documented behavior of allowing 0 total tokens (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1183\"\u003e#1183\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\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/agronholm/anyio/commit/149b9e907618fadf6840a4d3cebad533b0c7d033\"\u003e\u003ccode\u003e149b9e9\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/377518cd1160314f2fdf74f356ae9e848c94a065\"\u003e\u003ccode\u003e377518c\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6 to 7 in the github-actions group (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b42a2f5e8e9910d0c57b970f9a747427a9da26f0\"\u003e\u003ccode\u003eb42a2f5\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1185\"\u003e#1185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/3ceb6ffbfa89be715f444550883356fbfbc13154\"\u003e\u003ccode\u003e3ceb6ff\u003c/code\u003e\u003c/a\u003e Allow 0 tokens in a CapacityLimiter instantiated outside an event loop (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1183\"\u003e#1183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/e10d1db74f7a59cb283a1e4b3b22227da11c6f07\"\u003e\u003ccode\u003ee10d1db\u003c/code\u003e\u003c/a\u003e Add missing await to open_file() in file I/O concurrency example (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1182\"\u003e#1182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1dbc3b62256e5877bcf610aca98ba6e450d14c20\"\u003e\u003ccode\u003e1dbc3b6\u003c/code\u003e\u003c/a\u003e OutcomeException should not discard test runner_task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.0...4.14.1\"\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.30 to 1.43.40\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/dd59a59bbd400538f20d03782991907321f3cac7\"\u003e\u003ccode\u003edd59a59\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.40'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b416ca0ee262545bc14dad610825800d0e1afdfe\"\u003e\u003ccode\u003eb416ca0\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.40\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b228d052a91bd2a2b6af120e80877ecffd413ad0\"\u003e\u003ccode\u003eb228d05\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/121db7a5a3e37a6d76a1356bf93646616bd04c5b\"\u003e\u003ccode\u003e121db7a\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/00141f6a0d73fc19d7edb52cb054317a5c71fe43\"\u003e\u003ccode\u003e00141f6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/310317d679150d6c78c9af133dde716a0833bf0b\"\u003e\u003ccode\u003e310317d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/ff7c1cfdabd6fc5cc0869d521e25f6fa19a7582b\"\u003e\u003ccode\u003eff7c1cf\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/805c6837a36f52c0b35235bc12ed9243c91b6e9c\"\u003e\u003ccode\u003e805c683\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS to shared Python SDK and CLI team (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4809\"\u003e#4809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/efcfb6506ce686aa8a09908d835ba2b9731209a5\"\u003e\u003ccode\u003eefcfb65\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.38'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d7aa957044d50c107fcd2ba9049d1f3a9056c473\"\u003e\u003ccode\u003ed7aa957\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.38' into develop\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.30...1.43.40\"\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.30 to 1.43.40\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c1894c100916579eef4df96e2b330973b9d715f0\"\u003e\u003ccode\u003ec1894c1\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.40'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/fc560a48e6d6a2342a28e32f0f59668efa347179\"\u003e\u003ccode\u003efc560a4\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.40\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/420c5848eac57be3c4dcc5c9b1f36085de397695\"\u003e\u003ccode\u003e420c584\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e00fad7da41412453284c5db9da30283d581a8e7\"\u003e\u003ccode\u003ee00fad7\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/3f295440320638cc50db35e0f599e98555c80b7a\"\u003e\u003ccode\u003e3f29544\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/db6ca713163f4116d23573937389da352f9953b6\"\u003e\u003ccode\u003edb6ca71\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/97d313f018d34bbf38b68296352aec0bc2441745\"\u003e\u003ccode\u003e97d313f\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/bcfbd50cca39b6ed8cebf81ba3ad33eaa69bffc5\"\u003e\u003ccode\u003ebcfbd50\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/0813a0feec54b2f4048dcc163363f0a231272e3b\"\u003e\u003ccode\u003e0813a0f\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/ea9157a08919bdf3daceb2176fabbe83535849f5\"\u003e\u003ccode\u003eea9157a\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS to shared Python SDK and CLI team (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3740\"\u003e#3740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.30...1.43.40\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.5.20 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.05.20...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.1 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\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\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.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `croniter` from 6.0.0 to 6.2.3\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/croniter/blob/main/CHANGELOG.rst\"\u003ecroniter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.3 (2026-07-02)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Fix quadratic expansion of comma-separated range lists for a large speed-up on expressions with many ranges. [1d79fc6, [#231](https://github.com/pallets-eco/croniter/issues/231), @alhudz]\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Reject a zero step (e.g. ``5-5/0``) in equal and reversed cron ranges instead of silently accepting it. [ab27767, [#232](https://github.com/pallets-eco/croniter/issues/232), @alhudz]\n- Fix ``expand_from_start_time`` month low-bound off-by-one so stepped month ranges start on the correct month. [f329964, [#235](https://github.com/pallets-eco/croniter/issues/235), @alhudz]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eFix zizmor-reported security findings in GitHub Actions workflows. [ed19f94, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eBump pinned build and CI dependencies via dependabot.\u003c/li\u003e\n\u003cli\u003eUpgrade locked development and build dependencies (\u003ccode\u003euv lock --upgrade\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.2 (2026-03-15)\u003c/h2\u003e\n\u003cp\u003ePackaging\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Switch build backend from ``flit_core`` to ``hatchling`` with pinned dependencies. [4cce160]\n- Add PEP 639 license expression (``license = \u0026amp;quot;MIT\u0026amp;quot;``) to project metadata. [4cce160]\n- Pin all GitHub Actions to SHA hashes across CI workflows. [4cce160]\n- Add dependabot for automated dependency updates. [4cce160]\n- Add zizmor workflow for CI security scanning. [4cce160]\n\n\n6.2.1 (2026-03-15)\n------------------\n\nBugfixes\n~~~~~~~~\n- Fix ``get_prev`` skipping Feb 29 on leap years for day-of-month expressions. [441a0b5, [#203](https://github.com/pallets-eco/croniter/issues/203), @Souls-R]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eLicense :: OSI Approved :: MIT License\u003c/code\u003e classifier. [270cbbc, \u003ca href=\"https://github.com/cdheiser\"\u003e\u003ccode\u003e@​cdheiser\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2026-03-14)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eW\u003c/code\u003e (nearest weekday) in the day-of-month field. [c79d88a]\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eprecision_in_seconds\u003c/code\u003e parameter to \u003ccode\u003ematch()\u003c/code\u003e and \u003ccode\u003ematch_range()\u003c/code\u003e to allow overriding the default matching precision. [7415d1e, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/58\"\u003e#58\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/pallets-eco/croniter/commit/22b59e05f5ca485c45596b2a9b580fddffbf753f\"\u003e\u003ccode\u003e22b59e0\u003c/code\u003e\u003c/a\u003e Prepare for release 6.2.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/236\"\u003e#236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ab277671adc8e446e8dc7f1e939eabf024b6199e\"\u003e\u003ccode\u003eab27767\u003c/code\u003e\u003c/a\u003e reject zero step in equal and reversed cron ranges (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/232\"\u003e#232\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/f329964223eeb29e7788b1a9d615b525148fec96\"\u003e\u003ccode\u003ef329964\u003c/code\u003e\u003c/a\u003e fix expand_from_start_time month low bound off-by-one (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/235\"\u003e#235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/9810279c20030954e2f1ed2cf5f1d34b98c6b07f\"\u003e\u003ccode\u003e9810279\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/233\"\u003e#233\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/d051aaf6342fbe9c559b9fcd99e6fb6f3bb63cb7\"\u003e\u003ccode\u003ed051aaf\u003c/code\u003e\u003c/a\u003e Bump hatchling from 1.29.0 to 1.30.1 in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/1d79fc6555fb9208e290e0af10194eec638ae01c\"\u003e\u003ccode\u003e1d79fc6\u003c/code\u003e\u003c/a\u003e fix quadratic expansion of comma-separated range lists (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/231\"\u003e#231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ed19f94c472ef665598693a554e6a5555be41f7b\"\u003e\u003ccode\u003eed19f94\u003c/code\u003e\u003c/a\u003e Fix zizmor-reported security findings in GitHub Actions workflows (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/82657c37b873319570fee74c1864cb4d6153f543\"\u003e\u003ccode\u003e82657c3\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/229\"\u003e#229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/8e13827f77358beabf75245ad37d31a581cb6d1e\"\u003e\u003ccode\u003e8e13827\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/228\"\u003e#228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/e55d70bf2288e25c1ddf850fde703d56888772f2\"\u003e\u003ccode\u003ee55d70b\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group across 1 directory (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/225\"\u003e#225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/croniter/compare/6.0.0...6.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-auth` from 2.55.0 to 2.55.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-auth's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-auth: v2.55.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.55.0...google-auth-v2.55.1\"\u003e2.55.1\u003c/a\u003e (2026-06-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e lower regional access boundary logs from warning to debug. (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17571\"\u003e#17571\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/1ef418362c1a69e6bbe6f78741b53dc1f3e7b301\"\u003e1ef4183\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17515\"\u003e#17515\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/googleapis/google-cloud-python/commit/900d51fcc122464eb3611589f6f9a9c55a85598f\"\u003e\u003ccode\u003e900d51f\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17543\"\u003e#17543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/1ef418362c1a69e6bbe6f78741b53dc1f3e7b301\"\u003e\u003ccode\u003e1ef4183\u003c/code\u003e\u003c/a\u003e fix(auth): lower regional access boundary logs from warning to debug. (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17571\"\u003e#17571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/bd782cf279ae700f56d40702d4ef25ef89e2ff9b\"\u003e\u003ccode\u003ebd782cf\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-bigtable (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17575\"\u003e#17575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/57ebaa3c244a9fa97d3e6db206126c504f4b954f\"\u003e\u003ccode\u003e57ebaa3\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-firestore (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17577\"\u003e#17577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/140d86fe6181a4d6f831df8cdc7d86facf8ebe00\"\u003e\u003ccode\u003e140d86f\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-compute (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17576\"\u003e#17576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/39b252f4effe7e8915efa8796d90fd29f356bf96\"\u003e\u003ccode\u003e39b252f\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-spanner (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17578\"\u003e#17578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/421eebdb31d526a6d5ba27c433cf2803d7619be3\"\u003e\u003ccode\u003e421eebd\u003c/code\u003e\u003c/a\u003e feat: support interactive execution of deferred DataFrames in TableWidget (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/3619b29e10ae04623d101808cb98be5edbb483b4\"\u003e\u003ccode\u003e3619b29\u003c/code\u003e\u003c/a\u003e feat: support gemini-3.x models in loader and update default model to gemini-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/17bef417db646c0f9fcd91529cd06b2527ec5e3f\"\u003e\u003ccode\u003e17bef41\u003c/code\u003e\u003c/a\u003e test(bigquery-magics): make table_id parsing check version-agnostic (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17562\"\u003e#17562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/e68853162249b7a55f560f9a203d49984665c854\"\u003e\u003ccode\u003ee688531\u003c/code\u003e\u003c/a\u003e bigtable: add ValueBitmaskFilter for data client (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17567\"\u003e#17567\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.55.0...google-auth-v2.55.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-resource-manager` from 1.17.0 to 1.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-cloud-resource-manager's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-resource-manager: v1.18.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-resource-manager-v1.17.0...google-cloud-resource-manager-v1.18.0\"\u003e1.18.0\u003c/a\u003e (2026-06-22)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eregenerate google-cloud-[o-r] packages (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17075\"\u003e#17075\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f4bd0182d808ae73c3c6981e6ce3d565f78a6051\"\u003ef4bd018\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/googleapis/google-cloud-python/commit/a5ad18cbad0577b79917dfad2242a57dc21432e1\"\u003e\u003ccode\u003ea5ad18c\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17482\"\u003e#17482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f6937b33e31a4c3e884165b582442274a366a995\"\u003e\u003ccode\u003ef6937b3\u003c/code\u003e\u003c/a\u003e chore(main): release google-cloud-bigtable 2.39.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17497\"\u003e#17497\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/172302b809b0ff13267f18b5e7dd24be0dce2f70\"\u003e\u003ccode\u003e172302b\u003c/code\u003e\u003c/a\u003e ci(bigquery-storage): fix \u003ccode\u003ecore_deps_from_source\u003c/code\u003e and \u003ccode\u003eprerelease_deps\u003c/code\u003e by in...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/e7268785c6736c10c1337160b4d8606975062637\"\u003e\u003ccode\u003ee726878\u003c/code\u003e\u003c/a\u003e fix(bigframes): world-readable temp zip in create_cloud_function (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17522\"\u003e#17522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/2f893b1b53e7394655fd204d1f8a138212ad8227\"\u003e\u003ccode\u003e2f893b1\u003c/code\u003e\u003c/a\u003e fix: bump \u003ccode\u003e@​angular/common\u003c/code\u003e, \u003ccode\u003e@​angular/forms\u003c/code\u003e, \u003ccode\u003e@​angular/platform-browser\u003c/code\u003e and \u003ca href=\"https://github.com/ang\"\u003e\u003ccode\u003e@​ang\u003c/code\u003e\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f23063f9182cdec868c16afb80304892850fbe88\"\u003e\u003ccode\u003ef23063f\u003c/code\u003e\u003c/a\u003e fix: bump langsmith from 0.8.0 to 0.8.18 in /packages/bigframes (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17518\"\u003e#17518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/6fc45e3790c5a248dcec4b74799834c7b9219ef0\"\u003e\u003ccode\u003e6fc45e3\u003c/code\u003e\u003c/a\u003e fix: bump undici and \u003ccode\u003e@​angular/build\u003c/code\u003e in /packages/bigframes/bigframes/display/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/36b5b7ebb01030a2d0f10d49fe4827ddc79dde9a\"\u003e\u003ccode\u003e36b5b7e\u003c/code\u003e\u003c/a\u003e fix: bump msgpack from 1.1.1 to 1.2.1 in /packages/bigframes (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17520\"\u003e#17520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/11de93965831311445abacaec2d7baeef21f837d\"\u003e\u003ccode\u003e11de939\u003c/code\u003e\u003c/a\u003e tests: add Python 3.15 pre-release testing (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17517\"\u003e#17517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/025840544f5d4ab6a429d1cd9bdbb256c981aa0d\"\u003e\u003ccode\u003e0258405\u003c/code\u003e\u003c/a\u003e fix(bigquery): close GAPIC storage transport and auth sessions to prevent soc...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-resource-manager-v1.17.0...google-cloud-resource-manager-v1.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain` from 1.3.9 to 1.3.11\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain==1.3.11\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.3.10\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.3.11 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38377\"\u003e#38377\u003c/a\u003e)\nfix(langchain,openai): only set \u003ccode\u003estrict=True\u003c/code\u003e on tools for OpenAI-compatible models in \u003ccode\u003eProviderStrategy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38370\"\u003e#38370\u003c/a\u003e)\nchore: bump pydantic-settings from 2.12.0 to 2.14.2 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38279\"\u003e#38279\u003c/a\u003e)\nchore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38280\"\u003e#38280\u003c/a\u003e)\nchore: bump langsmith from 0.8.9 to 0.8.18 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38281\"\u003e#38281\u003c/a\u003e)\ndocs(langchain): document summarization prompt contract (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38256\"\u003e#38256\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain==1.3.10\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.3.9\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.3.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38255\"\u003e#38255\u003c/a\u003e)\nchore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38176\"\u003e#38176\u003c/a\u003e)\nchore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38179\"\u003e#38179\u003c/a\u003e)\nfix(langchain): switch summary format (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38171\"\u003e#38171\u003c/a\u003e)\nfix(langchain): detect provider strategy for dated \u003ccode\u003egpt-5.2\u003c/code\u003e/\u003ccode\u003egpt-5.4\u003c/code\u003e snapshots (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38222\"\u003e#38222\u003c/a\u003e)\nchore(langchain): improve typing in tests (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38163\"\u003e#38163\u003c/a\u003e)\nchore: bump pyjwt from 2.12.0 to 2.13.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38168\"\u003e#38168\u003c/a\u003e)\nrelease(openai): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38130\"\u003e#38130\u003c/a\u003e)\nhotfix(openai): switch version (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38123\"\u003e#38123\u003c/a\u003e)\nrelease(openai): 1.4.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38120\"\u003e#38120\u003c/a\u003e)\ndocs: refresh \u003ccode\u003eREADME\u003c/code\u003e installation and resources (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38119\"\u003e#38119\u003c/a\u003e)\ntest(core,langchain): update tests for explicit deserialization allowlists (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38118\"\u003e#38118\u003c/a\u003e)\nrelease(core): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38111\"\u003e#38111\u003c/a\u003e)\nrelease(anthropic): 1.4.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38105\"\u003e#38105\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/langchain-ai/langchain/commit/83e824922ac9bf3bf882347fecabd09614bccc37\"\u003e\u003ccode\u003e83e8249\u003c/code\u003e\u003c/a\u003e release(langchain): 1.3.11 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38377\"\u003e#38377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/6dd45c90f6c7e17dc9f1cd0c17035375fe655b1f\"\u003e\u003ccode\u003e6dd45c9\u003c/code\u003e\u003c/a\u003e hotfix(anthropic): regenerate cassette (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38376\"\u003e#38376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/4a837567c894363a729bae39a1b2bbe68cb89c41\"\u003e\u003ccode\u003e4a83756\u003c/code\u003e\u003c/a\u003e release(openai): 1.3.3 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38375\"\u003e#38375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/792c1a743e4471990e96e818957b3299517e7255\"\u003e\u003ccode\u003e792c1a7\u003c/code\u003e\u003c/a\u003e fix(openai): drop response item ids when \u003ccode\u003estore\u003c/code\u003e is false (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38372\"\u003e#38372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9f7e46fd7052960a402a059b2f78ec6248f78527\"\u003e\u003ccode\u003e9f7e46f\u003c/code\u003e\u003c/a\u003e release(anthropic): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38373\"\u003e#38373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9ef324c9abb534b4839bd2a42f4fb36b1ec3f3c3\"\u003e\u003ccode\u003e9ef324c\u003c/code\u003e\u003c/a\u003e fix(langchain,openai): only set \u003ccode\u003estrict=True\u003c/code\u003e on tools for OpenAI-compatible ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/05b5af17dca9a554b40e216554f5020ff05eb378\"\u003e\u003ccode\u003e05b5af1\u003c/code\u003e\u003c/a\u003e chore(infra): update workflow key name (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38367\"\u003e#38367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/8e8177487003026f25198068a137270fe369f2d4\"\u003e\u003ccode\u003e8e81774\u003c/code\u003e\u003c/a\u003e test(groq): xfail flaky tool choice test (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38365\"\u003e#38365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/946fbbbead849fc948e50ef726242c47013a43b7\"\u003e\u003ccode\u003e946fbbb\u003c/code\u003e\u003c/a\u003e fix(groq): replace deprecated Groq llama models (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38363\"\u003e#38363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/d11b1fc86369b970a8e6144fdcc4f5923f6e03cd\"\u003e\u003ccode\u003ed11b1fc\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38341\"\u003e#38341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain==1.3.9...langchain==1.3.11\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-core` from 1.4.7 to 1.4.8\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain-core's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-core==1.4.8\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.4.7\u003c/p\u003e\n\u003cp\u003echore: bump jupyter-server from 2.18.0 to 2.20.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38252\"\u003e#38252\u003c/a\u003e)\nchore: bump tornado from 6.5.6 to 6.5.7 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38184\"\u003e#38184\u003c/a\u003e)\nchore: bump bleach from 6.3.0 to 6.4.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38198\"\u003e#38198\u003c/a\u003e)\nrelease(core): 1.4.8 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38254\"\u003e#38254\u003c/a\u003e)\nrefactor(langchain-classic): remove code for Python \u0026lt; 3.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38194\"\u003e#38194\u003c/a\u003e)\nperf(core): memoize \u003ccode\u003eBaseTool.tool_call_schema\u003c/code\u003e subset model and cache \u003ccode\u003emodel_json_schema\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38073\"\u003e#38073\u003c/a\u003e)\nstyle(core): fix style in \u003ccode\u003elangchain_core\u003c/code\u003e/\u003ccode\u003e_security\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38189\"\u003e#38189\u003c/a\u003e)\nfix(core): preserve usage token details in v3 streaming events (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38021\"\u003e#38021\u003c/a\u003e)\nfix(core): \u003ccode\u003edisallow_any_generics\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38156\"\u003e#38156\u003c/a\u003e)\nchore(core): add mypy \u003ccode\u003ewarn_unreachable\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38109\"\u003e#38109\u003c/a\u003e)\ndocs: refresh \u003ccode\u003eREADME\u003c/code\u003e installation and resources (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38119\"\u003e#38119\u003c/a\u003e)\ntest(core,langchain): update tests for explicit deserialization allowlists (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38118\"\u003e#38118\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/langchain-ai/langchain/commit/15b0a4930b5306bb2174f16d92fe4b7837147d0a\"\u003e\u003ccode\u003e15b0a49\u003c/code\u003e\u003c/a\u003e chore: bump jupyter-server from 2.18.0 to 2.20.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38252\"\u003e#38252\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/612139f3af5f55b6311695fe6b139f0b6a6f68a2\"\u003e\u003ccode\u003e612139f\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38175\"\u003e#38175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/921e370a67af4254b948de94c4db4587f4716a84\"\u003e\u003ccode\u003e921e370\u003c/code\u003e\u003c/a\u003e chore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38176\"\u003e#38176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/1aabc26836e0c1220121a1f37e3a2691e20f2f19\"\u003e\u003ccode\u003e1aabc26\u003c/code\u003e\u003c/a\u003e chore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38179\"\u003e#38179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/8d51355f1f81825b72cb55303a39825ecbdc6b44\"\u003e\u003ccode\u003e8d51355\u003c/code\u003e\u003c/a\u003e chore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38180\"\u003e#38180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/0b1b7bb77a7e8cf98071e088da777ff52558f771\"\u003e\u003ccode\u003e0b1b7bb\u003c/code\u003e\u003c/a\u003e chore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38181\"\u003e#38181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/dfd062742271ad693c8bebe4ff1784cc4f408ade\"\u003e\u003ccode\u003edfd0627\u003c/code\u003e\u003c/a\u003e chore: bump starlette from 1.0.1 to 1.3.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38182\"\u003e#38182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/0269392514c41e44bfa0413c3f550c06e46d2e1e\"\u003e\u003ccode\u003e0269392\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38183\"\u003e#38183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/24d0b3791af52796b3fe5330f38e99b89afda4b1\"\u003e\u003ccode\u003e24d0b37\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38184\"\u003e#38184\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/f368854ec388f0a8e98b9e77aa8da83ebad1b978\"\u003e\u003ccode\u003ef368854\u003c/code\u003e\u003c/a\u003e chore: bump bleach from 6.2.0 to 6.4.0 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38195\"\u003e#38195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-core==1.4.7...langchain-core==1.4.8\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-google-genai` from 4.2.5 to 4.2.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain-google/releases\"\u003elangchain-google-genai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-google-genai==4.2.6\u003c/h2\u003e\n\u003cp\u003eChanges since libs/genai/v4.2.5\u003c/p\u003e\n\u003cp\u003erelease(genai): 4.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1871\"\u003e#1871\u003c/a\u003e)\nfix(genai): propagate generation config fields (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1870\"\u003e#1870\u003c/a\u003e)\nfix(genai): support constructor thinking config (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1869\"\u003e#1869\u003c/a\u003e)\nchore: bump langsmith from 0.8.0 to 0.8.18 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1860\"\u003e#1860\u003c/a\u003e)\ntest(genai,vertexai,community): refresh Gemini model references (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1856\"\u003e#1856\u003c/a\u003e)\nchore: bump types-google-cloud-ndb from 2.4.0.20260402 to 2.4.0.20260518 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1778\"\u003e#1778\u003c/a\u003e)\nchore: bump cryptography from 46.0.7 to 48.0.1 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1851\"\u003e#1851\u003c/a\u003e)\nchore: bump the major group across 1 directory with 3 updates (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1810\"\u003e#1810\u003c/a\u003e)\nfeat(genai,vertexai): add package version metadata (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1841\"\u003e#1841\u003c/a\u003e)\nfix(genai): stop docstring cross-refs resolving to wrong class (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1839\"\u003e#1839\u003c/a\u003e)\nchore(genai,vertexai): bump min version of \u003ccode\u003elangchain-core\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1835\"\u003e#1835\u003c/a\u003e)\ntest(genai): make tool-calling integration tests deterministic (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1833\"\u003e#1833\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/langchain-ai/langchain-google/commit/29780eac5b87e436f38ff11222b4ca37853fbacd\"\u003e\u003ccode\u003e29780ea\u003c/code\u003e\u003c/a\u003e release(genai): 4.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1871\"\u003e#1871\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/d2fb18c811f82cd86fc6b570e7b2b9ee67671ce8\"\u003e\u003ccode\u003ed2fb18c\u003c/code\u003e\u003c/a\u003e fix(genai): propagate generation config fields (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1870\"\u003e#1870\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/3086854c8e88dfc9f7d60d7dfabb9c8a7bc82297\"\u003e\u003ccode\u003e3086854\u003c/code\u003e\u003c/a\u003e fix(genai): support constructor thinking config (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1869\"\u003e#1869\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/32b18c6273749b7c9ece2c49b0ee13c13c659948\"\u003e\u003ccode\u003e32b18c6\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1858\"\u003e#1858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/f7d45305b825d08b72a9c42d9914d2fb53af1269\"\u003e\u003ccode\u003ef7d4530\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1860\"\u003e#1860\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/985efce66c0080da9ce6ae37d4c130873f301158\"\u003e\u003ccode\u003e985efce\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/community (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1859\"\u003e#1859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/eeb409fa0bd0ed86f0c885a7a9eae368c77af5d9\"\u003e\u003ccode\u003eeeb409f\u003c/code\u003e\u003c/a\u003e chore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1861\"\u003e#1861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/146a0168e5b75d62eb53db63262a18434b3fbc56\"\u003e\u003ccode\u003e146a016\u003c/code\u003e\u003c/a\u003e fix(vertexai): route labels to request envelope instead of \u003ccode\u003eGenerationConfig\u003c/code\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/bab2961434f405ab9efe64bdcc9065c85f95016f\"\u003e\u003ccode\u003ebab2961\u003c/code\u003e\u003c/a\u003e fix(vertexai): replace removed bison integration test models (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1863\"\u003e#1863\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/643f77297ad0d913bcc586d9c09c1a51f2c7805d\"\u003e\u003ccode\u003e643f772\u003c/code\u003e\u003c/a\u003e test(genai,vertexai,community): refresh Gemini model references (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1856\"\u003e#1856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain-google/compare/libs/genai/v4.2.5...libs/genai/v4.2.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langgraph` from 1.2.5 to 1.2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langgraph/releases\"\u003elanggraph's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elanggraph==1.2.7\u003c/h2\u003e\n\u003cp\u003eChanges since 1.2.6\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003erelease(langgraph): 1.2.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8223\"\u003e#8223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): snapshot \u003ccode\u003eDeltaChannel\u003c/code\u003e overwrite supersteps (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8125\"\u003e#8125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): Make \u003ccode\u003eOverwrite\u003c/code\u003e survive JSON roundtrips (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8127\"\u003e#8127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump redis in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7976\"\u003e#7976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8176\"\u003e#8176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump jupyterlab from 4.5.7 to 4.5.9 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8164\"\u003e#8164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): emit valid UUIDs for exit-mode delta task_ids for langgraph-api (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8165\"\u003e#8165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump bleach from 6.3.0 to 6.4.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8107\"\u003e#8107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump cryptography from 46.0.7 to 48.0.1 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8106\"\u003e#8106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump jupyter-server from 2.18.0 to 2.20.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8134\"\u003e#8134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump tornado from 6.5.6 to 6.5.7 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump pyjwt from 2.12.0 to 2.13.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8092\"\u003e#8092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003elanggraph==1.2.6\u003c/h2\u003e\n\u003cp\u003eChanges since 1.2.5\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003erelease(langgraph): 1.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8139\"\u003e#8139\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: nested subgraph inherits parent checkpoint_ns (regression in 1.2.3) (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8053\"\u003e#8053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: cancel running subgraphs on v3 stream abort [closes \u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8029\"\u003e#8029\u003c/a\u003e] (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8057\"\u003e#8057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erelease(cli): 0.4.30 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8101\"\u003e#8101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edocs: standardize package \u003ccode\u003eREADME.md\u003c/code\u003e structure (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8064\"\u003e#8064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump tornado from 6.5.5 to 6.5.6 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8063\"\u003e#8063\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/langchain-ai/langgraph/commit/5931a5f0b313feff24e2516a586c55601b868ac1\"\u003e\u003ccode\u003e5931a5f\u003c/code\u003e\u003c/a\u003e release(langgraph): 1.2.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8223\"\u003e#8223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/9a27693c64d3a0d6847dfe1c3d57e301cbf15bbf\"\u003e\u003ccode\u003e9a27693\u003c/code\u003e\u003c/a\u003e fix(langgraph): snapshot \u003ccode\u003eDeltaChannel\u003c/code\u003e overwrite supersteps (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8125\"\u003e#8125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/1b5ca0a1b1e1889879e43536fc5efd0739a3c479\"\u003e\u003ccode\u003e1b5ca0a\u003c/code\u003e\u003c/a\u003e fix(langgraph): Make \u003ccode\u003eOverwrite\u003c/code\u003e survive JSON roundtrips (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8127\"\u003e#8127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/d2f97191abc457954dff23ee1d9342516128ec01\"\u003e\u003ccode\u003ed2f9719\u003c/code\u003e\u003c/a\u003e chore(deps): bump redis in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7976\"\u003e#7976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/c1aad8b46053303c34151e4d05bad1ac0fd17ef5\"\u003e\u003ccode\u003ec1aad8b\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump starlette from 1.0.1 to 1.3.1 in /libs/sdk-py (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8104\"\u003e#8104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/d5dfeaf033227776efdd21e91e5dd200125d623a\"\u003e\u003ccode\u003ed5dfeaf\u003c/code\u003e\u003c/a\u003e chore(deps): bump starlette from 1.0.1 to 1.3.1 in /libs/cli (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8105\"\u003e#8105\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/bdb323efbbecdf9e417f8928471db4d9877bf332\"\u003e\u003ccode\u003ebdb323e\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/checkpoint-sqlite (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/31f69551b7b7f4c30b5ff7f5849e681a6c023be2\"\u003e\u003ccode\u003e31f6955\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/checkpoint-postgres...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/6b767dea5f61acb08a2f0248510201d35991c647\"\u003e\u003ccode\u003e6b767de\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.2 to 0.8.18 in /libs/checkpoint-conforma...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/e6574a854fcb60bb47e9f2ee463e01662a6d1a91\"\u003e\u003ccode\u003ee6574a8\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/cli (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8172\"\u003e#8172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langgraph/compare/1.2.5...1.2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langsmith` from 0.8.16 to 0.9.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langsmith-sdk/releases\"\u003elangsmith's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.9.7\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(integrations): add Google ADK Live voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3115\"\u003elangchain-ai/langsmith-sdk#3115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): attribute voice traces via ls_integration metadata by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3144\"\u003elangchain-ai/langsmith-sdk#3144\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): set ls_provider/ls_model_name on voice llm runs for cost by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3145\"\u003elangchain-ai/langsmith-sdk#3145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(release): bump version to 0.9.7 by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3153\"\u003elangchain-ai/langsmith-sdk#3153\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/langchain-ai/langsmith-sdk/compare/v0.9.6...v0.9.7\"\u003ehttps://github.com/langchain-ai/langsmith-sdk/compare/v0.9.6...v0.9.7\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev0.9.6\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(integrations): add Pipecat voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3112\"\u003elangchain-ai/langsmith-sdk#3112\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): add LiveKit voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3113\"\u003elangchain-ai/langsmith-sdk#3113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): add OpenAI Realtime voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3114\"\u003elangchain-ai/langsmith-sdk#3114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(js,python): Adds thread_id to metadata for Claude Agent SDK by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3141\"\u003elangchain-ai/langsmith-sdk#3141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(py): serialize tuple-keyed trace dictionaries by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3116\"\u003elangchain-ai/langsmith-sdk#3116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(py): guard OTEL span cleanup [closes \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3080\"\u003e#3080\u003c/a\u003e] by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3118\"\u003elangchain-ai/langsmith-sdk#3118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the npm_and_yarn group across 3 directories with 2 updates 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/langchain-ai/langsmith-sdk/pull/3123\"\u003elangchain-ai/langsmith-sdk#3123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump pnpm/action-setup from 6.0.8 to 6.0.9 in the actions-minor-and-patch group 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/langchain-ai/langsmith-sdk/pull/3131\"\u003elangchain-ai/langsmith-sdk#3131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the actions-major group with 4 updates 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/langchain-ai/langsmith-sdk/pull/3133\"\u003elangchain-ai/langsmith-sdk#3133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump the js-minor-and-patch group in /js with 14 updates 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/langchain-ai/langsmith-sdk/pull/3132\"\u003elangchain-ai/langsmith-sdk#3132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the py-major group across 1 directory with 3 updates 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/langchain-ai/langsmith-sdk/pull/3138\"\u003elangchain-ai/langsmith-sdk#3138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the py-minor-and-patch group across 1 directory with 21 updates 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/langchain-ai/langsmith-sdk/pull/3140\"\u003elangchain-ai/langsmith-sdk#3140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the npm_and_yarn group across 4 directories with 1 update 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/langchain-ai/langsmith-sdk/pull/3148\"\u003elangchain-ai/langsmith-sdk#3148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): update pydata-sphinx-theme requirement from \u0026gt;=0.18.0 to \u0026gt;=0.19.0 in /python 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/langchain-ai/langsmith-sdk/pull/3137\"\u003elangchain-ai/langsmith-sdk#3137\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump the js-major group across 1 directory with 7 updates 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/langchain-ai/langsmith-sdk/pull/3134\"\u003e...\n\n_Description has been truncated_","html_url":"https://github.com/SMSLYCLOUD/smsly-hosting/pull/220","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/SMSLYCLOUD%2Fsmsly-hosting/issues/220","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/220/packages"},{"uuid":"4810631020","node_id":"PR_kwDORk-6487t7zSi","number":10,"state":"closed","title":"chore(deps): bump the python-deps group across 1 directory with 12 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-05T23:23:33.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-04T21:38:27.000Z","updated_at":"2026-07-05T23:23:35.000Z","time_to_close":92706,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-deps","update_count":12,"packages":[{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"ruff","old_version":"0.15.17","new_version":"0.15.20","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"1.20.2","new_version":"2.1.0","repository_url":"https://github.com/python/mypy"},{"name":"pytest","old_version":"9.1.0","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"ast-serialize","old_version":"0.5.0","new_version":"0.6.0","repository_url":"https://github.com/mypyc/ast_serialize"},{"name":"coverage","old_version":"7.14.1","new_version":"7.15.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"librt","old_version":"0.11.0","new_version":"0.12.0","repository_url":"https://github.com/mypyc/librt"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [click](https://github.com/pallets/click), [docker](https://github.com/docker/docker-py), [nvidia-ml-py](https://forums.developer.nvidia.com), [ruff](https://github.com/astral-sh/ruff), [mypy](https://github.com/python/mypy), [pytest](https://github.com/pytest-dev/pytest), [pre-commit](https://github.com/pre-commit/pre-commit), [setuptools](https://github.com/pypa/setuptools), [ast-serialize](https://github.com/mypyc/ast_serialize), [coverage](https://github.com/coveragepy/coveragepy), [librt](https://github.com/mypyc/librt) and [typing-extensions](https://github.com/python/typing_extensions) to permit the latest version.\nUpdates `click` from 8.4.1 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\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\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.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `docker` to 7.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/docker/docker-py/releases\"\u003edocker's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003ch2\u003eUpgrade Notes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBumped minimum engine API version to 1.24\u003c/li\u003e\n\u003cli\u003eBumped default engine API version to 1.44 (Moby 25.0)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed issue with tag parsing when the registry address includes ports that resulted in \u003ccode\u003einvalid tag format\u003c/code\u003e errors\u003c/li\u003e\n\u003cli\u003eFixed issue preventing creating new configs (\u003ccode\u003eConfigCollection\u003c/code\u003e), which failed with a \u003ccode\u003eKeyError\u003c/code\u003e due to the \u003ccode\u003ename\u003c/code\u003e field\u003c/li\u003e\n\u003cli\u003eFixed an issue due to an update in the \u003ca href=\"https://github.com/psf/requests\"\u003erequests\u003c/a\u003e package breaking \u003ccode\u003edocker-py\u003c/code\u003e by applying the \u003ca href=\"https://redirect.github.com/psf/requests/pull/6710\"\u003esuggested fix\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMiscellaneous\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumentation improvements\u003c/li\u003e\n\u003cli\u003eUpdated Ruff (linter) and fixed minor linting issues\u003c/li\u003e\n\u003cli\u003ePackaging/CI updates\n\u003cul\u003e\n\u003cli\u003eStarted using hatch for packaging (\u003ca href=\"https://github.com/pypa/hatch\"\u003ehttps://github.com/pypa/hatch\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003esetup-python\u003c/code\u003e github action\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpdated tests\n\u003cul\u003e\n\u003cli\u003eStopped checking for deprecated container and image related fields (\u003ccode\u003eContainer\u003c/code\u003e and \u003ccode\u003eContainerConfig\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated tests that check \u003ccode\u003eNetworkSettings.Networks.\u0026lt;network\u0026gt;.Aliases\u003c/code\u003e due to engine changes\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump default API version to 1.43 (Moby 24.0) by \u003ca href=\"https://github.com/vvoland\"\u003e\u003ccode\u003e@​vvoland\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3199\"\u003edocker/docker-py#3199\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eintegration/commit: Don't check for deprecated fields by \u003ca href=\"https://github.com/vvoland\"\u003e\u003ccode\u003e@​vvoland\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3203\"\u003edocker/docker-py#3203\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: tag regex should allow ports by \u003ca href=\"https://github.com/artificial-intelligence\"\u003e\u003ccode\u003e@​artificial-intelligence\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3196\"\u003edocker/docker-py#3196\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eutils: Fix datetime_to_timestamp by \u003ca href=\"https://github.com/vvoland\"\u003e\u003ccode\u003e@​vvoland\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3208\"\u003edocker/docker-py#3208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: keyerror when creating new config(\u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3110\"\u003e#3110\u003c/a\u003e) by \u003ca href=\"https://github.com/Khushiyant\"\u003e\u003ccode\u003e@​Khushiyant\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3200\"\u003edocker/docker-py#3200\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate Ruff, fix some minor issues by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3206\"\u003edocker/docker-py#3206\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: change image.history() return type to list (\u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3076\"\u003e#3076\u003c/a\u003e) by \u003ca href=\"https://github.com/Khushiyant\"\u003e\u003ccode\u003e@​Khushiyant\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3202\"\u003edocker/docker-py#3202\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003elint: fix string formatting by \u003ca href=\"https://github.com/milas\"\u003e\u003ccode\u003e@​milas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3211\"\u003edocker/docker-py#3211\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop \u003ccode\u003epackaging\u003c/code\u003e dependency by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3205\"\u003edocker/docker-py#3205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump default API version to 1.44 (Moby 25.0) by \u003ca href=\"https://github.com/vvoland\"\u003e\u003ccode\u003e@​vvoland\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3231\"\u003edocker/docker-py#3231\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eModernize build to use \u003ccode\u003ehatchling\u003c/code\u003e and \u003ccode\u003ehatch-vcs\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3207\"\u003edocker/docker-py#3207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable Ruff I (import sort), autofix by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3212\"\u003edocker/docker-py#3212\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(ci): fix-ups across Make / Docker / GitHub Actions by \u003ca href=\"https://github.com/milas\"\u003e\u003ccode\u003e@​milas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3241\"\u003edocker/docker-py#3241\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: fix return type docs for \u003ccode\u003econtainer.logs()\u003c/code\u003e by \u003ca href=\"https://github.com/BobDu\"\u003e\u003ccode\u003e@​BobDu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/2240\"\u003edocker/docker-py#2240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCI fix  by \u003ca href=\"https://github.com/krissetto\"\u003e\u003ccode\u003e@​krissetto\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3260\"\u003edocker/docker-py#3260\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix for requests 2.32 by \u003ca href=\"https://github.com/felixfontein\"\u003e\u003ccode\u003e@​felixfontein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3257\"\u003edocker/docker-py#3257\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded 7.1.0 changelog by \u003ca href=\"https://github.com/krissetto\"\u003e\u003ccode\u003e@​krissetto\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3262\"\u003edocker/docker-py#3262\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env var name in release pipeline by \u003ca href=\"https://github.com/krissetto\"\u003e\u003ccode\u003e@​krissetto\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3263\"\u003edocker/docker-py#3263\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange env var name in release pipeline to match hatch expectations by \u003ca href=\"https://github.com/krissetto\"\u003e\u003ccode\u003e@​krissetto\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3264\"\u003edocker/docker-py#3264\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/vvoland\"\u003e\u003ccode\u003e@​vvoland\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3199\"\u003edocker/docker-py#3199\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/artificial-intelligence\"\u003e\u003ccode\u003e@​artificial-intelligence\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3196\"\u003edocker/docker-py#3196\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Khushiyant\"\u003e\u003ccode\u003e@​Khushiyant\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3200\"\u003edocker/docker-py#3200\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BobDu\"\u003e\u003ccode\u003e@​BobDu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/2240\"\u003edocker/docker-py#2240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/krissetto\"\u003e\u003ccode\u003e@​krissetto\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3260\"\u003edocker/docker-py#3260\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/docker/docker-py/compare/7.0.0...7.1.0\"\u003ehttps://github.com/docker/docker-py/compare/7.0.0...7.1.0\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/docker/docker-py/commit/a3652028b1ead708bd9191efb286f909ba6c2a49\"\u003e\u003ccode\u003ea365202\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3264\"\u003e#3264\u003c/a\u003e from krissetto/rename-env-var-in-release-pipeline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/1ab40c8e926c0b892b3ef47ae8acc274fc13f250\"\u003e\u003ccode\u003e1ab40c8\u003c/code\u003e\u003c/a\u003e Fix env var name in release pipeline to match hatch expectations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/b33088e0ca1bd40e45ad759a61cf084e9628043e\"\u003e\u003ccode\u003eb33088e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3263\"\u003e#3263\u003c/a\u003e from krissetto/fix-release-pipeline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/45488acfc1851c5b5358ec7d8030a754c5f23783\"\u003e\u003ccode\u003e45488ac\u003c/code\u003e\u003c/a\u003e Fix env var name in release pipeline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/20879eca6ae19ef406e918baa1e220aa37ba29a2\"\u003e\u003ccode\u003e20879ec\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3262\"\u003e#3262\u003c/a\u003e from krissetto/changelog-7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/4f2a26d21e81774cbb8e025b01de001a3ac3a545\"\u003e\u003ccode\u003e4f2a26d\u003c/code\u003e\u003c/a\u003e Added 7.1.0 changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/7785ad913ddf2d86478f08278bb2c488d05a29ff\"\u003e\u003ccode\u003e7785ad9\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3257\"\u003e#3257\u003c/a\u003e from felixfontein/requests-hotfix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/d8e9bcb2780607faf388f8832bff3865eb24dce0\"\u003e\u003ccode\u003ed8e9bcb\u003c/code\u003e\u003c/a\u003e requests 2.32.0 and 2.32.1 have been yanked.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/2a059a9f19c7b37c6c71c233754c6845e325d1ec\"\u003e\u003ccode\u003e2a059a9\u003c/code\u003e\u003c/a\u003e Extend fix to requests 2.32.2+.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/e33e0a437ecd895158c8cb4322a0cdad79312636\"\u003e\u003ccode\u003ee33e0a4\u003c/code\u003e\u003c/a\u003e Hotfix for requests 2.32.0.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/docker/docker-py/compare/6.0.0...7.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `nvidia-ml-py` to 13.610.43\n\nUpdates `ruff` from 0.15.17 to 0.15.20\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.20\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-25.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning instead of an error for unknown rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26113\"\u003e#26113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch \u003ccode\u003enoqa\u003c/code\u003e shebang handling in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26286\"\u003e#26286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26240\"\u003e#26240\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd versioning sections to custom crate READMEs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26317\"\u003e#26317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eruff_python_parser\u003c/code\u003e README for crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26315\"\u003e#26315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Clarify that \u003ccode\u003ePERF402\u003c/code\u003e applies to any iterable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26242\"\u003e#26242\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/dhruvmanila\"\u003e\u003ccode\u003e@​dhruvmanila\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/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.20\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.15.20\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFile\u003c/th\u003e\n\u003cth\u003ePlatform\u003c/th\u003e\n\u003cth\u003eChecksum\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz\"\u003eruff-aarch64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eApple Silicon macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz\"\u003eruff-x86_64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eIntel macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip\"\u003eruff-aarch64-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eARM64 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip\"\u003eruff-i686-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex86 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip\"\u003eruff-x86_64-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex64 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz\"\u003eruff-aarch64-unknown-linux-gnu.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eARM64 Linux\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz\"\u003eruff-i686-unknown-linux-gnu.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex86 Linux\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\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.20\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-25.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning instead of an error for unknown rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26113\"\u003e#26113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch \u003ccode\u003enoqa\u003c/code\u003e shebang handling in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26286\"\u003e#26286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26240\"\u003e#26240\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd versioning sections to custom crate READMEs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26317\"\u003e#26317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eruff_python_parser\u003c/code\u003e README for crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26315\"\u003e#26315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Clarify that \u003ccode\u003ePERF402\u003c/code\u003e applies to any iterable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26242\"\u003e#26242\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/dhruvmanila\"\u003e\u003ccode\u003e@​dhruvmanila\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/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.19\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-23.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport human-readable names when hovering suppression comments and in code actions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26114\"\u003e#26114\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFall back to default settings when editor-only settings are invalid (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26244\"\u003e#26244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix panic when inserting text at a notebook cell boundary (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26111\"\u003e#26111\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] Update fix suggestions for \u003ccode\u003e__floor__\u003c/code\u003e, \u003ccode\u003e__trunc__\u003c/code\u003e, \u003ccode\u003e__length_hint__\u003c/code\u003e, and \u003ccode\u003e__matmul__\u003c/code\u003e variants (\u003ccode\u003ePLC2801\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26239\"\u003e#26239\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid allocating when parsing single string literals (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26200\"\u003e#26200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid reallocating singleton call arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26223\"\u003e#26223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create source files for lint diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26226\"\u003e#26226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eOptimize formatter text width and indentation (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26236\"\u003e#26236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReserve capacity for builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26229\"\u003e#26229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip repeated-key checks for singleton dictionaries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26228\"\u003e#26228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ArrayVec for qualified name segments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26224\"\u003e#26224\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/f82a36b6baf8c0547a17bbde6c0d927ccd45d938\"\u003e\u003ccode\u003ef82a36b\u003c/code\u003e\u003c/a\u003e Bump 0.15.20 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26376\"\u003e#26376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/af329438b55d5aa8ca28725f17abbae63b5c815d\"\u003e\u003ccode\u003eaf32943\u003c/code\u003e\u003c/a\u003e Improve the summarise-ecosystem-results skill (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26378\"\u003e#26378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/485ebab5de692aad34720898cd80245b6092ba86\"\u003e\u003ccode\u003e485ebab\u003c/code\u003e\u003c/a\u003e Remove \u003ccode\u003eRUF076\u003c/code\u003e name from schema (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ef81835ce3da615346584dc446de0fe26bfc154b\"\u003e\u003ccode\u003eef81835\u003c/code\u003e\u003c/a\u003e [ty] Implement rust-analyzer's \u0026quot;Click for full compiler diagnostic\u0026quot; feature (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/572b31e2377a701a7365f069f6ef87002962cb2b\"\u003e\u003ccode\u003e572b31e\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26240\"\u003e#26240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f703f219d7fddd1a4abba9fa81e34773c185a4b9\"\u003e\u003ccode\u003ef703f21\u003c/code\u003e\u003c/a\u003e Allow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0d726b28ee35413926145ffef4ac1143cae9ea1e\"\u003e\u003ccode\u003e0d726b2\u003c/code\u003e\u003c/a\u003e [ty] Reuse equality semantics for membership compatibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25955\"\u003e#25955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/dbe6e9848c3f78fdaf543cfc000939ebc73b5f00\"\u003e\u003ccode\u003edbe6e98\u003c/code\u003e\u003c/a\u003e [ty] Infer definite equality comparison results (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26337\"\u003e#26337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e700ea357a2196d76b58eb89b2031ddb5ca896e0\"\u003e\u003ccode\u003ee700ea3\u003c/code\u003e\u003c/a\u003e [ty] Prove TypedDict structural patterns exhaustive (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26285\"\u003e#26285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6a0d2ec93959d966430b8c39d4de5c3e8a88e911\"\u003e\u003ccode\u003e6a0d2ec\u003c/code\u003e\u003c/a\u003e [ty] Widen inferred class-valued instance attributes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26338\"\u003e#26338\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.20\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 1.20.2 to 2.1.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.1\u003c/h2\u003e\n\u003cp\u003eWe’ve just uploaded mypy 2.1.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\u003elibrt.vecs: Fast Growable Array Type for Mypyc\u003c/h3\u003e\n\u003cp\u003eThe new \u003ccode\u003elibrt.vecs\u003c/code\u003e module provides an efficient growable array type \u003ccode\u003evec\u003c/code\u003e that is\noptimized for mypyc use. It provides fast, packed arrays with integer and floating point\nvalue types, which can be \u003cstrong\u003eseveral times faster\u003c/strong\u003e than \u003ccode\u003elist\u003c/code\u003e, and tens of times faster\nthan \u003ccode\u003earray.array\u003c/code\u003e in code compiled using mypyc. It also supports nested \u003ccode\u003evec\u003c/code\u003e objects and\nnon-value-type items, such as \u003ccode\u003evec[vec[str]]\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eRefer to the \u003ca href=\"https://mypyc.readthedocs.io/en/latest/librt_vecs.html\"\u003edocumentation\u003c/a\u003e for\nthe details.\u003c/p\u003e\n\u003cp\u003eContributed by Jukka Lehtosalo.\u003c/p\u003e\n\u003ch3\u003elibrt.random: Fast Pseudo-Random Number Generation\u003c/h3\u003e\n\u003cp\u003eThe new \u003ccode\u003elibrt.random\u003c/code\u003e module provides fast pseudo-random number generation that is\noptimized for code compiled using mypyc. It can be 3x to 10x faster than the stdlib\n\u003ccode\u003erandom\u003c/code\u003e module in compiled code.\u003c/p\u003e\n\u003cp\u003eRefer to the \u003ca href=\"https://mypyc.readthedocs.io/en/latest/librt_random.html\"\u003edocumentation\u003c/a\u003e for\nthe details.\u003c/p\u003e\n\u003cp\u003eContributed by Jukka Lehtosalo (PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21433\"\u003e21433\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMypyc Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnable incremental self-compilation (Vaggelis Danias, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21369\"\u003e21369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake compilation order with multiple files consistent (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21419\"\u003e21419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash on accessing \u003ccode\u003eStopAsyncIteration\u003c/code\u003e (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21406\"\u003e21406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix incremental compilation with \u003ccode\u003eseparate\u003c/code\u003e flag (Vaggelis Danias, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21299\"\u003e21299\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes to Crashes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix crash on partial type with \u003ccode\u003e--allow-redefinition\u003c/code\u003e and \u003ccode\u003eglobal\u003c/code\u003e declaration (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21428\"\u003e21428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix broken awaitable generator patching (Ivan Levkivskyi, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21435\"\u003e21435\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/c1c336d7e34eb313080c79b156518c58d27c7234\"\u003e\u003ccode\u003ec1c336d\u003c/code\u003e\u003c/a\u003e Remove +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/74df14b7cbf08140236aa45bbb7f42219b0b1df7\"\u003e\u003ccode\u003e74df14b\u003c/code\u003e\u003c/a\u003e Add changelog for mypy 2.1 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21464\"\u003e#21464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/022d9bc96f86c40f338a5cf150f1806cc8f300ff\"\u003e\u003ccode\u003e022d9bc\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;TypeForm: Enable by default (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21262\"\u003e#21262\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8826288214f1cb31496e610667481221e025359c\"\u003e\u003ccode\u003e8826288\u003c/code\u003e\u003c/a\u003e [mypyc] Document librt.random (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21463\"\u003e#21463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3f4067b699dbe52d08e42ef3b3ebfdebdc06bd96\"\u003e\u003ccode\u003e3f4067b\u003c/code\u003e\u003c/a\u003e Bump librt version to 0.11.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21458\"\u003e#21458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2b1eb58a250c5f1eb4ef5fb1f312ff528c5a1d4e\"\u003e\u003ccode\u003e2b1eb58\u003c/code\u003e\u003c/a\u003e [mypyc] Enable incremental self-compilation (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21369\"\u003e#21369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8152f4af3f6c03beaf2660026240f0fdce7feecc\"\u003e\u003ccode\u003e8152f4a\u003c/code\u003e\u003c/a\u003e Respect file config comments for stale modules (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21444\"\u003e#21444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/116d60bdd3fdfe8d97c6afe99370910db56f1b92\"\u003e\u003ccode\u003e116d60b\u003c/code\u003e\u003c/a\u003e Fix nondeterminism from nonassociativity of overload joins (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21455\"\u003e#21455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/6c4af8e42110cea3f84bc02add2ca7b89c268210\"\u003e\u003ccode\u003e6c4af8e\u003c/code\u003e\u003c/a\u003e Fix function call message change for small number of args (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21432\"\u003e#21432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4b8fdcaf24032592510e8f15421fb32d82a71800\"\u003e\u003ccode\u003e4b8fdca\u003c/code\u003e\u003c/a\u003e [mypyc] Add librt.random module (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21433\"\u003e#21433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v1.20.2...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.1.0 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\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/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.1.0...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` to 4.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier usage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.0 - 2026-04-21\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier\nusage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\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/pre-commit/pre-commit/commit/f35134b05028ec938ac605ae500fdf95462655d3\"\u003e\u003ccode\u003ef35134b\u003c/code\u003e\u003c/a\u003e v4.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2a51ffcb81f6c8ed2e6467913c3343a8800f3ab9\"\u003e\u003ccode\u003e2a51ffc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e from pre-commit/hook-impl-optional-hook-dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/d7dee322abfc765b042f2e3b872aab3c3a867610\"\u003e\u003ccode\u003ed7dee32\u003c/code\u003e\u003c/a\u003e make --hook-dir optional for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/965aeb1c680e8b526342153547f0ec014484c63d\"\u003e\u003ccode\u003e965aeb1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e from pre-commit/hook-impl-required\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2eacc064aa9b5bb33d3a0d84a234b475e34f3096\"\u003e\u003ccode\u003e2eacc06\u003c/code\u003e\u003c/a\u003e --hook-type is required for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f5678bf4ac35cffc0ff7174ad85f7fdc2a5c977e\"\u003e\u003ccode\u003ef5678bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3657\"\u003e#3657\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/054cc5bd6bb1b20faa1eefe09f0de3b68fceee94\"\u003e\u003ccode\u003e054cc5b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/5c0f3024d2524f6e029a4c333392fd9be9fb27f6\"\u003e\u003ccode\u003e5c0f302\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3652\"\u003e#3652\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/a5d91142676630f8130020b35e166e0c0e92b8f4\"\u003e\u003ccode\u003ea5d9114\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/129a1f5ca1eaee0c952a5e7a07faae305c5e15bc\"\u003e\u003ccode\u003e129a1f5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3641\"\u003e#3641\u003c/a\u003e from pre-commit/mxr-patch-1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v3.7.0...v4.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `setuptools` to 83.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/setuptools/blob/main/NEWS.rst\"\u003esetuptools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev83.0.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.10 or later.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eMANIFEST.in\u003c/code\u003e matching (via \u003ccode\u003eFileList\u003c/code\u003e) is now insensitive to Unicode\nnormalization form. A pattern authored in one form (e.g. NFC, as typically\nsaved by editors) now matches a file whose name is stored on disk in another\n(e.g. NFD, as produced by macOS APFS/HFS+). Previously an \u003ccode\u003eexclude\u003c/code\u003e,\n\u003ccode\u003eglobal-exclude\u003c/code\u003e, \u003ccode\u003erecursive-exclude\u003c/code\u003e, or \u003ccode\u003eprune\u003c/code\u003e rule could silently\nfail to drop a non-ASCII-named file from the source distribution, publishing\nit despite the exclusion -- see GHSA-h35f-9h28-mq5c.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epypa/distutils#334\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev82.0.1\u003c/h1\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the loading of \u003ccode\u003elauncher manifest.xml\u003c/code\u003e file. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5047\"\u003e#5047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplaced deprecated \u003ccode\u003ejson.__version__\u003c/code\u003e with fixture in tests. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5186\"\u003e#5186\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd advice about how to improve predictability when installing sdists. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5168\"\u003e#5168\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/4941\"\u003e#4941\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5157\"\u003e#5157\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5169\"\u003e#5169\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5175\"\u003e#5175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ev82.0.0\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/setuptools/commit/6519f728c6f23c992df81a5691ef7655184a20eb\"\u003e\u003ccode\u003e6519f72\u003c/code\u003e\u003c/a\u003e Bump version: 82.0.1 → 83.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/d1151b125b29a6ee1c7db860f7ee6c365d525b5f\"\u003e\u003ccode\u003ed1151b1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5250\"\u003e#5250\u003c/a\u003e from pypa/feature/distutils-d7633fbed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a2df31e6a741b0fe775969618fe6a3a3d032e900\"\u003e\u003ccode\u003ea2df31e\u003c/code\u003e\u003c/a\u003e Capture removal of dry_run parameter in changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/00144dc3fb6d023fd81cdc26c380a012b084df9b\"\u003e\u003ccode\u003e00144dc\u003c/code\u003e\u003c/a\u003e Moved newsfragment to the release where it occurred.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a4a5a2b160357be77626aa077ddd1d8ee53be50f\"\u003e\u003ccode\u003ea4a5a2b\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/77470c23c35031c9e37d7512694ac5ca52bfcaac\"\u003e\u003ccode\u003e77470c2\u003c/code\u003e\u003c/a\u003e Merge \u003ca href=\"https://github.com/pypa/distutils\"\u003ehttps://github.com/pypa/distutils\u003c/a\u003e into feature/distutils-d7633fbed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/3c43897420f25a1be1afe6eaa905d056009cc736\"\u003e\u003ccode\u003e3c43897\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5247\"\u003e#5247\u003c/a\u003e from pypa/copilot/fix-pypy-version-issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/bb6ea66b4bd01cb35d7c68a1bc61b96d59190269\"\u003e\u003ccode\u003ebb6ea66\u003c/code\u003e\u003c/a\u003e Bump PyPy from 3.10 to 3.11 in CI workflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a2bc3aca2f55eb9b93ea633e58ba68170ce14451\"\u003e\u003ccode\u003ea2bc3ac\u003c/code\u003e\u003c/a\u003e Fix broken intersphinx reference to build's installation docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/2d6a739c64cfedc65e1f635af7b52340aac8d99b\"\u003e\u003ccode\u003e2d6a739\u003c/code\u003e\u003c/a\u003e Use stacked parametrize decorators instead of itertools.product\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/setuptools/compare/v64.0.0...v83.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ast-serialize` from 0.5.0 to 0.6.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/ast_serialize/commit/ecf7e987c73454fb2ed5b099103a8bfba75c9dfa\"\u003e\u003ccode\u003eecf7e98\u003c/code\u003e\u003c/a\u003e Bump version to 0.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/ast_serialize/commit/af13fa7f5f068023786f7b67ba852894a913e24b\"\u003e\u003ccode\u003eaf13fa7\u003c/code\u003e\u003c/a\u003e Add experimental WASM wheels (\u003ca href=\"https://redirect.github.com/mypyc/ast_serialize/issues/69\"\u003e#69\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mypyc/ast_serialize/compare/v0.5.0...v0.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.14.1 to 7.15.0\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.0 — 2026-07-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSince 7.14.0, reporting commands implicitly combine parallel data files. Now\nthose commands have a new option \u003ccode\u003e--keep-combined\u003c/code\u003e to retain the data files\nafter combining them instead of the default, which is to delete them.\nFinishes \u003ccode\u003eissue 2198\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report would incorrectly count excluded functions as uncovered,\nas described in \u003ccode\u003eissue 2205\u003c/code\u003e\u003cem\u003e. This is now fixed thanks to \u003ccode\u003eMartin Kuntz Jacobsen \u0026lt;pull 2206_\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen running your program, coverage now correctly sets\n\u003ccode\u003eyourmodule.__spec__.loader\u003c/code\u003e as \u003ccode\u003estrongly recommended \u0026lt;--loader--_\u0026gt;\u003c/code\u003e\u003cem\u003e,\navoiding the deprecation warning described in \u003ccode\u003eissue 2208\u003c/code\u003e\u003c/em\u003e. Thanks, \u003ccode\u003eA5rocks \u0026lt;pull 2209_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: with Python 3.10, running with the \u003ccode\u003e-I\u003c/code\u003e (isolated mode) option didn't\ncorrectly omit the current directory from the module search path, as\ndescribed in \u003ccode\u003eissue 2103\u003c/code\u003e\u003cem\u003e. That is now fixed thanks to \u003ccode\u003eIlia Sorokin \u0026lt;pull 2211_\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. \u003cem\u003e--loader--: \u003ca href=\"https://docs.python.org/3/reference/datamodel.html#module.__loader\"\u003ehttps://docs.python.org/3/reference/datamodel.html#module.__loader\u003c/a\u003e\u003c/em\u003e_\n.. _issue 2103:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2103\"\u003ecoveragepy/coveragepy#2103\u003c/a\u003e\n.. _issue 2198:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2198\"\u003ecoveragepy/coveragepy#2198\u003c/a\u003e\n.. _issue 2205:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2205\"\u003ecoveragepy/coveragepy#2205\u003c/a\u003e\n.. _pull 2206: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2206\"\u003ecoveragepy/coveragepy#2206\u003c/a\u003e\n.. _issue 2208:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2208\"\u003ecoveragepy/coveragepy#2208\u003c/a\u003e\n.. _pull 2209: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2209\"\u003ecoveragepy/coveragepy#2209\u003c/a\u003e\n.. _pull 2211: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2211\"\u003ecoveragepy/coveragepy#2211\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.14.3 — 2026-06-22\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the default \u003ccode\u003e...\u003c/code\u003e exclusion rule now also matches function bodies\nwhose closing return-type bracket is on its own line (for example, after a\nlong \u003ccode\u003e-\u0026gt; dict[ ... ]\u003c/code\u003e annotation that a formatter has split over multiple\nlines). Closes \u003ccode\u003eissue 2185\u003c/code\u003e\u003cem\u003e, thanks \u003ccode\u003eMengjia Shang \u0026lt;pull 2196_\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: On 3.13t, we incorrectly issued \u003ccode\u003eCouldn't import C tracer\u003c/code\u003e errors.\nWe can't import the C tracer because in 7.14.2 we stopped shipping compiled\nwheels for 3.13t. Thanks, \u003ccode\u003eHugo van Kemenade \u0026lt;pull 2203_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2185: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2185\"\u003ecoveragepy/coveragepy#2185\u003c/a\u003e\n.. _pull 2196: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2196\"\u003ecoveragepy/coveragepy#2196\u003c/a\u003e\n.. _pull 2203: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2203\"\u003ecoveragepy/coveragepy#2203\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/coveragepy/coveragepy/commit/c8c8020e26394526ad24184879f5867bb46b0785\"\u003e\u003ccode\u003ec8c8020\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ae19db1fb3880f2b2bb0c03e3d76855cb71ce5f7\"\u003e\u003ccode\u003eae19db1\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/17b45a14119cb52bdf8170d1aa01f84a42b580e6\"\u003e\u003ccode\u003e17b45a1\u003c/code\u003e\u003c/a\u003e docs: --keep-combined in the man page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/6f9fa1e1e8a89f62c69dbf3b38e0adb744d6d4b2\"\u003e\u003ccode\u003e6f9fa1e\u003c/code\u003e\u003c/a\u003e fix: preserve isolated sys.path on Python 3.10 (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2211\"\u003e#2211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/787af5ff90e8a73bfd8cba7d5661b4930cc53ce5\"\u003e\u003ccode\u003e787af5f\u003c/code\u003e\u003c/a\u003e chore: bump actions/checkout in the action-dependencies group (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2210\"\u003e#2210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1ed39982fe550fc542a9ed3d5561dec29737b0dc\"\u003e\u003ccode\u003e1ed3998\u003c/code\u003e\u003c/a\u003e fix: start attaching the loader on \u003ccode\u003e__spec__\u003c/code\u003e \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2208\"\u003e#2208\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2209\"\u003e#2209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1ab11229351f522d309f8cc54a542e4b97c78113\"\u003e\u003ccode\u003e1ab1122\u003c/code\u003e\u003c/a\u003e docs: remove stray comma\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f24a91f6d00b888c1d3d7c438cfe70294ad0c6ea\"\u003e\u003ccode\u003ef24a91f\u003c/code\u003e\u003c/a\u003e feat: --keep-combined for reporting commands. \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2198\"\u003e#2198\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/5e70751905386500e35d1382061178da3ce5519e\"\u003e\u003ccode\u003e5e70751\u003c/code\u003e\u003c/a\u003e test: canonicalize mock calls in test_cmdline to reduce diff noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/65979cc05b7f6b10c3e27c84408867fd9bc30846\"\u003e\u003ccode\u003e65979cc\u003c/code\u003e\u003c/a\u003e fix: skip excluded functions in LCOV function totals (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2206\"\u003e#2206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.1...7.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `librt` from 0.11.0 to 0.12.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/3254e8804aab61ff44ded318210aa0a77491f9d2\"\u003e\u003ccode\u003e3254e88\u003c/code\u003e\u003c/a\u003e Sync mypy and bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/99fee49c6bae585a371f0b68b6437f8697cb1236\"\u003e\u003ccode\u003e99fee49\u003c/code\u003e\u003c/a\u003e Publish Pyodide wheels to PyPI (\u003ca href=\"https://redirect.github.com/mypyc/librt/issues/42\"\u003e#42\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/de95e59d8dff40b4ee07e9d57b1ebd0e49ca92f2\"\u003e\u003ccode\u003ede95e59\u003c/code\u003e\u003c/a\u003e Add readme links to librt docs under mypyc docs (\u003ca href=\"https://redirect.github.com/mypyc/librt/issues/41\"\u003e#41\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mypyc/librt/compare/v0.11.0...v0.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.15.0 to 4.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is ap...\n\n_Description has been truncated_","html_url":"https://github.com/Kavyvachhani/SysDock/pull/10","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kavyvachhani%2FSysDock/issues/10","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/10/packages"},{"uuid":"4808318492","node_id":"PR_kwDOTJNVh87t0zyq","number":6,"state":"closed","title":"chore(deps): bump the python-dependencies group across 1 directory with 6 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-06T03:12:22.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-04T08:48:00.000Z","updated_at":"2026-07-06T03:12:24.000Z","time_to_close":152662,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-dependencies","update_count":6,"packages":[{"name":"narwhals","old_version":"2.22.1","new_version":"2.23.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pydeck","old_version":"0.9.2","new_version":"0.9.3","repository_url":"https://github.com/visgl/deck.gl"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"uvicorn","old_version":"0.49.0","new_version":"0.50.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pytest","old_version":"7.4.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 6 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.22.1` | `2.23.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [pydeck](https://github.com/visgl/deck.gl) | `0.9.2` | `0.9.3` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.49.0` | `0.50.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `7.4.3` | `9.1.1` |\n\n\nUpdates `narwhals` from 2.22.1 to 2.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/narwhals-dev/narwhals/releases\"\u003enarwhals's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eNarwhals v2.23.0\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003ch2\u003e✨ Enhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: Add \u003ccode\u003eselectors.enum\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3729\"\u003e#3729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: Add support for \u003ccode\u003eFloat16\u003c/code\u003e datatype (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3725\"\u003e#3725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add top-level covariance expression (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3684\"\u003e#3684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(ibis): support y/q/mo/d units in dt.offset_by (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3683\"\u003e#3683\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐞 Bug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: Explicitely pass \u003ccode\u003eorient=\u0026quot;row\u0026quot;\u003c/code\u003e in \u003ccode\u003epl.from_numpy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3732\"\u003e#3732\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: Allow to select polars Categorical with fixed categories (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3727\"\u003e#3727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: Lift \u003ccode\u003esample\u003c/code\u003e arguments validation, bump pyright and numpy deps (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3724\"\u003e#3724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(typing): Preserve stable \u003ccode\u003eExpr\u003c/code\u003e subclass through when/then/otherwise chains (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(pyarrow): correct \u003ccode\u003ecorr\u003c/code\u003e null handling and expose \u003ccode\u003ecorr\u003c/code\u003e/\u003ccode\u003ecov\u003c/code\u003e in stable.v1 (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3687\"\u003e#3687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(tests): Parametrize CSV conflicting-separator tests (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3686\"\u003e#3686\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e📖 Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eci: Add \u003ccode\u003elightgbm\u003c/code\u003e downstream test (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edocs: Add pandera to the ecosystem page (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3692\"\u003e#3692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edocs: Add warning when adding Narwhals with extras (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3658\"\u003e#3658\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛠️ Other improvements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: address polars deprecation of \u003ccode\u003ehow='horizontal'\u003c/code\u003e in \u003ccode\u003econcat\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3731\"\u003e#3731\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore: Address various CI failures (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3712\"\u003e#3712\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eci: Add \u003ccode\u003escikit-learn\u003c/code\u003e to downstream tests (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3609\"\u003e#3609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eci: Run workflows only if changes involves them (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3680\"\u003e#3680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eci: Fix fairlearn installation (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThank you to all our contributors for making this release possible!\n\u003ca href=\"https://github.com/FBruzzesi\"\u003e\u003ccode\u003e@​FBruzzesi\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/MarcoGorelli\"\u003e\u003ccode\u003e@​MarcoGorelli\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cosmicBboy\"\u003e\u003ccode\u003e@​cosmicBboy\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/e10v\"\u003e\u003ccode\u003e@​e10v\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\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/narwhals-dev/narwhals/commit/5a22ee6838c20594600122ddab90028268424f5e\"\u003e\u003ccode\u003e5a22ee6\u003c/code\u003e\u003c/a\u003e release: Bump version to 2.23.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/140e8ddc8f62f31ac19be10623e64f52ea22fead\"\u003e\u003ccode\u003e140e8dd\u003c/code\u003e\u003c/a\u003e fix: Explicitely pass \u003ccode\u003eorient=\u0026quot;row\u0026quot;\u003c/code\u003e in \u003ccode\u003epl.from_numpy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3732\"\u003e#3732\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/aae89b475121fb4bacd11f1e04b85735231e4ef4\"\u003e\u003ccode\u003eaae89b4\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3735\"\u003e#3735\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/18940effb2094f03ec095e6c14f45035c218f986\"\u003e\u003ccode\u003e18940ef\u003c/code\u003e\u003c/a\u003e fix: address polars deprecation of \u003ccode\u003ehow='horizontal'\u003c/code\u003e in \u003ccode\u003econcat\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3731\"\u003e#3731\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/e52d3822fc9ccc9edc473e2f746919acb893d58b\"\u003e\u003ccode\u003ee52d382\u003c/code\u003e\u003c/a\u003e feat: Add \u003ccode\u003eselectors.enum\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3729\"\u003e#3729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/579ee38440df16765792fe0f23dc8a81f16bc067\"\u003e\u003ccode\u003e579ee38\u003c/code\u003e\u003c/a\u003e feat: Add support for \u003ccode\u003eFloat16\u003c/code\u003e datatype (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3725\"\u003e#3725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/d5259994487809d4fba31e47deed3fab76231bda\"\u003e\u003ccode\u003ed525999\u003c/code\u003e\u003c/a\u003e fix: Allow to select polars Categorical with fixed categories (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3727\"\u003e#3727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/dc6a66bee868ae4a7208db5b33d83398fcc1b5bb\"\u003e\u003ccode\u003edc6a66b\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3728\"\u003e#3728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/35e16811ec683542c9468cd1f34d311829f7fb17\"\u003e\u003ccode\u003e35e1681\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/6d40bf7f5620edf4e483d60837fdd1792d903770\"\u003e\u003ccode\u003e6d40bf7\u003c/code\u003e\u003c/a\u003e fix: Lift \u003ccode\u003esample\u003c/code\u003e arguments validation, bump pyright and numpy deps (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3724\"\u003e#3724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/narwhals-dev/narwhals/compare/v2.22.1...v2.23.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\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/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydeck` from 0.9.2 to 0.9.3\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/visgl/deck.gl/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.15.0 to 4.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.49.0 to 0.50.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.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\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.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\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/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\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/6c42e8d63bc41e7b721d30b33ff97c7e2fc27ce4\"\u003e\u003ccode\u003e6c42e8d\u003c/code\u003e\u003c/a\u003e Skip the eager app import in the parent when spawning workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/56a4631c98bdfa8f4712214e3910add5e5e7d7ba\"\u003e\u003ccode\u003e56a4631\u003c/code\u003e\u003c/a\u003e Exit with a dedicated code on startup failure and stop the supervisor when a ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3314dfcc18835a4d4afbac4b0c4b8f0ee0d5095d\"\u003e\u003ccode\u003e3314dfc\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3007\"\u003e#3007\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e8a31bca03254b8457c4c89596e310282cc33edc\"\u003e\u003ccode\u003ee8a31bc\u003c/code\u003e\u003c/a\u003e chore(deps): bump the python-packages group across 1 directory with 9 updates...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8d088b18f1ead0d75a0603d983300717079f9025\"\u003e\u003ccode\u003e8d088b1\u003c/code\u003e\u003c/a\u003e Deprecate the legacy websockets implementation and default \u003ccode\u003eauto\u003c/code\u003e to websocke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5b08cf6374430ce47de74ff2e594b277d09db17e\"\u003e\u003ccode\u003e5b08cf6\u003c/code\u003e\u003c/a\u003e Avoid copying single-frame WebSocket payloads in websockets-sansio (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2983\"\u003e#2983\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/bf3f60c28e92178878ecf043b858ab55cd97c223\"\u003e\u003ccode\u003ebf3f60c\u003c/code\u003e\u003c/a\u003e Replace click.style 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\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/eea1bcc895349d0f3c5e2fe8229d6484f801a1c4\"\u003e\u003ccode\u003eeea1bcc\u003c/code\u003e\u003c/a\u003e Build 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\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/afed2116795358dee707dbfc890b9eb5106d4720\"\u003e\u003ccode\u003eafed211\u003c/code\u003e\u003c/a\u003e Cache 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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 7.4.3 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e9.1.0\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.0 (2026-06-13)\u003c/h1\u003e\n\u003ch2\u003eRemovals and backward incompatible breaking changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14533\"\u003e#14533\u003c/a\u003e: When using \u003ccode\u003e--doctest-modules\u003c/code\u003e, autouse fixtures with \u003ccode\u003emodule\u003c/code\u003e, \u003ccode\u003epackage\u003c/code\u003e or \u003ccode\u003esession\u003c/code\u003e scope that are defined inline in Python test modules (not plugins or conftests) will now possibly execute twice.\u003c/p\u003e\n\u003cp\u003eIf this is undesirable, move the fixture definition to a \u003ccode\u003econftest.py\u003c/code\u003e file if possible.\u003c/p\u003e\n\u003cp\u003eTechnical explanation for those interested:\nWhen using \u003c!-- raw HTML omitted --\u003e--doctest-modules\u003c!-- raw HTML omitted --\u003e, pytest possibly collects Python modules twice, once as \u003ccode\u003epytest.Module\u003c/code\u003e and once as a \u003ccode\u003eDoctestModule\u003c/code\u003e (depending on the configuration).\nDue to improvements in pytest's fixture implementation, if e.g. the \u003ccode\u003eDoctestModule\u003c/code\u003e collects a fixture, it is now visible to it only, and not to the \u003ccode\u003eModule\u003c/code\u003e.\nThis means that both need to register the fixtures independently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations (removal in next major release)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/10819\"\u003e#10819\u003c/a\u003e: Added a deprecation warning for class-scoped fixtures defined as instance methods (without \u003ccode\u003e@classmethod\u003c/code\u003e). Such fixtures set attributes on a different instance than the test methods use, leading to unexpected behavior. Use \u003ccode\u003e@classmethod\u003c/code\u003e decorator instead -- by \u003ccode\u003eyastcher\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003e10819\u003c/code\u003e and \u003ccode\u003e14011\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12882\"\u003e#12882\u003c/a\u003e: Calling \u003ccode\u003erequest.getfixturevalue() \u0026lt;pytest.FixtureRequest.getfixturevalue\u0026gt;\u003c/code\u003e during teardown to request a fixture that was not already requested is now deprecated and will become an error in pytest 10.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003edynamic-fixture-request-during-teardown\u003c/code\u003e for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13409\"\u003e#13409\u003c/a\u003e: Using non-\u003ccode\u003e~collections.abc.Collection\u003c/code\u003e iterables (such as generators, iterators, or custom iterable objects) for the \u003ccode\u003eargvalues\u003c/code\u003e parameter in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e and \u003ccode\u003emetafunc.parametrize \u0026lt;pytest.Metafunc.parametrize\u0026gt;\u003c/code\u003e is now deprecated.\u003c/p\u003e\n\u003cp\u003eThese iterables get exhausted after the first iteration,\nleading to tests getting unexpectedly skipped in cases such as running \u003ccode\u003epytest.main()\u003c/code\u003e multiple times,\nusing class-level parametrize decorators,\nor collecting tests multiple times.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eparametrize-iterators\u003c/code\u003e for details and suggestions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13946\"\u003e#13946\u003c/a\u003e: The private \u003ccode\u003econfig.inicfg\u003c/code\u003e attribute is now deprecated.\nUse \u003ccode\u003econfig.getini() \u0026lt;pytest.Config.getini\u0026gt;\u003c/code\u003e to access configuration values instead.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003econfig-inicfg\u003c/code\u003e for more details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14004\"\u003e#14004\u003c/a\u003e: Passing \u003ccode\u003ebaseid\u003c/code\u003e to \u003ccode\u003e~pytest.FixtureDef\u003c/code\u003e or \u003ccode\u003enodeid\u003c/code\u003e strings to fixture registration APIs is now deprecated. These are internal pytest APIs that are used by some plugins.\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/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/7.4.3...9.1.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/james75x2-design/AGAD/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/james75x2-design%2FAGAD/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"4803933738","node_id":"PR_kwDOBbRFcs7tm9tJ","number":3693,"state":"closed","title":"chore(deps): bump typing-extensions from 4.15.0 to 4.16.0 in /api/python_api","user":"dependabot[bot]","labels":["size/XS","dependencies","python"],"assignees":[],"locked":false,"comments_count":5,"pull_request":true,"closed_at":"2026-07-18T00:27:23.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-03T13:40:58.000Z","updated_at":"2026-07-18T00:27:32.000Z","time_to_close":1248385,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":"/api/python_api","ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=pip\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/kubeflow/trainer/pull/3693","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubeflow%2Ftrainer/issues/3693","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/3693/packages"},{"uuid":"4801945536","node_id":"PR_kwDOR335Os7tgbcc","number":59,"state":"closed","title":"Bump the pip-minor-patch group across 1 directory with 37 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-03T10:38:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-03T08:47:45.000Z","updated_at":"2026-07-03T10:38:43.000Z","time_to_close":6656,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-minor-patch","update_count":37,"packages":[{"name":"alembic","old_version":"1.14.1","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"anyio","old_version":"4.13.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"click","old_version":"8.3.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"croniter","old_version":"6.2.2","new_version":"6.2.3","repository_url":"https://github.com/pallets-eco/croniter"},{"name":"fastapi","old_version":"0.135.3","new_version":"0.139.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"fastapi-cli","old_version":"0.0.24","new_version":"0.0.27","repository_url":"https://github.com/fastapi/fastapi-cli"},{"name":"fastapi-cloud-cli","old_version":"0.15.1","new_version":"0.22.1","repository_url":"https://github.com/fastapilabs/fastapi-cloud-cli"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.5.3","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"griffelib","old_version":"2.0.2","new_version":"2.1.0"},{"name":"httptools","old_version":"0.7.1","new_version":"0.8.0","repository_url":"https://github.com/MagicStack/httptools"},{"name":"idna","old_version":"3.11","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"jiter","old_version":"0.14.0","new_version":"0.16.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"mako","old_version":"1.3.10","new_version":"1.3.12","repository_url":"https://github.com/sqlalchemy/mako"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"mcp","old_version":"1.27.1","new_version":"1.28.1","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"openai","old_version":"2.36.0","new_version":"2.44.0","repository_url":"https://github.com/openai/openai-python"},{"name":"openai-agents","old_version":"0.17.4","new_version":"0.17.7","repository_url":"https://github.com/openai/openai-agents-python"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.1","new_version":"2.14.2","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pydantic-core","old_version":"2.41.5","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pyotp","old_version":"2.9.0","new_version":"2.10.0","repository_url":"https://github.com/pyauth/pyotp"},{"name":"python-multipart","old_version":"0.0.22","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"redis","old_version":"8.0.0","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"rich-toolkit","old_version":"0.20.0","new_version":"0.20.1"},{"name":"rpds-py","old_version":"2026.5.1","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"rq","old_version":"2.9.0","new_version":"2.10.0","repository_url":"https://github.com/rq/rq"},{"name":"sentry-sdk","old_version":"2.57.0","new_version":"2.64.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"sqlalchemy","old_version":"2.0.48","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"sse-starlette","old_version":"3.4.4","new_version":"3.4.5","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"starlette","old_version":"1.0.0","new_version":"1.3.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.68.3","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typer","old_version":"0.26.7","new_version":"0.26.8","repository_url":"https://github.com/fastapi/typer"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.42.0","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"watchfiles","old_version":"1.1.1","new_version":"1.2.0","repository_url":"https://github.com/samuelcolvin/watchfiles"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-minor-patch group with 37 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.14.1` | `1.18.5` |\n| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.1` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.4.2` |\n| [croniter](https://github.com/pallets-eco/croniter) | `6.2.2` | `6.2.3` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.135.3` | `0.139.0` |\n| [fastapi-cli](https://github.com/fastapi/fastapi-cli) | `0.0.24` | `0.0.27` |\n| [fastapi-cloud-cli](https://github.com/fastapilabs/fastapi-cloud-cli) | `0.15.1` | `0.22.1` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.5.3` |\n| griffelib | `2.0.2` | `2.1.0` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.7.1` | `0.8.0` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.18` |\n| [jiter](https://github.com/pydantic/jiter) | `0.14.0` | `0.16.0` |\n| [mako](https://github.com/sqlalchemy/mako) | `1.3.10` | `1.3.12` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.27.1` | `1.28.1` |\n| [openai](https://github.com/openai/openai-python) | `2.36.0` | `2.44.0` |\n| [openai-agents](https://github.com/openai/openai-agents-python) | `0.17.4` | `0.17.7` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.4` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.1` | `2.14.2` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.41.5` | `2.47.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [pyotp](https://github.com/pyauth/pyotp) | `2.9.0` | `2.10.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.22` | `0.0.32` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.0.1` |\n| rich-toolkit | `0.20.0` | `0.20.1` |\n| [rpds-py](https://github.com/crate-py/rpds) | `2026.5.1` | `2026.6.3` |\n| [rq](https://github.com/rq/rq) | `2.9.0` | `2.10.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.57.0` | `2.64.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.48` | `2.0.51` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.4.4` | `3.4.5` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.0` | `1.3.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.3` |\n| [typer](https://github.com/fastapi/typer) | `0.26.7` | `0.26.8` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.42.0` | `0.49.0` |\n| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.1.1` | `1.2.0` |\n\n\nUpdates `alembic` from 1.14.1 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 `anyio` from 4.13.0 to 4.14.1\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.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed teardown of higher-scoped async fixtures failing on asyncio with \u003ccode\u003eRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\u003c/code\u003e when an async test raise an outcome exception (e.g., \u003ccode\u003epytest.skip()\u003c/code\u003e, \u003ccode\u003epytest.xfail()\u003c/code\u003e, or \u003ccode\u003epytest.fail()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1179\"\u003e#1179\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting a value of \u003ccode\u003e0\u003c/code\u003e when the limiter was instantiated outside of an event loop, contradicting the documented behavior of allowing 0 total tokens (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1183\"\u003e#1183\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.14.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for Python 3.15\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded an asynchronous implementation of the \u003ccode\u003eitertools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/998\"\u003e#998\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003elocal_port\u003c/code\u003e parameter to \u003ccode\u003econnect_tcp()\u003c/code\u003e to allow binding to a specific local port before connecting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1067\"\u003e#1067\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nullwiz\"\u003e\u003ccode\u003e@​nullwiz\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for custom capacity limiters in async path and file I/O functions and classes\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003ecreate_task()\u003c/code\u003e task group method for easier asyncio migration (returns a \u003ccode\u003eTaskHandle\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1098\"\u003e#1098\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged \u003ccode\u003eTaskGroup.start_soon()\u003c/code\u003e to return a \u003ccode\u003eTaskHandle\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded an option for \u003ccode\u003eTaskGroup.start()\u003c/code\u003e to return a \u003ccode\u003eTaskHandle\u003c/code\u003e (which then contains the start value in the \u003ccode\u003estart_value\u003c/code\u003e property)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003ecancel()\u003c/code\u003e convenience method to \u003ccode\u003eTaskGroup\u003c/code\u003e as a shortcut for cancelling the task group's cancel scope\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved the error message when a known backend is not installed to suggest the install command (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1115\"\u003e#1115\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eanyio.Path\u003c/code\u003e to preserve subclass types by returning \u003ccode\u003eSelf\u003c/code\u003e in methods that return path objects (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1130\"\u003e#1130\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the parameter type annotation in \u003ccode\u003eanyio.Path.write_bytes()\u003c/code\u003e to accept any \u003ccode\u003eReadableBuffer\u003c/code\u003e, thus allowing it to accept \u003ccode\u003ebytearray\u003c/code\u003e and \u003ccode\u003ememoryview\u003c/code\u003e to match \u003ccode\u003epathlib.Path.write_bytes()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1135\"\u003e#1135\u003c/a\u003e; PR by \u003ca href=\"https://github.com/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged several type annotations to only accept callables returning coroutine-like objects instead of arbitrary awaitables:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eTaskGroup.start_soon()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eTaskGroup.start()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis reverts an earlier change from v3.7.0 which was made in error. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1153\"\u003e#1153\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged \u003ccode\u003eanyio.run\u003c/code\u003e to support callables returning arbitrary awaitables at runtime on all backends. Previously, this only worked on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1171\"\u003e#1171\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged several classes (and their subclasses) to have \u003ccode\u003e__slots__\u003c/code\u003e (with \u003ccode\u003e__weakref__\u003c/code\u003e):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eanyio.CancelScope\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.CapacityLimiter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.Condition\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.Event\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.Lock\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.ResourceGuard\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.Semaphore\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed cancellation exception escaping a cancel scope when triggered via \u003ccode\u003echeck_cancelled()\u003c/code\u003e in a worker thread (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1113\"\u003e#1113\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eTaskGroup\u003c/code\u003e raising \u003ccode\u003eAttributeError\u003c/code\u003e instead of a clear error when entered more than once (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1109\"\u003e#1109\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bahtya\"\u003e\u003ccode\u003e@​bahtya\u003c/code\u003e\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\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/149b9e907618fadf6840a4d3cebad533b0c7d033\"\u003e\u003ccode\u003e149b9e9\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/377518cd1160314f2fdf74f356ae9e848c94a065\"\u003e\u003ccode\u003e377518c\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6 to 7 in the github-actions group (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b42a2f5e8e9910d0c57b970f9a747427a9da26f0\"\u003e\u003ccode\u003eb42a2f5\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1185\"\u003e#1185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/3ceb6ffbfa89be715f444550883356fbfbc13154\"\u003e\u003ccode\u003e3ceb6ff\u003c/code\u003e\u003c/a\u003e Allow 0 tokens in a CapacityLimiter instantiated outside an event loop (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1183\"\u003e#1183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/e10d1db74f7a59cb283a1e4b3b22227da11c6f07\"\u003e\u003ccode\u003ee10d1db\u003c/code\u003e\u003c/a\u003e Add missing await to open_file() in file I/O concurrency example (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1182\"\u003e#1182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1dbc3b62256e5877bcf610aca98ba6e450d14c20\"\u003e\u003ccode\u003e1dbc3b6\u003c/code\u003e\u003c/a\u003e OutcomeException should not discard test runner_task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/ffe91331adb912c5d150f5d373f7cd28a0e96a62\"\u003e\u003ccode\u003effe9133\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f8b9f011e548c2c1c3e9abb0287bb1048ab3dca8\"\u003e\u003ccode\u003ef8b9f01\u003c/code\u003e\u003c/a\u003e Fixed asyncio lock waiter deadlocks after cancellation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1145\"\u003e#1145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d517ee1d41080073cc244d8adebf822a08b762de\"\u003e\u003ccode\u003ed517ee1\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1176\"\u003e#1176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/550b68e1acaf82b1503b0e99fbc7f964cd07fe49\"\u003e\u003ccode\u003e550b68e\u003c/code\u003e\u003c/a\u003e Make \u003ccode\u003eanyio.run\u003c/code\u003e support \u003ccode\u003eAwaitable\u003c/code\u003e at runtime on all backends (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1171\"\u003e#1171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.13.0...4.14.1\"\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.1 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.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `croniter` from 6.2.2 to 6.2.3\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/croniter/blob/main/CHANGELOG.rst\"\u003ecroniter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.3 (2026-07-02)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Fix quadratic expansion of comma-separated range lists for a large speed-up on expressions with many ranges. [1d79fc6, [#231](https://github.com/pallets-eco/croniter/issues/231), @alhudz]\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Reject a zero step (e.g. ``5-5/0``) in equal and reversed cron ranges instead of silently accepting it. [ab27767, [#232](https://github.com/pallets-eco/croniter/issues/232), @alhudz]\n- Fix ``expand_from_start_time`` month low-bound off-by-one so stepped month ranges start on the correct month. [f329964, [#235](https://github.com/pallets-eco/croniter/issues/235), @alhudz]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eFix zizmor-reported security findings in GitHub Actions workflows. [ed19f94, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eBump pinned build and CI dependencies via dependabot.\u003c/li\u003e\n\u003cli\u003eUpgrade locked development and build dependencies (\u003ccode\u003euv lock --upgrade\u003c/code\u003e).\n\u003c/code\u003e\u003c/pre\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-eco/croniter/commit/22b59e05f5ca485c45596b2a9b580fddffbf753f\"\u003e\u003ccode\u003e22b59e0\u003c/code\u003e\u003c/a\u003e Prepare for release 6.2.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/236\"\u003e#236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ab277671adc8e446e8dc7f1e939eabf024b6199e\"\u003e\u003ccode\u003eab27767\u003c/code\u003e\u003c/a\u003e reject zero step in equal and reversed cron ranges (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/232\"\u003e#232\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/f329964223eeb29e7788b1a9d615b525148fec96\"\u003e\u003ccode\u003ef329964\u003c/code\u003e\u003c/a\u003e fix expand_from_start_time month low bound off-by-one (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/235\"\u003e#235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/9810279c20030954e2f1ed2cf5f1d34b98c6b07f\"\u003e\u003ccode\u003e9810279\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/233\"\u003e#233\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/d051aaf6342fbe9c559b9fcd99e6fb6f3bb63cb7\"\u003e\u003ccode\u003ed051aaf\u003c/code\u003e\u003c/a\u003e Bump hatchling from 1.29.0 to 1.30.1 in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/1d79fc6555fb9208e290e0af10194eec638ae01c\"\u003e\u003ccode\u003e1d79fc6\u003c/code\u003e\u003c/a\u003e fix quadratic expansion of comma-separated range lists (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/231\"\u003e#231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ed19f94c472ef665598693a554e6a5555be41f7b\"\u003e\u003ccode\u003eed19f94\u003c/code\u003e\u003c/a\u003e Fix zizmor-reported security findings in GitHub Actions workflows (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/82657c37b873319570fee74c1864cb4d6153f543\"\u003e\u003ccode\u003e82657c3\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/229\"\u003e#229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/8e13827f77358beabf75245ad37d31a581cb6d1e\"\u003e\u003ccode\u003e8e13827\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/228\"\u003e#228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/e55d70bf2288e25c1ddf850fde703d56888772f2\"\u003e\u003ccode\u003ee55d70b\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group across 1 directory (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/225\"\u003e#225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/croniter/compare/6.2.2...6.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi` from 0.135.3 to 0.139.0\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.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Support dependencies in \u003ccode\u003eapp.frontend()\u003c/code\u003e, e.g. for automatic cookie authentication for the frontend. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15908\"\u003e#15908\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\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15897\"\u003e#15897\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/15895\"\u003e#15895\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/15896\"\u003e#15896\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/15899\"\u003e#15899\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/15892\"\u003e#15892\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 tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15891\"\u003e#15891\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/15893\"\u003e#15893\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/15898\"\u003e#15898\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/15900\"\u003e#15900\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/15890\"\u003e#15890\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/15894\"\u003e#15894\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15888\"\u003e#15888\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15880\"\u003e#15880\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15889\"\u003e#15889\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15883\"\u003e#15883\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15885\"\u003e#15885\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15882\"\u003e#15882\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 tr (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15887\"\u003e#15887\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15886\"\u003e#15886\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15881\"\u003e#15881\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15884\"\u003e#15884\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15879\"\u003e#15879\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\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👥 Update FastAPI People - Experts. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15909\"\u003e#15909\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 FastAPI GitHub topic repositories. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15906\"\u003e#15906\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 FastAPI People - Contributors and Translators. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15878\"\u003e#15878\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👷 Remove not needed \u003ccode\u003eallow-unsafe-pr-checkout: true\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15876\"\u003e#15876\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 with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15872\"\u003e#15872\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 10 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15870\"\u003e#15870\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 CodSpeedHQ/action from 4.17.0 to 4.17.5 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15826\"\u003e#15826\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\u003ch2\u003e0.138.1\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Refactor Library Skills, make info easier to find for agents. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15841\"\u003e#15841\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\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👷 Simplify pull request workflow triggers. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15836\"\u003e#15836\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.7.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15833\"\u003e#15833\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.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15831\"\u003e#15831\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!-- 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/fastapi/fastapi/commit/cecd96d9c6c318e0df1c40cedbc2e953381ddfd3\"\u003e\u003ccode\u003ececd96d\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15910\"\u003e#15910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/aea660936b55fdbd84270d24f892839388922dd6\"\u003e\u003ccode\u003eaea6609\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/319be508ce7db9ee5f52c3b9baa68c6cc1037c10\"\u003e\u003ccode\u003e319be50\u003c/code\u003e\u003c/a\u003e ✨ Support dependencies in \u003ccode\u003eapp.frontend()\u003c/code\u003e, e.g. for automatic cookie authent...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/66a90f6ee9c0cf58ec61b14f8925344d6f16eae5\"\u003e\u003ccode\u003e66a90f6\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d30a3ebfc7d7fd7851ba4243677266c53cb9f154\"\u003e\u003ccode\u003ed30a3eb\u003c/code\u003e\u003c/a\u003e 👥 Update FastAPI People - Experts (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15909\"\u003e#15909\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/122f1b58f4e0fabfefef3710a8c8247bb2bd820b\"\u003e\u003ccode\u003e122f1b5\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/fd6ece32eeb27c9ce164bd9170f9d8e1db1dacff\"\u003e\u003ccode\u003efd6ece3\u003c/code\u003e\u003c/a\u003e 👥 Update FastAPI GitHub topic repositories (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15906\"\u003e#15906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ec2a6adaf14c440bdcd0fd3f4ca203daa8c3ba6a\"\u003e\u003ccode\u003eec2a6ad\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9d7d7febd3a66844f948254c1ba4745b6cc16f40\"\u003e\u003ccode\u003e9d7d7fe\u003c/code\u003e\u003c/a\u003e 🌐 Update translations for fr (update-outdated) (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15897\"\u003e#15897\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/8dc852df4713efa998d126c5194302e9f06e7675\"\u003e\u003ccode\u003e8dc852d\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.135.3...0.139.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi-cli` from 0.0.24 to 0.0.27\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi-cli/releases\"\u003efastapi-cli's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.27\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003eFASTAPI_PUBLIC_URL\u003c/code\u003e env var to configure app's public URL that is shown on startup. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/381\"\u003e#381\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\u003ch2\u003e0.0.26\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show tip on how to configure \u003ccode\u003eentrypoint\u003c/code\u003e in \u003ccode\u003epyproject.toml\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/389\"\u003e#389\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\u003ch2\u003e0.0.25\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show import string source. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/388\"\u003e#388\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✨ Include the version of \u003ccode\u003efastapi-cloud-cli\u003c/code\u003e to the output of \u003ccode\u003e--version\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/341\"\u003e#341\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\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Update docs about contributing. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/410\"\u003e#410\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 security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/408\"\u003e#408\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\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👷 Add pre-commit hook to catch typos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/418\"\u003e#418\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 typer from 0.26.2 to 0.26.7. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/427\"\u003e#427\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 fastapi-cloud-cli from 0.17.1 to 0.19.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/429\"\u003e#429\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 rich-toolkit from 0.19.9 to 0.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/428\"\u003e#428\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 with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/430\"\u003e#430\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 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/426\"\u003e#426\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 eps1lon/actions-label-merge-conflict from 3.0.3 to 3.1.0 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/425\"\u003e#425\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 typer from 0.25.1 to 0.26.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/424\"\u003e#424\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👷 Automate release preparation. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/420\"\u003e#420\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🔥 Remove old package stub slim, not user nor needed. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/419\"\u003e#419\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 zizmorcore/zizmor-action from 0.5.3 to 0.5.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/414\"\u003e#414\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👷 Configure Dependabot to group updates and update weekly. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/407\"\u003e#407\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🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/413\"\u003e#413\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 branch name in \u003ccode\u003eguard-dependencies.yml\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/404\"\u003e#404\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/403\"\u003e#403\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump uvicorn from 0.44.0 to 0.46.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/400\"\u003e#400\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 rich-toolkit from 0.19.7 to 0.19.9. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/399\"\u003e#399\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 mypy from 2.0.0 to 2.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/397\"\u003e#397\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🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/373\"\u003e#373\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 ty from 0.0.34 to 0.0.35. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/396\"\u003e#396\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 actions/add-to-project from 1.0.2 to 2.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/392\"\u003e#392\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 actions/labeler from 6.0.1 to 6.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/393\"\u003e#393\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 prek from 0.3.11 to 0.3.13. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/394\"\u003e#394\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 mypy from 1.20.2 to 2.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/395\"\u003e#395\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 from 0.0.33 to 0.0.34. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/391\"\u003e#391\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 typer from 0.25.0 to 0.25.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/390\"\u003e#390\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 from 0.0.32 to 0.0.33. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/387\"\u003e#387\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!-- 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/fastapi/fastapi-cli/blob/main/release-notes.md\"\u003efastapi-cli's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.27 (2026-06-18)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003eFASTAPI_PUBLIC_URL\u003c/code\u003e env var to configure app's public URL that is shown on startup. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/381\"\u003e#381\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\u003ch2\u003e0.0.26 (2026-06-18)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show tip on how to configure \u003ccode\u003eentrypoint\u003c/code\u003e in \u003ccode\u003epyproject.toml\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/389\"\u003e#389\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\u003ch2\u003e0.0.25 (2026-06-18)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show import string source. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/388\"\u003e#388\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✨ Include the version of \u003ccode\u003efastapi-cloud-cli\u003c/code\u003e to the output of \u003ccode\u003e--version\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/341\"\u003e#341\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\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Update docs about contributing. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/410\"\u003e#410\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 security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/408\"\u003e#408\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\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👷 Add pre-commit hook to catch typos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/418\"\u003e#418\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 typer from 0.26.2 to 0.26.7. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/427\"\u003e#427\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 fastapi-cloud-cli from 0.17.1 to 0.19.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/429\"\u003e#429\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 rich-toolkit from 0.19.9 to 0.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/428\"\u003e#428\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 with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/430\"\u003e#430\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 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/426\"\u003e#426\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 eps1lon/actions-label-merge-conflict from 3.0.3 to 3.1.0 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/425\"\u003e#425\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 typer from 0.25.1 to 0.26.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/424\"\u003e#424\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👷 Automate release preparation. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/420\"\u003e#420\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🔥 Remove old package stub slim, not user nor needed. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/419\"\u003e#419\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 zizmorcore/zizmor-action from 0.5.3 to 0.5.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/414\"\u003e#414\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👷 Configure Dependabot to group updates and update weekly. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/407\"\u003e#407\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🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/413\"\u003e#413\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 branch name in \u003ccode\u003eguard-dependencies.yml\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/404\"\u003e#404\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/403\"\u003e#403\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump uvicorn from 0.44.0 to 0.46.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/400\"\u003e#400\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 rich-toolkit from 0.19.7 to 0.19.9. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/399\"\u003e#399\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 mypy from 2.0.0 to 2.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/397\"\u003e#397\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🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/373\"\u003e#373\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 ty from 0.0.34 to 0.0.35. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/396\"\u003e#396\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 actions/add-to-project from 1.0.2 to 2.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/392\"\u003e#392\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 actions/labeler from 6.0.1 to 6.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/393\"\u003e#393\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 prek from 0.3.11 to 0.3.13. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/394\"\u003e#394\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 mypy from 1.20.2 to 2.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/395\"\u003e#395\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!-- 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/fastapi/fastapi-cli/commit/760451b3fbd3814902a36696959b5e49f6c80dad\"\u003e\u003ccode\u003e760451b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.0.27 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/issues/435\"\u003e#435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/e3893efbeb9d50a000ef997b7f54bc08a0f27fa2\"\u003e\u003ccode\u003ee3893ef\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/46aca093b0835b00476c7b45d408e7cbaf960980\"\u003e\u003ccode\u003e46aca09\u003c/code\u003e\u003c/a\u003e ✨ Add \u003ccode\u003eFASTAPI_PUBLIC_URL\u003c/code\u003e env var to configure app's public URL that is show...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/04c12c244febb6b3939df6011b5a4bd5a7bca89c\"\u003e\u003ccode\u003e04c12c2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.0.26 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/96bd5ab16b7ae16bb3746c2eff2fed31e3a7bd5d\"\u003e\u003ccode\u003e96bd5ab\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/cd37a8e50f9b37a9f4571a8e6938f274a56297c9\"\u003e\u003ccode\u003ecd37a8e\u003c/code\u003e\u003c/a\u003e 🚸 Show tip on how to configure \u003ccode\u003eentrypoint\u003c/code\u003e in \u003ccode\u003epyproject.toml\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/issues/389\"\u003e#389\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/8c4ab6663187c5fcdb68fe523c70ff265a9c50da\"\u003e\u003ccode\u003e8c4ab66\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.0.25 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/issues/433\"\u003e#433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/b6bf5b53d87f64cad2e56541008b6f3a62305b1c\"\u003e\u003ccode\u003eb6bf5b5\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/572ea4c0f286c5f70d407b30d2f444e69e4c1f65\"\u003e\u003ccode\u003e572ea4c\u003c/code\u003e\u003c/a\u003e 👷 Add pre-commit hook to catch typos (\u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/1428d40976c1bb2585941d9961898ce6b9d0f448\"\u003e\u003ccode\u003e1428d40\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-cli/compare/0.0.24...0.0.27\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi-cloud-cli` from 0.15.1 to 0.22.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/releases\"\u003efastapi-cloud-cli's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.22.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Validate app logs tail limit before request. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/287\"\u003e#287\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.22.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add cloud apps update command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/280\"\u003e#280\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Remove \u003ccode\u003esrc\u003c/code\u003e from \u003ccode\u003edirectory\u003c/code\u003e option description and error message. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/279\"\u003e#279\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\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/276\"\u003e#276\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 sentry-sdk from 2.62.0 to 2.63.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/277\"\u003e#277\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\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump actions/checkout from 6.0.3 to 7.0.0 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/275\"\u003e#275\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👷 Simplify pull request workflow triggers. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/278\"\u003e#278\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.21.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add --json support for logout command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/269\"\u003e#269\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add cloud ci setup command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/268\"\u003e#268\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add cloud ci print-workflow command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/267\"\u003e#267\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens delete command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/264\"\u003e#264\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens create command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/263\"\u003e#263\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens list command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/262\"\u003e#262\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Handle invalid apps create --directory input. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/265\"\u003e#265\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Use new deployment route to fetch deployment. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/266\"\u003e#266\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e♻️ Update deployment data when triggering upload complete. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/250\"\u003e#250\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e♻️ Improve error messages for logs. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/249\"\u003e#249\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\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📝 Update docs badges: remove Publish badge, it doesn't give extra information. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/260\"\u003e#260\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\u003eInternal\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/fastapilabs/fastapi-cloud-cli/blob/main/release-notes.md\"\u003efastapi-cloud-cli's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.22.1 (2026-07-01)\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Validate app logs tail limit before request. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/287\"\u003e#287\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.22.0 (2026-06-30)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add cloud apps update command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/280\"\u003e#280\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Remove \u003ccode\u003esrc\u003c/code\u003e from \u003ccode\u003edirectory\u003c/code\u003e option description and error message. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/279\"\u003e#279\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\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/276\"\u003e#276\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 sentry-sdk from 2.62.0 to 2.63.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/277\"\u003e#277\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\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump actions/checkout from 6.0.3 to 7.0.0 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/275\"\u003e#275\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👷 Simplify pull request workflow triggers. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/278\"\u003e#278\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.21.0 (2026-06-24)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add --json support for logout command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/269\"\u003e#269\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add cloud ci setup command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/268\"\u003e#268\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add cloud ci print-workflow command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/267\"\u003e#267\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens delete command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/264\"\u003e#264\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens create command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/263\"\u003e#263\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens list command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/262\"\u003e#262\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Handle invalid apps create --directory input. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/265\"\u003e#265\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Use new deployment route to fetch deployment. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/266\"\u003e#266\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e♻️ Update deployment data when triggering upload complete. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/250\"\u003e#250\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e♻️ Improve error messages for logs. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/249\"\u003e#249\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\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📝 Update docs badges: remove Publish badge, it doesn't give extra information. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/260\"\u003e#260\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!-- 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/fastapilabs/fastapi-cloud-cli/commit/20f9fe34e1b95fb925e168f9d030b9d52cee5f8a\"\u003e\u003ccode\u003e20f9fe3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.22.1 (\u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/issues/288\"\u003e#288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/e2b4722fc22b3c3e6c0babafa5ad21862372ff52\"\u003e\u003ccode\u003ee2b4722\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/5...\n\n_Description has been truncated_","html_url":"https://github.com/manasijatech/ananta-market-stack/pull/59","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/manasijatech%2Fananta-market-stack/issues/59","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/59/packages"},{"uuid":"4800559976","node_id":"PR_kwDOPmi_-c7tb4Ul","number":11,"state":"open","title":"Bump typing-extensions from 4.15.0 to 4.16.0","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-03T05:13:50.000Z","updated_at":"2026-07-03T05:14:12.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=pip\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/SarahRogue81/Pelican-Website/pull/11","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/SarahRogue81%2FPelican-Website/issues/11","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/11/packages"},{"uuid":"4799930532","node_id":"PR_kwDOIwh-5s7tZ0e_","number":763,"state":"closed","title":"Bump typing-extensions from 4.15.0 to 4.16.0","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":["uriyyo"],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-03T03:05:02.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-03T03:04:07.000Z","updated_at":"2026-07-03T03:05:11.000Z","time_to_close":55,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=uv\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/uriyyo/fastapi-filters/pull/763","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/uriyyo%2Ffastapi-filters/issues/763","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/763/packages"},{"uuid":"4797698351","node_id":"PR_kwDORuOgZM7tSi6d","number":146,"state":"closed","title":"Bump typing-extensions from 4.15.0 to 4.16.0","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-02T19:45:04.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-02T19:44:53.000Z","updated_at":"2026-07-02T19:45:12.000Z","time_to_close":11,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=pip\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/nmurrell07/aiohttp/pull/146","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmurrell07%2Faiohttp/issues/146","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/146/packages"},{"uuid":"4795019805","node_id":"PR_kwDOSXyk6s7tJvm4","number":174,"state":"open","title":"Build(deps-dev): Bump typing-extensions from 4.15.0 to 4.16.0","user":"dependabot[bot]","labels":["dependencies","minor"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-02T13:47:04.000Z","updated_at":"2026-07-02T13:53:52.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Build(deps-dev): Bump","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=pip\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/MohsenHNSJ/Telegram-Bot/pull/174","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohsenHNSJ%2FTelegram-Bot/issues/174","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/174/packages"},{"uuid":"4794989066","node_id":"PR_kwDODUIXOs7tJpH-","number":1107,"state":"open","title":"Bump typing-extensions from 4.15.0 to 4.16.0","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-02T13:43:35.000Z","updated_at":"2026-07-02T14:14:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=uv\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/alpha-unito/streamflow/pull/1107","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpha-unito%2Fstreamflow/issues/1107","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1107/packages"},{"uuid":"4520310526","node_id":"PR_kwDOSKFNzM7fNcsi","number":38,"state":"open","title":"chore(deps): bump the python-minor-patch group across 1 directory with 28 updates","user":"dependabot[bot]","labels":["ignore-for-release"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-26T00:23:31.000Z","updated_at":"2026-05-26T00:23:40.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor-patch","update_count":28,"packages":[{"name":"ruff","old_version":"0.15.11","new_version":"0.15.14","repository_url":"https://github.com/astral-sh/ruff"},{"name":"authlib","old_version":"1.7.0","new_version":"1.7.2","repository_url":"https://github.com/authlib/authlib"},{"name":"google-auth","old_version":"2.47.0","new_version":"2.53.0","repository_url":"https://github.com/googleapis/google-auth-library-python"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"typing-extensions","old_version":"4.14.1","new_version":"4.15.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"anyio","old_version":"4.10.0","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"typer","old_version":"0.16.0","new_version":"0.25.1","repository_url":"https://github.com/fastapi/typer"},{"name":"uvicorn","old_version":"0.35.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"openai","old_version":"2.14.0","new_version":"2.38.0","repository_url":"https://github.com/openai/openai-python"},{"name":"mcp","old_version":"1.25.0","new_version":"1.27.1","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"fastapi","old_version":"0.129.0","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"filelock","old_version":"3.20.3","new_version":"3.29.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"python-multipart","old_version":"0.0.22","new_version":"0.0.29","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"boto3","old_version":"1.42.28","new_version":"1.43.14","repository_url":"https://github.com/boto/boto3"},{"name":"ollama","old_version":"0.6.1","new_version":"0.6.2","repository_url":"https://github.com/ollama/ollama-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"opentelemetry-instrumentation-openai","old_version":"0.52.5","new_version":"0.60.0","repository_url":"https://github.com/traceloop/openllmetry"},{"name":"langgraph","old_version":"1.0.6","new_version":"1.2.1","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"openai-agents","old_version":"0.6.5","new_version":"0.17.3","repository_url":"https://github.com/openai/openai-agents-python"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"langchain-openai","old_version":"1.1.7","new_version":"1.2.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph-checkpoint-sqlite","old_version":"3.0.3","new_version":"3.1.0","repository_url":"https://github.com/langchain-ai/langgraph"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 23 updates in the /python directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.11` | `0.15.14` |\n| [authlib](https://github.com/authlib/authlib) | `1.7.0` | `1.7.2` |\n| [google-auth](https://github.com/googleapis/google-auth-library-python) | `2.47.0` | `2.53.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.4` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.14.1` | `4.15.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.10.0` | `4.13.0` |\n| [typer](https://github.com/fastapi/typer) | `0.16.0` | `0.25.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.35.0` | `0.48.0` |\n| [openai](https://github.com/openai/openai-python) | `2.14.0` | `2.38.0` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.25.0` | `1.27.1` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.129.0` | `0.136.3` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.20.3` | `3.29.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.22` | `0.0.29` |\n| [boto3](https://github.com/boto/boto3) | `1.42.28` | `1.43.14` |\n| [ollama](https://github.com/ollama/ollama-python) | `0.6.1` | `0.6.2` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [opentelemetry-instrumentation-openai](https://github.com/traceloop/openllmetry) | `0.52.5` | `0.60.0` |\n| [langgraph](https://github.com/langchain-ai/langgraph) | `1.0.6` | `1.2.1` |\n| [openai-agents](https://github.com/openai/openai-agents-python) | `0.6.5` | `0.17.3` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.1.7` | `1.2.2` |\n| [langgraph-checkpoint-sqlite](https://github.com/langchain-ai/langgraph) | `3.0.3` | `3.1.0` |\n\n\nUpdates `ruff` from 0.15.11 to 0.15.14\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.14\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003eairflow-task-implicit-multiple-outputs\u003c/code\u003e (\u003ccode\u003eAIR202\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25152\"\u003e#25152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Mark \u003ccode\u003ePTH101\u003c/code\u003e fix as unsafe when first argument is a class attribute annotated as \u003ccode\u003eint\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25086\"\u003e#25086\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Implement \u003ccode\u003etoo-many-try-statements\u003c/code\u003e (\u003ccode\u003eW0717\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23970\"\u003e#23970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003eincorrect-decorator-order\u003c/code\u003e (\u003ccode\u003eRUF074\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23461\"\u003e#23461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003efallible-context-manager\u003c/code\u003e (\u003ccode\u003eRUF075\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22844\"\u003e#22844\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix lambda formatting in interpolated string expressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25144\"\u003e#25144\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat generic \u003ccode\u003efrozenset\u003c/code\u003e annotations as immutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25251\"\u003e#25251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-type-checking\u003c/code\u003e] Avoid \u003ccode\u003estrict\u003c/code\u003e behavior when \u003ccode\u003efuture-annotations\u003c/code\u003e are enabled (\u003ccode\u003eTC001\u003c/code\u003e, \u003ccode\u003eTC002\u003c/code\u003e, \u003ccode\u003eTC003\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25035\"\u003e#25035\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Avoid false positives in \u003ccode\u003eelse\u003c/code\u003e clause (\u003ccode\u003ePLR1733\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25177\"\u003e#25177\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-comprehensions\u003c/code\u003e] Skip \u003ccode\u003eC417\u003c/code\u003e for lambdas with positional-only parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25272\"\u003e#25272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Preserve f-string source verbatim in \u003ccode\u003eSIM101\u003c/code\u003e fix (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25061\"\u003e#25061\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid unnecessary parser lookahead for operators (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25290\"\u003e#25290\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate code example setting Neovim LSP log level (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25284\"\u003e#25284\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd full PEP 798 support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25104\"\u003e#25104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a parser recursion limit (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24810\"\u003e#24810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate various \u003ccode\u003eruff_python_stdlib\u003c/code\u003e APIs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25273\"\u003e#25273\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/ocaballeror\"\u003e\u003ccode\u003e@​ocaballeror\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lerebear\"\u003e\u003ccode\u003e@​lerebear\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/samuelcolvin\"\u003e\u003ccode\u003e@​samuelcolvin\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/baltasarblanco\"\u003e\u003ccode\u003e@​baltasarblanco\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aconal-com\"\u003e\u003ccode\u003e@​aconal-com\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JelleZijlstra\"\u003e\u003ccode\u003e@​JelleZijlstra\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\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\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.14\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003eairflow-task-implicit-multiple-outputs\u003c/code\u003e (\u003ccode\u003eAIR202\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25152\"\u003e#25152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Mark \u003ccode\u003ePTH101\u003c/code\u003e fix as unsafe when first argument is a class attribute annotated as \u003ccode\u003eint\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25086\"\u003e#25086\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Implement \u003ccode\u003etoo-many-try-statements\u003c/code\u003e (\u003ccode\u003eW0717\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23970\"\u003e#23970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003eincorrect-decorator-order\u003c/code\u003e (\u003ccode\u003eRUF074\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23461\"\u003e#23461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003efallible-context-manager\u003c/code\u003e (\u003ccode\u003eRUF075\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22844\"\u003e#22844\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix lambda formatting in interpolated string expressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25144\"\u003e#25144\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat generic \u003ccode\u003efrozenset\u003c/code\u003e annotations as immutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25251\"\u003e#25251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-type-checking\u003c/code\u003e] Avoid \u003ccode\u003estrict\u003c/code\u003e behavior when \u003ccode\u003efuture-annotations\u003c/code\u003e are enabled (\u003ccode\u003eTC001\u003c/code\u003e, \u003ccode\u003eTC002\u003c/code\u003e, \u003ccode\u003eTC003\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25035\"\u003e#25035\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Avoid false positives in \u003ccode\u003eelse\u003c/code\u003e clause (\u003ccode\u003ePLR1733\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25177\"\u003e#25177\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-comprehensions\u003c/code\u003e] Skip \u003ccode\u003eC417\u003c/code\u003e for lambdas with positional-only parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25272\"\u003e#25272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Preserve f-string source verbatim in \u003ccode\u003eSIM101\u003c/code\u003e fix (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25061\"\u003e#25061\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid unnecessary parser lookahead for operators (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25290\"\u003e#25290\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate code example setting Neovim LSP log level (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25284\"\u003e#25284\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd full PEP 798 support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25104\"\u003e#25104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a parser recursion limit (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24810\"\u003e#24810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate various \u003ccode\u003eruff_python_stdlib\u003c/code\u003e APIs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25273\"\u003e#25273\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/ocaballeror\"\u003e\u003ccode\u003e@​ocaballeror\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lerebear\"\u003e\u003ccode\u003e@​lerebear\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/samuelcolvin\"\u003e\u003ccode\u003e@​samuelcolvin\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/baltasarblanco\"\u003e\u003ccode\u003e@​baltasarblanco\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aconal-com\"\u003e\u003ccode\u003e@​aconal-com\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JelleZijlstra\"\u003e\u003ccode\u003e@​JelleZijlstra\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\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/adityasingh2400\"\u003e\u003ccode\u003e@​adityasingh2400\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/9ad2da3015e5faf73bdc5f1d09df3e47238e3edf\"\u003e\u003ccode\u003e9ad2da3\u003c/code\u003e\u003c/a\u003e Bump 0.15.14 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25295\"\u003e#25295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c714e84952510696c05ec21b0158a3548898f594\"\u003e\u003ccode\u003ec714e84\u003c/code\u003e\u003c/a\u003e [ty] Modernize setup of union types in mdtests (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25291\"\u003e#25291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/8a8e35ebfe318e2467a0f276e5d1a3a9032a55ad\"\u003e\u003ccode\u003e8a8e35e\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Skip \u003ccode\u003eC417\u003c/code\u003e for lambdas with positional-only parame...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/aea5ed4d278017057c2e842c6c3a2e92ad71495f\"\u003e\u003ccode\u003eaea5ed4\u003c/code\u003e\u003c/a\u003e Avoid unnecessary parser lookahead for operators (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25290\"\u003e#25290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e9d72bb420f26c23e6660bfce4dfa0028b931bff\"\u003e\u003ccode\u003ee9d72bb\u003c/code\u003e\u003c/a\u003e [ty] Allow enum member accesses on \u003ccode\u003eself\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25077\"\u003e#25077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6cbd59b511a92d5f408db57bde33367c0d47b672\"\u003e\u003ccode\u003e6cbd59b\u003c/code\u003e\u003c/a\u003e Set \u003ccode\u003eexclude-newer = \u0026quot;7 days\u0026quot;\u003c/code\u003e in our PEP-723 scripts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25285\"\u003e#25285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/9999a3967ae28fe3295131e8883b6947f272a076\"\u003e\u003ccode\u003e9999a39\u003c/code\u003e\u003c/a\u003e Update code example on how to update Neovim LSP log level (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25284\"\u003e#25284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/67d8c544f0d1c526a2fc60d4bb1358fd7956d178\"\u003e\u003ccode\u003e67d8c54\u003c/code\u003e\u003c/a\u003e [ty] Retain recursively-defined state in binary expressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25277\"\u003e#25277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/25a3191140dc0467f9d196f35c128fefde269261\"\u003e\u003ccode\u003e25a3191\u003c/code\u003e\u003c/a\u003e [ty] Refine Callable class-decorator fallback for unknown results (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25250\"\u003e#25250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c423054dc09e5b644c926b6b527b6accfbe693e9\"\u003e\u003ccode\u003ec423054\u003c/code\u003e\u003c/a\u003e Add a recursion limit to the parser (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24810\"\u003e#24810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.11...0.15.14\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `authlib` from 1.7.0 to 1.7.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/authlib/authlib/releases\"\u003eauthlib's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.7.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the readme links by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/authlib/authlib/pull/886\"\u003eauthlib/authlib#886\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow non-recommended algorithms in ClientSecretJWT and PrivateKey by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/authlib/authlib/pull/887\"\u003eauthlib/authlib#887\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate BCP47 language tags with a regex by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/authlib/authlib/pull/873\"\u003eauthlib/authlib#873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RFC7523 signing with non RSA keys by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/authlib/authlib/pull/884\"\u003eauthlib/authlib#884\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/authlib/authlib/compare/v1.7.1...v1.7.2\"\u003ehttps://github.com/authlib/authlib/compare/v1.7.1...v1.7.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.7.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix authlib.jose deprecation warning poping from _joserfc_helpers by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/authlib/authlib/pull/881\"\u003eauthlib/authlib#881\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix redirecting to unvalidated \u003ccode\u003eredirect_uri\u003c/code\u003e on \u003ccode\u003eInvalidScopeError\u003c/code\u003e  in \u003ccode\u003eOpenIDImplicitGrant\u003c/code\u003e and \u003ccode\u003eOpenIDHybridGrant\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/authlib/authlib/compare/v1.7.0...v1.7.1\"\u003ehttps://github.com/authlib/authlib/compare/v1.7.0...v1.7.1\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/authlib/authlib/commit/a0b76fac3fa114d7759af2010546bfc332364b63\"\u003e\u003ccode\u003ea0b76fa\u003c/code\u003e\u003c/a\u003e chore: bump to 1.7.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/c85c7f2b02faf2667f62b27aa60df042dbc9b4ab\"\u003e\u003ccode\u003ec85c7f2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/authlib/authlib/issues/884\"\u003e#884\u003c/a\u003e from azmeuk/852-rfc7523-key-import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/a3b2adda43b4452ba9f384d224f95848974b4eb4\"\u003e\u003ccode\u003ea3b2add\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/authlib/authlib/issues/873\"\u003e#873\u003c/a\u003e from azmeuk/bcp47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/f2578eaa198aedbaaaf3bb00eccc451e15e45e3a\"\u003e\u003ccode\u003ef2578ea\u003c/code\u003e\u003c/a\u003e fix: Import RSAKey in auth.py for additional key support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/b57182cf46a53da19623208dd852270ddec8ebcc\"\u003e\u003ccode\u003eb57182c\u003c/code\u003e\u003c/a\u003e fix: fallback support RSAKey when client_secret is text\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/4e7590292ca9f948a0766640b27025618750e6c1\"\u003e\u003ccode\u003e4e75902\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into 852-rfc7523-key-import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/5eb4a860600ea2f3acc1a2a9c3e621a430da9d0f\"\u003e\u003ccode\u003e5eb4a86\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/authlib/authlib/issues/887\"\u003e#887\u003c/a\u003e from azmeuk/883-alg\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/5633f37c47bd8352b962f982cb916bc8b95bb5d5\"\u003e\u003ccode\u003e5633f37\u003c/code\u003e\u003c/a\u003e fix: allow non-recommended algorithms in ClientSecretJWT and PrivateKeyJWT\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/4c8e7b381aaef68f60e2323a25ba96cdb346f82f\"\u003e\u003ccode\u003e4c8e7b3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/authlib/authlib/issues/886\"\u003e#886\u003c/a\u003e from azmeuk/885-readme\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/23b333e48a17ebf9f032a0e0f9eb3f990a06f97b\"\u003e\u003ccode\u003e23b333e\u003c/code\u003e\u003c/a\u003e docs: fix the readme links\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/authlib/authlib/compare/v1.7.0...v1.7.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-auth` from 2.47.0 to 2.53.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-auth-library-python/releases\"\u003egoogle-auth's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.49.0.dev0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.48.0...v2.49.0-dev0\"\u003e2.49.0-dev0\u003c/a\u003e (2026-01-26)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove deprecated rsa dependency (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e98cf69284d3620619a70b54fb0b9533caf11878\"\u003ee98cf69284d3620619a70b54fb0b9533caf11878\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-auth 2.48.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.47.0...v2.48.0\"\u003e2.48.0\u003c/a\u003e (2026-01-21)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ehonor \u003ccode\u003eNO_GCE_CHECK\u003c/code\u003e environment variable (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1610\"\u003e#1610\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/383c9827\"\u003e383c9827\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd configurable GCE Metadata Server retries (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1488\"\u003e#1488\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/454b441b\"\u003e454b441b\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd cryptography as required dependency (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1929\"\u003e#1929\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/52558ae2\"\u003e52558ae2\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport the mTLS IAM domain for Certificate based Access (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1938\"\u003e#1938\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/8dcf91a1\"\u003e8dcf91a1\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eresolve circular imports (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1942\"\u003e#1942\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/25c1b064\"\u003e25c1b064\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse \u003ccode\u003euser_verification=preferred\u003c/code\u003e for ReAuth WebAuthn challenge (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1798\"\u003e#1798\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/3f88a240\"\u003e3f88a240\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eremoves \u003ccode\u003econtent-header\u003c/code\u003e from AWS IMDS get request (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1934\"\u003e#1934\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/97bfea9e\"\u003e97bfea9e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003edetect correct auth when ADC env var is set but empty (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1374\"\u003e#1374\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/bfc07e10\"\u003ebfc07e10\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ereplace deprecated utcfromtimestamp (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1799\"\u003e#1799\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e431f20c\"\u003ee431f20c\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.48.0rc0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.47.0...v2.48.0rc0\"\u003e2.48.0rc0\u003c/a\u003e (2026-01-20)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ehonor NO_GCE_CHECK environment variable (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1610\"\u003e#1610\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/383c9827536d9376e8248370ce4c2b83e468d027\"\u003e383c98\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd configurable GCE Metadata Server retries (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1488\"\u003e#1488\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/454b441b478ec62bbf1a6ad5bceb6c7cbbfd0c37\"\u003e454b44\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esupport mTLS IAM domain for Certificate based Access (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1938\"\u003e#1938\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/8dcf91a1b05c85fbbd0bcee78d66e498099102ab\"\u003e8dcf91\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd cryptography as required dependency (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1929\"\u003e#1929\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/52558ae2881b1e6555f6f5c0d76365c15807ead9\"\u003e52558a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse user_verification=preferred for ReAuth WebAuthn challenge (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1798\"\u003e#1798\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/3f88a24089c4ee6822d510de0db210b54260d873\"\u003e3f88a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace deprecated utcfromtimestamp (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1799\"\u003e#1799\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e431f20cf73ccac71926a23ec454468cea92e053\"\u003ee431f2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edetect correct auth when ADC env var is set by empty (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1374\"\u003e#1374\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/bfc07e1050bd0aa86fa3b08cdf70c9b68b5fe6a2\"\u003ebfc07e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremoved content-header from AWS IMDS (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1934\"\u003e#1934\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/97bfea9e02ede953fc8ee154e0deed3a3cfc6dcc\"\u003e97bfea\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/googleapis/google-auth-library-python/blob/main/CHANGELOG.md\"\u003egoogle-auth's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"https://pypi.org/project/google-auth/#history\"\u003ePyPI History\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.47.0...v2.48.0\"\u003e2.48.0\u003c/a\u003e (2026-01-22)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd cryptography as required dependency (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1929\"\u003e#1929\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/52558ae2881b1e6555f6f5c0d76365c15807ead9\"\u003e52558ae2881b1e6555f6f5c0d76365c15807ead9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport the mTLS IAM domain for Certificate based Access (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1938\"\u003e#1938\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/8dcf91a1b05c85fbbd0bcee78d66e498099102ab\"\u003e8dcf91a1b05c85fbbd0bcee78d66e498099102ab\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd configurable GCE Metadata Server retries (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1488\"\u003e#1488\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/454b441b478ec62bbf1a6ad5bceb6c7cbbfd0c37\"\u003e454b441b478ec62bbf1a6ad5bceb6c7cbbfd0c37\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ehonor \u003ccode\u003eNO_GCE_CHECK\u003c/code\u003e environment variable (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1610\"\u003e#1610\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/383c9827536d9376e8248370ce4c2b83e468d027\"\u003e383c9827536d9376e8248370ce4c2b83e468d027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eresolve circular imports (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1942\"\u003e#1942\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/25c1b064545702cbef087cfcd15fbbb6ef1af74f\"\u003e25c1b064545702cbef087cfcd15fbbb6ef1af74f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremoves \u003ccode\u003econtent-header\u003c/code\u003e from AWS IMDS get request (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1934\"\u003e#1934\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/97bfea9e02ede953fc8ee154e0deed3a3cfc6dcc\"\u003e97bfea9e02ede953fc8ee154e0deed3a3cfc6dcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edetect correct auth when ADC env var is set but empty (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1374\"\u003e#1374\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/bfc07e1050bd0aa86fa3b08cdf70c9b68b5fe6a2\"\u003ebfc07e1050bd0aa86fa3b08cdf70c9b68b5fe6a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace deprecated utcfromtimestamp (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1799\"\u003e#1799\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e431f20cf73ccac71926a23ec454468cea92e053\"\u003ee431f20cf73ccac71926a23ec454468cea92e053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003euser_verification=preferred\u003c/code\u003e for ReAuth WebAuthn challenge (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1798\"\u003e#1798\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/3f88a24089c4ee6822d510de0db210b54260d873\"\u003e3f88a24089c4ee6822d510de0db210b54260d873\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\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/google-auth-library-python/commits\"\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 `typing-extensions` from 4.14.1 to 4.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003cp\u003eNew features since 4.14.1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.15.0 (August 25, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003ch1\u003eRelease 4.15.0rc1 (August 18, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/typing_extensions/commit/9d1637e264b5c1a6b7acee3e907015f89b20c2c9\"\u003e\u003ccode\u003e9d1637e\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4bd67c5be5d9443c7d33c314d02a56ee125eb88d\"\u003e\u003ccode\u003e4bd67c5\u003c/code\u003e\u003c/a\u003e Coverage: exclude some noise (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e589a26da73b075c5276bae40b86db1af0144f84\"\u003e\u003ccode\u003ee589a26\u003c/code\u003e\u003c/a\u003e Coverage: add detailed report to job summary (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/67d37fed1298e050f74d5acc95b2621bd37837ad\"\u003e\u003ccode\u003e67d37fe\u003c/code\u003e\u003c/a\u003e Coverage: Implement fail_under (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e9ae26f5286edee9262727755ecb9ad16e999192\"\u003e\u003ccode\u003ee9ae26f\u003c/code\u003e\u003c/a\u003e Don't delete previous coverage comment (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/ac80bb728a3006fc88ef7373b92f0c25cfcc7895\"\u003e\u003ccode\u003eac80bb7\u003c/code\u003e\u003c/a\u003e Add Coverage workflow (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/623\"\u003e#623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/abaaafd98c1cc7e5baf098ec287a3d22cb339670\"\u003e\u003ccode\u003eabaaafd\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/98104053ea8d49bcdd247804e5fa9f73136acbd4\"\u003e\u003ccode\u003e9810405\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e@disjoint_base\u003c/code\u003e (PEP 800) (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/634\"\u003e#634\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/7ee9e05fd484d06899ce56e80f5e1aa4c760fc03\"\u003e\u003ccode\u003e7ee9e05\u003c/code\u003e\u003c/a\u003e Backport type_params fix from CPython (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/1e8eb9c06ef51b3a1e1f05303a16feca13f5ed98\"\u003e\u003ccode\u003e1e8eb9c\u003c/code\u003e\u003c/a\u003e Do not refer to PEP 705 as being experimental (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.14.1...4.15.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.10.0 to 4.13.0\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.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003ettl\u003c/code\u003e parameter to the \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e wrapper (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1073\"\u003e#1073\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWidened the type annotations of file I/O streams to accept \u003ccode\u003eIO[bytes]\u003c/code\u003e instead of just \u003ccode\u003eBinaryIO\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.Path\u003c/code\u003e not being compatible with Python 3.15 due to the removal of \u003ccode\u003epathlib.Path.is_reserved()\u003c/code\u003e and the addition of \u003ccode\u003epathlib.Path.__vfspath__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1061\"\u003e#1061\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eBrokenResourceError\u003c/code\u003e raised by the asyncio \u003ccode\u003eSocketStream\u003c/code\u003e not having the original exception as its cause (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1055\"\u003e#1055\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eTypeError\u003c/code\u003e raised when using \u0026quot;func\u0026quot; as a parameter name in \u003ccode\u003epytest.mark.parametrize\u003c/code\u003e when using the pytest plugin (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1068\"\u003e#1068\u003c/a\u003e; PR by \u003ca href=\"https://github.com/JohnnyDeuss\"\u003e\u003ccode\u003e@​JohnnyDeuss\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the pytest plugin not running tests that had the \u003ccode\u003eanyio\u003c/code\u003e marker added programmatically via \u003ccode\u003epytest_collection_modifyitems\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/422\"\u003e#422\u003c/a\u003e; PR by \u003ca href=\"https://github.com/chbndrhnns\"\u003e\u003ccode\u003e@​chbndrhnns\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when they are contained in an exception group alongside non-cancellation exceptions (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1091\"\u003e#1091\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCondition.wait()\u003c/code\u003e not passing on a notification when the task is cancelled but already received a notification\u003c/li\u003e\n\u003cli\u003eFixed inverted condition in the process pool shutdown phase which would cause still-running pooled processes not to be terminated (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1074\"\u003e#1074\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged all functions currently raising the private \u003ccode\u003eNoCurrentAsyncBackend\u003c/code\u003e exception (since v4.12.0) to instead raise the public \u003ccode\u003eNoEventLoopError\u003c/code\u003e exception (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1048\"\u003e#1048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e not working with instance methods (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1042\"\u003e#1042\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for asyncio's \u003ca href=\"https://docs.python.org/3/library/asyncio-graph.html\"\u003etask call graphs\u003c/a\u003e on Python 3.14 and later when using AnyIO's task groups (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1025\"\u003e#1025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded an asynchronous implementation of the \u003ccode\u003efunctools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1001\"\u003e#1001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003euvloop=True\u003c/code\u003e on Windows via the \u003ca href=\"https://github.com/Vizonex/Winloop\"\u003ewinloop\u003c/a\u003e implementation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/960\"\u003e#960\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for use as a context manager to \u003ccode\u003eanyio.lowlevel.RunVar\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1003\"\u003e#1003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003e__all__\u003c/code\u003e declarations to public submodules (\u003ccode\u003eanyio.lowlevel\u003c/code\u003e etc.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1009\"\u003e#1009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the ability to set the token count of a \u003ccode\u003eCapacityLimiter\u003c/code\u003e to zero (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1019\"\u003e#1019\u003c/a\u003e; requires Python 3.10 or later when using Trio)\u003c/li\u003e\n\u003cli\u003eAdded parameters \u003ccode\u003ecase_sensitive\u003c/code\u003e and \u003ccode\u003erecurse_symlinks\u003c/code\u003e along with support for path-like objects to \u003ccode\u003eanyio.Path.glob()\u003c/code\u003e and \u003ccode\u003eanyio.Path.rglob()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1033\"\u003e#1033\u003c/a\u003e; PR by \u003ca href=\"https://github.com/northisup\"\u003e\u003ccode\u003e@​northisup\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped \u003ccode\u003esniffio\u003c/code\u003e as a direct dependency and added the \u003ccode\u003eget_available_backends()\u003c/code\u003e function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1021\"\u003e#1021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not raising \u003ccode\u003eClosedResourceError\u003c/code\u003e and \u003ccode\u003eBrokenResourceError\u003c/code\u003e on asyncio. Previously, a non-AnyIO exception was raised in such cases (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not checkpointing before writing data on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1002\"\u003e#1002\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a race condition where cancelling a \u003ccode\u003eFuture\u003c/code\u003e from \u003ccode\u003eBlockingPortal.start_task_soon()\u003c/code\u003e would sometimes not cancel the async function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1011\"\u003e#1011\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the presence of the pytest plugin causing breakage with older versions of pytest (\u0026lt;= 6.1.2) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1028\"\u003e#1028\u003c/a\u003e; PR by \u003ca href=\"https://github.com/saper\"\u003e\u003ccode\u003e@​saper\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a rarely occurring \u003ccode\u003eRuntimeError: Set changed size during iteration\u003c/code\u003e while shutting down the process pool when using the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/985\"\u003e#985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for cancellation reasons (the \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003eCancelScope.cancel()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum version of Trio to v0.31.0\u003c/li\u003e\n\u003cli\u003eAdded the ability to enter the event loop from foreign (non-worker) threads by passing the return value of \u003ccode\u003eanyio.lowlevel.current_token()\u003c/code\u003e to \u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e and \u003ccode\u003eanyio.from_thread.run_sync()\u003c/code\u003e as the \u003ccode\u003etoken\u003c/code\u003e keyword argument (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded pytest option (\u003ccode\u003eanyio_mode = \u0026quot;auto\u0026quot;\u003c/code\u003e) to make the pytest plugin automatically handle all async tests (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the \u003ccode\u003eanyio.Condition.wait_for()\u003c/code\u003e method for feature parity with asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the default type argument of \u003ccode\u003eanyio.abc.TaskStatus\u003c/code\u003e from \u003ccode\u003eAny\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/964\"\u003e#964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed TCP listener behavior to guarantee the same ephemeral port is used for all socket listeners when \u003ccode\u003elocal_port=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/857\"\u003e#857\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed inconsistency between Trio and asyncio where a TCP stream that previously raised a \u003ccode\u003eBrokenResourceError\u003c/code\u003e on \u003ccode\u003esend()\u003c/code\u003e would still raise \u003ccode\u003eBrokenResourceError\u003c/code\u003e after the stream was closed on asyncio, but \u003ccode\u003eClosedResourceError\u003c/code\u003e on Trio. They now both raise a \u003ccode\u003eClosedResourceError\u003c/code\u003e in this scenario. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\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/afbe93ca9d0c447adf26e9c1715ac20870622bf2\"\u003e\u003ccode\u003eafbe93c\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/33bdf2e4b4f40c2df178123746147a6d2471808d\"\u003e\u003ccode\u003e33bdf2e\u003c/code\u003e\u003c/a\u003e Rearranged the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/19e09e25bc5a23dd78a577d8c3909dd377057c78\"\u003e\u003ccode\u003e19e09e2\u003c/code\u003e\u003c/a\u003e Fixed inverted condition in _forcibly_shutdown_process_pool_on_exit (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9369d80b9e8292f2a892a9d5c73923c6a28aa08c\"\u003e\u003ccode\u003e9369d80\u003c/code\u003e\u003c/a\u003e Fixed Condition.wait() not handing over notification when cancelled\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f122abdc6f6b166c6b6ac27d36d55cdf8fa08e8\"\u003e\u003ccode\u003e6f122ab\u003c/code\u003e\u003c/a\u003e Fixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/beaa45aff568a4020f2faf317321dd92f0e1f4a0\"\u003e\u003ccode\u003ebeaa45a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1097\"\u003e#1097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/602f6606dcf3f37702686a4f3e161328c537b07f\"\u003e\u003ccode\u003e602f660\u003c/code\u003e\u003c/a\u003e Widened type annotations to accept IO[bytes] in file streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b5dcd45170701a756ba634197398f05d4710cab3\"\u003e\u003ccode\u003eb5dcd45\u003c/code\u003e\u003c/a\u003e Added note about erasing the template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d68670b3b4e0917d4caff2de082e03220f3e05a1\"\u003e\u003ccode\u003ed68670b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/fc17a22dd948e6a3d90d99908813f0010dfc3d2c\"\u003e\u003ccode\u003efc17a22\u003c/code\u003e\u003c/a\u003e tweak to_thread docs about abandon_on_cancel (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1088\"\u003e#1088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.10.0...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typer` from 0.16.0 to 0.25.1\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.25.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Add Typer Library Skill for Agents. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1620\"\u003e#1620\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 ruff from 0.15.11 to 0.15.12. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1722\"\u003e#1722\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 prek from 0.3.10 to 0.3.11. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1723\"\u003e#1723\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\u003ch2\u003e0.25.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Don't truncate code lines in traceback when formatted with Rich. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1695\"\u003e#1695\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\u003ch2\u003e0.24.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Ensure that \u003ccode\u003etyper.launch\u003c/code\u003e forwards correctly when launching a file. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1708\"\u003e#1708\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\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🎨 Ensure \u003ccode\u003ety\u003c/code\u003e runs without errors. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1628\"\u003e#1628\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\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Add dates to release notes. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1612\"\u003e#1612\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 code blocks in reference docs overflowing table width. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1630\"\u003e#1630\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 broken link to FastAPI and Friends newsletter. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1540\"\u003e#1540\u003c/a\u003e by \u003ca href=\"https://github.com/Karlemami\"\u003e\u003ccode\u003e@​Karlemami\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔨 Handle external links \u003ccode\u003etarget=_blank\u003c/code\u003e and CSS automatically in JS and CSS. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1622\"\u003e#1622\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📝 Remove link to Typer developer survey. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1609\"\u003e#1609\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✏️ Clean up documentation in \u003ccode\u003einstall.md\u003c/code\u003e file. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1606\"\u003e#1606\u003c/a\u003e by \u003ca href=\"https://github.com/Johandielangman\"\u003e\u003ccode\u003e@​Johandielangman\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 mypy from 1.20.1 to 1.20.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1715\"\u003e#1715\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 prek from 0.3.9 to 0.3.10. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1716\"\u003e#1716\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.13.1 to 2.14.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1713\"\u003e#1713\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 from 0.0.31 to 0.0.32. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1711\"\u003e#1711\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 from 2.13.2 to 2.13.3. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1712\"\u003e#1712\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 pygments from 2.19.2 to 2.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1667\"\u003e#1667\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 pymdown-extensions from 10.20 to 10.21.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1710\"\u003e#1710\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 actions/cache from 5.0.4 to 5.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1700\"\u003e#1700\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 from 2.13.1 to 2.13.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1703\"\u003e#1703\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 actions/upload-artifact from 7.0.0 to 7.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1701\"\u003e#1701\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 ruff from 0.15.10 to 0.15.11. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1704\"\u003e#1704\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 cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1702\"\u003e#1702\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 astral-sh/setup-uv from 7.6.0 to 8.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1699\"\u003e#1699\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 from 0.0.30 to 0.0.31. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1696\"\u003e#1696\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 from 2.13.0 to 2.13.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1697\"\u003e#1697\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!-- 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/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.25.1 (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Add Typer Library Skill for Agents. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1620\"\u003e#1620\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 ruff from 0.15.11 to 0.15.12. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1722\"\u003e#1722\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 prek from 0.3.10 to 0.3.11. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1723\"\u003e#1723\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\u003ch2\u003e0.25.0 (2026-04-26)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Don't truncate code lines in traceback when formatted with Rich. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1695\"\u003e#1695\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\u003ch2\u003e0.24.2 (2026-04-22)\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Ensure that \u003ccode\u003etyper.launch\u003c/code\u003e forwards correctly when launching a file. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1708\"\u003e#1708\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\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🎨 Ensure \u003ccode\u003ety\u003c/code\u003e runs without errors. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1628\"\u003e#1628\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\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Add dates to release notes. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1612\"\u003e#1612\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 code blocks in reference docs overflowing table width. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1630\"\u003e#1630\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 broken link to FastAPI and Friends newsletter. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1540\"\u003e#1540\u003c/a\u003e by \u003ca href=\"https://github.com/Karlemami\"\u003e\u003ccode\u003e@​Karlemami\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔨 Handle external links \u003ccode\u003etarget=_blank\u003c/code\u003e and CSS automatically in JS and CSS. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1622\"\u003e#1622\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📝 Remove link to Typer developer survey. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1609\"\u003e#1609\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✏️ Clean up documentation in \u003ccode\u003einstall.md\u003c/code\u003e file. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1606\"\u003e#1606\u003c/a\u003e by \u003ca href=\"https://github.com/Johandielangman\"\u003e\u003ccode\u003e@​Johandielangman\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 mypy from 1.20.1 to 1.20.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1715\"\u003e#1715\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 prek from 0.3.9 to 0.3.10. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1716\"\u003e#1716\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.13.1 to 2.14.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1713\"\u003e#1713\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 from 0.0.31 to 0.0.32. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1711\"\u003e#1711\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 from 2.13.2 to 2.13.3. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1712\"\u003e#1712\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 pygments from 2.19.2 to 2.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1667\"\u003e#1667\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 pymdown-extensions from 10.20 to 10.21.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1710\"\u003e#1710\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 actions/cache from 5.0.4 to 5.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1700\"\u003e#1700\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 from 2.13.1 to 2.13.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1703\"\u003e#1703\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 actions/upload-artifact from 7.0.0 to 7.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1701\"\u003e#1701\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 ruff from 0.15.10 to 0.15.11. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1704\"\u003e#1704\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 cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1702\"\u003e#1702\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!-- 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/fastapi/typer/commit/cfcc2ef9f948bcce67897a6c7e689d39da690bf9\"\u003e\u003ccode\u003ecfcc2ef\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.25.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/13846cc59bd574567a9a1f56eae3cd42b9aa2a4f\"\u003e\u003ccode\u003e13846cc\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/a43746997ad6f2b4a8829c69c919f4d4c2cc0698\"\u003e\u003ccode\u003ea437469\u003c/code\u003e\u003c/a\u003e 🔧 Add Typer Library Skill for Agents (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1620\"\u003e#1620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/ba6cc2c9e7cba35f891c91118e228e1d2da35edb\"\u003e\u003ccode\u003eba6cc2c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/0f3ead07c2bb384fdd590e895ca6705582c58d89\"\u003e\u003ccode\u003e0f3ead0\u003c/code\u003e\u003c/a\u003e ⬆ Bump ruff from 0.15.11 to 0.15.12 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1722\"\u003e#1722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/db4ade64936599b3460f2fc0a7c550c3fedc33b0\"\u003e\u003ccode\u003edb4ade6\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/5a5206ceed2afdf234f88a6e2ef74ad9ebdf0d92\"\u003e\u003ccode\u003e5a5206c\u003c/code\u003e\u003c/a\u003e ⬆ Bump prek from 0.3.10 to 0.3.11 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1723\"\u003e#1723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/959845e173b4bec0d606d99247815c2710613ca8\"\u003e\u003ccode\u003e959845e\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.25.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/5e1fcfb5935e7ac3ff3c7526ef297eae31bd4822\"\u003e\u003ccode\u003e5e1fcfb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/dfb21ad034804584702d553ebfba40d8f4d791b9\"\u003e\u003ccode\u003edfb21ad\u003c/code\u003e\u003c/a\u003e 🚸 Don't truncate code lines in traceback when formatted with Rich (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1695\"\u003e#1695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/typer/compare/0.16.0...0.25.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.35.0 to 0.48.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.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#...\n\n_Description has been truncated_","html_url":"https://github.com/tmohanvamsi/kagent/pull/38","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmohanvamsi%2Fkagent/issues/38","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/38/packages"},{"uuid":"4462408388","node_id":"PR_kwDOPa2xds7cUyEh","number":136,"state":"closed","title":"chore(deps): bump the minor-patch group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-17T05:36:11.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-17T05:30:04.000Z","updated_at":"2026-05-17T05:36:13.000Z","time_to_close":367,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"minor-patch","update_count":16,"packages":[{"name":"anyio","old_version":"4.9.0","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"click","old_version":"8.1.8","new_version":"8.4.0","repository_url":"https://github.com/pallets/click"},{"name":"idna","old_version":"3.10","new_version":"3.15","repository_url":"https://github.com/kjd/idna"},{"name":"pydantic-settings","old_version":"2.8.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"typing-extensions","old_version":"4.14.1","new_version":"4.15.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"uvicorn","old_version":"0.45.0","new_version":"0.47.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"psycopg2-binary","old_version":"2.9.10","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.28","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"webauthn","old_version":"2.5.2","new_version":"2.7.1","repository_url":"https://github.com/duo-labs/py_webauthn"},{"name":"google-auth","old_version":"2.45.0","new_version":"2.53.0","repository_url":"https://github.com/googleapis/google-auth-library-python"},{"name":"requests","old_version":"2.33.0","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"beautifulsoup4","old_version":"4.12.3","new_version":"4.14.3"},{"name":"boto3","old_version":"1.42.91","new_version":"1.43.9","repository_url":"https://github.com/boto/boto3"},{"name":"boto3-stubs","old_version":"1.42.91","new_version":"1.43.9","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"moto","old_version":"5.1.22","new_version":"5.2.1","repository_url":"https://github.com/getmoto/moto"},{"name":"black","old_version":"26.3.1","new_version":"26.5.0","repository_url":"https://github.com/psf/black"}],"path":null,"ecosystem":"pip"},"body":"Bumps the minor-patch group with 16 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.9.0` | `4.13.0` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.4.0` |\n| [idna](https://github.com/kjd/idna) | `3.10` | `3.15` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.8.1` | `2.14.1` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.14.1` | `4.15.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.45.0` | `0.47.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.10` | `2.9.12` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.28` |\n| [webauthn](https://github.com/duo-labs/py_webauthn) | `2.5.2` | `2.7.1` |\n| [google-auth](https://github.com/googleapis/google-auth-library-python) | `2.45.0` | `2.53.0` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.2` |\n| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.12.3` | `4.14.3` |\n| [boto3](https://github.com/boto/boto3) | `1.42.91` | `1.43.9` |\n| [boto3-stubs](https://github.com/youtype/mypy_boto3_builder) | `1.42.91` | `1.43.9` |\n| [moto](https://github.com/getmoto/moto) | `5.1.22` | `5.2.1` |\n| [black](https://github.com/psf/black) | `26.3.1` | `26.5.0` |\n\n\nUpdates `anyio` from 4.9.0 to 4.13.0\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.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003ettl\u003c/code\u003e parameter to the \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e wrapper (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1073\"\u003e#1073\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWidened the type annotations of file I/O streams to accept \u003ccode\u003eIO[bytes]\u003c/code\u003e instead of just \u003ccode\u003eBinaryIO\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.Path\u003c/code\u003e not being compatible with Python 3.15 due to the removal of \u003ccode\u003epathlib.Path.is_reserved()\u003c/code\u003e and the addition of \u003ccode\u003epathlib.Path.__vfspath__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1061\"\u003e#1061\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eBrokenResourceError\u003c/code\u003e raised by the asyncio \u003ccode\u003eSocketStream\u003c/code\u003e not having the original exception as its cause (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1055\"\u003e#1055\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eTypeError\u003c/code\u003e raised when using \u0026quot;func\u0026quot; as a parameter name in \u003ccode\u003epytest.mark.parametrize\u003c/code\u003e when using the pytest plugin (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1068\"\u003e#1068\u003c/a\u003e; PR by \u003ca href=\"https://github.com/JohnnyDeuss\"\u003e\u003ccode\u003e@​JohnnyDeuss\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the pytest plugin not running tests that had the \u003ccode\u003eanyio\u003c/code\u003e marker added programmatically via \u003ccode\u003epytest_collection_modifyitems\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/422\"\u003e#422\u003c/a\u003e; PR by \u003ca href=\"https://github.com/chbndrhnns\"\u003e\u003ccode\u003e@​chbndrhnns\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when they are contained in an exception group alongside non-cancellation exceptions (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1091\"\u003e#1091\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCondition.wait()\u003c/code\u003e not passing on a notification when the task is cancelled but already received a notification\u003c/li\u003e\n\u003cli\u003eFixed inverted condition in the process pool shutdown phase which would cause still-running pooled processes not to be terminated (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1074\"\u003e#1074\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged all functions currently raising the private \u003ccode\u003eNoCurrentAsyncBackend\u003c/code\u003e exception (since v4.12.0) to instead raise the public \u003ccode\u003eNoEventLoopError\u003c/code\u003e exception (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1048\"\u003e#1048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e not working with instance methods (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1042\"\u003e#1042\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for asyncio's \u003ca href=\"https://docs.python.org/3/library/asyncio-graph.html\"\u003etask call graphs\u003c/a\u003e on Python 3.14 and later when using AnyIO's task groups (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1025\"\u003e#1025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded an asynchronous implementation of the \u003ccode\u003efunctools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1001\"\u003e#1001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003euvloop=True\u003c/code\u003e on Windows via the \u003ca href=\"https://github.com/Vizonex/Winloop\"\u003ewinloop\u003c/a\u003e implementation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/960\"\u003e#960\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for use as a context manager to \u003ccode\u003eanyio.lowlevel.RunVar\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1003\"\u003e#1003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003e__all__\u003c/code\u003e declarations to public submodules (\u003ccode\u003eanyio.lowlevel\u003c/code\u003e etc.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1009\"\u003e#1009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the ability to set the token count of a \u003ccode\u003eCapacityLimiter\u003c/code\u003e to zero (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1019\"\u003e#1019\u003c/a\u003e; requires Python 3.10 or later when using Trio)\u003c/li\u003e\n\u003cli\u003eAdded parameters \u003ccode\u003ecase_sensitive\u003c/code\u003e and \u003ccode\u003erecurse_symlinks\u003c/code\u003e along with support for path-like objects to \u003ccode\u003eanyio.Path.glob()\u003c/code\u003e and \u003ccode\u003eanyio.Path.rglob()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1033\"\u003e#1033\u003c/a\u003e; PR by \u003ca href=\"https://github.com/northisup\"\u003e\u003ccode\u003e@​northisup\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped \u003ccode\u003esniffio\u003c/code\u003e as a direct dependency and added the \u003ccode\u003eget_available_backends()\u003c/code\u003e function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1021\"\u003e#1021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not raising \u003ccode\u003eClosedResourceError\u003c/code\u003e and \u003ccode\u003eBrokenResourceError\u003c/code\u003e on asyncio. Previously, a non-AnyIO exception was raised in such cases (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not checkpointing before writing data on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1002\"\u003e#1002\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a race condition where cancelling a \u003ccode\u003eFuture\u003c/code\u003e from \u003ccode\u003eBlockingPortal.start_task_soon()\u003c/code\u003e would sometimes not cancel the async function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1011\"\u003e#1011\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the presence of the pytest plugin causing breakage with older versions of pytest (\u0026lt;= 6.1.2) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1028\"\u003e#1028\u003c/a\u003e; PR by \u003ca href=\"https://github.com/saper\"\u003e\u003ccode\u003e@​saper\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a rarely occurring \u003ccode\u003eRuntimeError: Set changed size during iteration\u003c/code\u003e while shutting down the process pool when using the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/985\"\u003e#985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for cancellation reasons (the \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003eCancelScope.cancel()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum version of Trio to v0.31.0\u003c/li\u003e\n\u003cli\u003eAdded the ability to enter the event loop from foreign (non-worker) threads by passing the return value of \u003ccode\u003eanyio.lowlevel.current_token()\u003c/code\u003e to \u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e and \u003ccode\u003eanyio.from_thread.run_sync()\u003c/code\u003e as the \u003ccode\u003etoken\u003c/code\u003e keyword argument (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded pytest option (\u003ccode\u003eanyio_mode = \u0026quot;auto\u0026quot;\u003c/code\u003e) to make the pytest plugin automatically handle all async tests (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the \u003ccode\u003eanyio.Condition.wait_for()\u003c/code\u003e method for feature parity with asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the default type argument of \u003ccode\u003eanyio.abc.TaskStatus\u003c/code\u003e from \u003ccode\u003eAny\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/964\"\u003e#964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed TCP listener behavior to guarantee the same ephemeral port is used for all socket listeners when \u003ccode\u003elocal_port=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/857\"\u003e#857\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed inconsistency between Trio and asyncio where a TCP stream that previously raised a \u003ccode\u003eBrokenResourceError\u003c/code\u003e on \u003ccode\u003esend()\u003c/code\u003e would still raise \u003ccode\u003eBrokenResourceError\u003c/code\u003e after the stream was closed on asyncio, but \u003ccode\u003eClosedResourceError\u003c/code\u003e on Trio. They now both raise a \u003ccode\u003eClosedResourceError\u003c/code\u003e in this scenario. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.10.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003efeed_data()\u003c/code\u003e method to the \u003ccode\u003eBufferedByteReceiveStream\u003c/code\u003e class, allowing users to inject data directly into the buffer\u003c/li\u003e\n\u003cli\u003eAdded various class methods to wrap existing sockets as listeners or socket streams:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSocketListener.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eConnectedUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXDatagramSocket.from_socket()\u003c/code\u003e\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/agronholm/anyio/commit/afbe93ca9d0c447adf26e9c1715ac20870622bf2\"\u003e\u003ccode\u003eafbe93c\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/33bdf2e4b4f40c2df178123746147a6d2471808d\"\u003e\u003ccode\u003e33bdf2e\u003c/code\u003e\u003c/a\u003e Rearranged the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/19e09e25bc5a23dd78a577d8c3909dd377057c78\"\u003e\u003ccode\u003e19e09e2\u003c/code\u003e\u003c/a\u003e Fixed inverted condition in _forcibly_shutdown_process_pool_on_exit (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9369d80b9e8292f2a892a9d5c73923c6a28aa08c\"\u003e\u003ccode\u003e9369d80\u003c/code\u003e\u003c/a\u003e Fixed Condition.wait() not handing over notification when cancelled\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f122abdc6f6b166c6b6ac27d36d55cdf8fa08e8\"\u003e\u003ccode\u003e6f122ab\u003c/code\u003e\u003c/a\u003e Fixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/beaa45aff568a4020f2faf317321dd92f0e1f4a0\"\u003e\u003ccode\u003ebeaa45a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1097\"\u003e#1097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/602f6606dcf3f37702686a4f3e161328c537b07f\"\u003e\u003ccode\u003e602f660\u003c/code\u003e\u003c/a\u003e Widened type annotations to accept IO[bytes] in file streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b5dcd45170701a756ba634197398f05d4710cab3\"\u003e\u003ccode\u003eb5dcd45\u003c/code\u003e\u003c/a\u003e Added note about erasing the template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d68670b3b4e0917d4caff2de082e03220f3e05a1\"\u003e\u003ccode\u003ed68670b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/fc17a22dd948e6a3d90d99908813f0010dfc3d2c\"\u003e\u003ccode\u003efc17a22\u003c/code\u003e\u003c/a\u003e tweak to_thread docs about abandon_on_cancel (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1088\"\u003e#1088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.9.0...4.13.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.1.8 to 8.4.0\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.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 \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.0/\"\u003ehttps://pypi.org/project/click/8.4.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParamType\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3371\"\u003e#3371\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\nparameterized by its converted value type.\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.convert\u003c/code\u003e return types are narrowed on all\nconcrete types (\u003ccode\u003estr\u003c/code\u003e for :class:\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e for\n:class:\u003ccode\u003eINT\u003c/code\u003e, etc.).\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.to_info_dict\u003c/code\u003e returns specific\n:class:\u003ccode\u003e~typing.TypedDict\u003c/code\u003e subclasses instead of\n\u003ccode\u003edict[str, Any]\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003eCompositeParamType\u003c/code\u003e and the number-range base are now\ngeneric with abstract methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRefactor \u003ccode\u003econvert_type\u003c/code\u003e to extract type inference into a private\n\u003ccode\u003e_guess_type\u003c/code\u003e helper, and add :func:\u003ccode\u003etyping.overload\u003c/code\u003e signatures.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3372\"\u003e#3372\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParameter\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2805\"\u003e#2805\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e is now an abstract base class, making explicit\nthat it cannot be instantiated directly.\u003c/li\u003e\n\u003cli\u003e:attr:\u003ccode\u003eParameter.name\u003c/code\u003e is now \u003ccode\u003estr\u003c/code\u003e instead of \u003ccode\u003estr | None\u003c/code\u003e.\nWhen \u003ccode\u003eexpose_value=False\u003c/code\u003e, the name is set to \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e instead\nof \u003ccode\u003eNone\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ectx\u003c/code\u003e parameter of :meth:\u003ccode\u003eParameter.get_error_hint\u003c/code\u003e is now\ntyped as \u003ccode\u003eContext | None\u003c/code\u003e, matching the runtime behavior.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSplit string values from \u003ccode\u003edefault_map\u003c/code\u003e for parameters with \u003ccode\u003enargs \u0026gt; 1\u003c/code\u003e\nor :class:\u003ccode\u003eTuple\u003c/code\u003e type, matching environment variable behavior.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2745\"\u003e#2745\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3364\"\u003e#3364\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAuto-detect \u003ccode\u003etype=UNPROCESSED\u003c/code\u003e for \u003ccode\u003eflag_value\u003c/code\u003e of non-basic types\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2012\"\u003e#2012\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3363\"\u003e#3363\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe error hint now uses \u003ccode\u003eCommand.get_help_option_names\u003c/code\u003e to pick\nnon-shadowed help option names, so \u003ccode\u003eTry '... -h'\u003c/code\u003e no longer points to a\nsubcommand option that shadows \u003ccode\u003e-h\u003c/code\u003e. All surviving names are shown\n(\u003ccode\u003e-h/--help\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/pallets/click/issues/2790\"\u003e#2790\u003c/a\u003e  \u003ca href=\"https://redirect.github.com/pallets/click/issues/3208\"\u003e#3208\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix readline functionality on non-Windows platforms. Prompt text is now\npassed directly to readline instead of being printed separately, allowing\nproper backspace, line editing, and line wrapping behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2968\"\u003e#2968\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\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,\nparameterized by its converted value type.\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.convert\u003c/code\u003e return types are narrowed on all\nconcrete types (\u003ccode\u003estr\u003c/code\u003e for :class:\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e for\n:class:\u003ccode\u003eINT\u003c/code\u003e, etc.).\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.to_info_dict\u003c/code\u003e returns specific\n:class:\u003ccode\u003e~typing.TypedDict\u003c/code\u003e subclasses instead of\n\u003ccode\u003edict[str, Any]\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003eCompositeParamType\u003c/code\u003e and the number-range base are now\ngeneric with abstract methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRefactor \u003ccode\u003econvert_type\u003c/code\u003e to extract type inference into a private\n\u003ccode\u003e_guess_type\u003c/code\u003e helper, and add :func:\u003ccode\u003etyping.overload\u003c/code\u003e signatures.\n:pr:\u003ccode\u003e3372\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e typing improvements. :pr:\u003ccode\u003e2805\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e is now an abstract base class, making explicit\nthat it cannot be instantiated directly.\u003c/li\u003e\n\u003cli\u003e:attr:\u003ccode\u003eParameter.name\u003c/code\u003e is now \u003ccode\u003estr\u003c/code\u003e instead of \u003ccode\u003estr | None\u003c/code\u003e.\nWhen \u003ccode\u003eexpose_value=False\u003c/code\u003e, the name is set to \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e instead\nof \u003ccode\u003eNone\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ectx\u003c/code\u003e parameter of :meth:\u003ccode\u003eParameter.get_error_hint\u003c/code\u003e is now\ntyped as \u003ccode\u003eContext | None\u003c/code\u003e, matching the runtime behavior.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSplit string values from \u003ccode\u003edefault_map\u003c/code\u003e for parameters with \u003ccode\u003enargs \u0026gt; 1\u003c/code\u003e\nor :class:\u003ccode\u003eTuple\u003c/code\u003e type, matching environment variable behavior.\n:issue:\u003ccode\u003e2745\u003c/code\u003e :pr:\u003ccode\u003e3364\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAuto-detect \u003ccode\u003etype=UNPROCESSED\u003c/code\u003e for \u003ccode\u003eflag_value\u003c/code\u003e of non-basic types\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. :issue:\u003ccode\u003e2012\u003c/code\u003e :pr:\u003ccode\u003e3363\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe error hint now uses :meth:\u003ccode\u003eCommand.get_help_option_names\u003c/code\u003e to pick\nnon-shadowed help option names, so \u003ccode\u003eTry '... -h'\u003c/code\u003e no longer points to a\nsubcommand option that shadows \u003ccode\u003e-h\u003c/code\u003e. All surviving names are shown\n(\u003ccode\u003e-h/--help\u003c/code\u003e). :issue:\u003ccode\u003e2790\u003c/code\u003e :pr:\u003ccode\u003e3208\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix readline functionality on non-Windows platforms. Prompt text is now\npassed directly to readline instead of being printed separately, allowing\nproper backspace, line editing, and line wrapping behavior. :issue:\u003ccode\u003e2968\u003c/code\u003e\n:pr:\u003ccode\u003e2969\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse :func:\u003ccode\u003eos.startfile\u003c/code\u003e on Windows to open URLs in :func:\u003ccode\u003eopen_url\u003c/code\u003e,\nreplacing the \u003ccode\u003estart\u003c/code\u003e built-in which cannot be invoked without\n\u003ccode\u003eshell=True\u003c/code\u003e. :issue:\u003ccode\u003e3164\u003c/code\u003e :pr:\u003ccode\u003e3186\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix Fish shell completion errors when option help text contains newlines.\n:issue:\u003ccode\u003e3043\u003c/code\u003e :pr:\u003ccode\u003e3126\u003c/code\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\u003e\u003ca href=\"https://github.com/pallets/click/commit/41f410fb7528305d7e87c8cfa704f6c2456f57fc\"\u003e\u003ccode\u003e41f410f\u003c/code\u003e\u003c/a\u003e Release 8.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/e3e69e3bf8d749ac1a632f2ece4d38ec7f6588f5\"\u003e\u003ccode\u003ee3e69e3\u003c/code\u003e\u003c/a\u003e Add type annotations for instance attributes in \u003ccode\u003eutils\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3422\"\u003e#3422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/3bb230dcd5d751f8605b46e9df5a541639d5fd4e\"\u003e\u003ccode\u003e3bb230d\u003c/code\u003e\u003c/a\u003e WIP: Fix \u003ccode\u003eHelpFormatter.write_usage\u003c/code\u003e producing spurious characters (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/63274a79d08fdc5c19220696144489f7144a8547\"\u003e\u003ccode\u003e63274a7\u003c/code\u003e\u003c/a\u003e \u003ccode\u003eclick.get_pager_file\u003c/code\u003e: add tests (\u003ca href=\"https://redirect.github.com/pallets/click/issues/1572\"\u003e#1572\u003c/a\u003e followup) (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3405\"\u003e#3405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/0551bf53588ae87f462d336f24f853a156fefe3a\"\u003e\u003ccode\u003e0551bf5\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eHelpFormatter.write_usage\u003c/code\u003e producing spurious characters\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/fc41aa1d0b62494eb93e92ff3929601221e3abf4\"\u003e\u003ccode\u003efc41aa1\u003c/code\u003e\u003c/a\u003e Apply class-body annotations to \u003ccode\u003eKeepOpenFile\u003c/code\u003e for consistency\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b761eda3bad977ec2f485451d85fd8ec365f0bf4\"\u003e\u003ccode\u003eb761eda\u003c/code\u003e\u003c/a\u003e Skip some tests on Windows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/98302ac4f49e443a48abd3fbb95c86202b89547d\"\u003e\u003ccode\u003e98302ac\u003c/code\u003e\u003c/a\u003e Check \u003ccode\u003ePAGER\u003c/code\u003e usage, color preservation and edge-cases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/dbdae170879d460e78963f8af35c5cb9c5b86e89\"\u003e\u003ccode\u003edbdae17\u003c/code\u003e\u003c/a\u003e Fix documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1aa2d53d63ff68bf14b35931177aac9270e39713\"\u003e\u003ccode\u003e1aa2d53\u003c/code\u003e\u003c/a\u003e Redesigned tests and get_pager_file branching to be more clear and not set color\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.1.8...8.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.10 to 3.15\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.md\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.15 (2026-05-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce DNS-length cap on individual labels early in \u003ccode\u003echeck_label\u003c/code\u003e,\nshort-circuiting contextual-rule processing for oversized input\nwhile staying compatible with UTS 46 usage.\u003c/li\u003e\n\u003cli\u003eTidy core helpers: hoist bidi category sets to module-level\nfrozensets (avoiding per-codepoint list construction), simplify\nlength checks, and reuse the shared \u003ccode\u003e_unicode_dots_re\u003c/code\u003e from\n\u003ccode\u003eidna.core\u003c/code\u003e in the codec module.\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eraise ... from err\u003c/code\u003e for proper exception chaining and\nswitch internal string formatting to f-strings.\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003eflit_core\u003c/code\u003e 4.x in the build backend.\u003c/li\u003e\n\u003cli\u003eExpand the ruff lint set (flake8-bugbear, flake8-simplify,\npyupgrade, perflint) and apply the surfaced fixes; pin lint CI\nto Python 3.14.\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration for GitHub Actions.\u003c/li\u003e\n\u003cli\u003eConvert README and HISTORY from reStructuredText to Markdown.\u003c/li\u003e\n\u003cli\u003eReference CVE-2026-45409 for the 3.14 advisory in place of the\ninitial GHSA identifier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Felix Yan, Stan Ulbrych, and metsw24-max for\ncontributions to this release.\u003c/p\u003e\n\u003ch2\u003e3.14 (2026-05-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved opportunity to process long inputs into quadratic\ntime by rejecting oversize inputs up-front. Closes a bypass\nof the CVE-2024-3651 mitigation. [CVE-2026-45409]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003ch2\u003e3.13 (2026-04-22)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12 (2026-04-21)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003ch2\u003e3.11 (2025-10-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 16.0.0, including significant changes to UTS46\nprocessing. As a result of Unicode ending support for it, transitional\nprocessing no longer has an effect and returns the same result.\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/kjd/idna/commit/af30a092e158181d0b35ac66dfa813788126bdd8\"\u003e\u003ccode\u003eaf30a09\u003c/code\u003e\u003c/a\u003e Release 3.15\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/30314d4628744ca14cf2b5820564e5127a9f86f2\"\u003e\u003ccode\u003e30314d4\u003c/code\u003e\u003c/a\u003e Pre-release 3.15rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/05d4b219aa9eddc47371fcbd2000f0301016f3e9\"\u003e\u003ccode\u003e05d4b21\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/237\"\u003e#237\u003c/a\u003e from kjd/convert-docs-to-markdown\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/2987fdba1962bbb2358399e0084ba062b98a0bee\"\u003e\u003ccode\u003e2987fdb\u003c/code\u003e\u003c/a\u003e Convert README and HISTORY from reStructuredText to Markdown\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/59fa8002d514bf4a5ce7b58f67b9ec587d53fa9c\"\u003e\u003ccode\u003e59fa800\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/236\"\u003e#236\u003c/a\u003e from kjd/dependabot/github_actions/actions-f3e34333ea\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/def69834ced5d4b3c50439d8b99c4c856ec19ca2\"\u003e\u003ccode\u003edef6983\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into dependabot/github_actions/actions-f3e34333ea\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/bbd8004a797185d8c56bb555cd5c88fde05e0631\"\u003e\u003ccode\u003ebbd8004\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/234\"\u003e#234\u003c/a\u003e from StanFromIreland/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/edd07c05024344a6ccb517414ccb36683aee99fc\"\u003e\u003ccode\u003eedd07c0\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.35.2 to 4.35.2 in the actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5557db030c11bdec50d62aa5f631d705d33ba123\"\u003e\u003ccode\u003e5557db0\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f11746cf4981d25123ef7830d3ee60f07de8ae3d\"\u003e\u003ccode\u003ef11746c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/235\"\u003e#235\u003c/a\u003e from StanFromIreland/patch-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.10...v3.15\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.8.1 to 2.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/850\"\u003epydantic/pydantic-settings#850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 5 updates 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/pydantic/pydantic-settings/pull/854\"\u003epydantic/pydantic-settings#854\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 3 updates 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/pydantic/pydantic-settings/pull/853\"\u003epydantic/pydantic-settings#853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates 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/pydantic/pydantic-settings/pull/856\"\u003epydantic/pydantic-settings#856\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/858\"\u003epydantic/pydantic-settings#858\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.1 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/859\"\u003epydantic/pydantic-settings#859\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-settings/compare/v2.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 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/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 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/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 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/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 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/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python 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/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group 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/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates 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/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt 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-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group 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/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor 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-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\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-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\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/pydantic/pydantic-settings/commit/e95c30bec8cfaee88ee275138c064aea97a25bdf\"\u003e\u003ccode\u003ee95c30b\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/859\"\u003e#859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/0c8734581b6cf70a995afad603ac456631d00621\"\u003e\u003ccode\u003e0c87345\u003c/code\u003e\u003c/a\u003e Fix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/858\"\u003e#858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/7bd0072795a800065b42210b6dca90fc9b83daf7\"\u003e\u003ccode\u003e7bd0072\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 2 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/856\"\u003e#856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/b03e573d017ed48e1c2774a5e0b715db9766c76b\"\u003e\u003ccode\u003eb03e573\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/853\"\u003e#853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/eaa3b434938411ec8a3717ea646614561e713f51\"\u003e\u003ccode\u003eeaa3b43\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 5 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/854\"\u003e#854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9f95615c24c6813c1d7d203576581a79cb6d9e8e\"\u003e\u003ccode\u003e9f95615\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/850\"\u003e#850\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.8.1...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.14.1 to 4.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003cp\u003eNew features since 4.14.1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.15.0 (August 25, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003ch1\u003eRelease 4.15.0rc1 (August 18, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/typing_extensions/commit/9d1637e264b5c1a6b7acee3e907015f89b20c2c9\"\u003e\u003ccode\u003e9d1637e\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4bd67c5be5d9443c7d33c314d02a56ee125eb88d\"\u003e\u003ccode\u003e4bd67c5\u003c/code\u003e\u003c/a\u003e Coverage: exclude some noise (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e589a26da73b075c5276bae40b86db1af0144f84\"\u003e\u003ccode\u003ee589a26\u003c/code\u003e\u003c/a\u003e Coverage: add detailed report to job summary (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/67d37fed1298e050f74d5acc95b2621bd37837ad\"\u003e\u003ccode\u003e67d37fe\u003c/code\u003e\u003c/a\u003e Coverage: Implement fail_under (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e9ae26f5286edee9262727755ecb9ad16e999192\"\u003e\u003ccode\u003ee9ae26f\u003c/code\u003e\u003c/a\u003e Don't delete previous coverage comment (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/ac80bb728a3006fc88ef7373b92f0c25cfcc7895\"\u003e\u003ccode\u003eac80bb7\u003c/code\u003e\u003c/a\u003e Add Coverage workflow (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/623\"\u003e#623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/abaaafd98c1cc7e5baf098ec287a3d22cb339670\"\u003e\u003ccode\u003eabaaafd\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/98104053ea8d49bcdd247804e5fa9f73136acbd4\"\u003e\u003ccode\u003e9810405\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e@disjoint_base\u003c/code\u003e (PEP 800) (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/634\"\u003e#634\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/7ee9e05fd484d06899ce56e80f5e1aa4c760fc03\"\u003e\u003ccode\u003e7ee9e05\u003c/code\u003e\u003c/a\u003e Backport type_params fix from CPython (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/1e8eb9c06ef51b3a1e1f05303a16feca13f5ed98\"\u003e\u003ccode\u003e1e8eb9c\u003c/code\u003e\u003c/a\u003e Do not refer to PEP 705 as being experimental (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.14.1...4.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.45.0 to 0.47.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.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\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer 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/2917\"\u003eKludex/uvicorn#2917\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.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.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/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.47.0 (May 14, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2920\"\u003e#2920\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2927\"\u003e#2927\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\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/479a2c0c89186714f1aac52aecdebebf271395ac\"\u003e\u003ccode\u003e479a2c0\u003c/code\u003e\u003c/a\u003e Version 0.47.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2937\"\u003e#2937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/89347fd166ebedf98fb3f806ce8ea44e93b1c2b5\"\u003e\u003ccode\u003e89347fd\u003c/code\u003e\u003c/a\u003e Add 7-day cooldown for dependency resolution via uv exclude-newer (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2936\"\u003e#2936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/767315b38ae509cee9fe8ee9d09f6da920536096\"\u003e\u003ccode\u003e767315b\u003c/code\u003e\u003c/a\u003e Drop unused contents/actions permissions from zizmor workflow (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2935\"\u003e#2935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f25ee43e68a9678453cbca99ad96f1a447ff34af\"\u003e\u003ccode\u003ef25ee43\u003c/code\u003e\u003c/a\u003e chore(deps): bump urllib3 from 2.6.3 to 2.7.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8782666189a3d36c978de5698620db705659bf44\"\u003e\u003ccode\u003e8782666\u003c/code\u003e\u003c/a\u003e Fix typo in \u003ccode\u003edocs/deployment/index.md\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2932\"\u003e#2932\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/ad5ff87c869e8a34e9b04fcd5ca38d65c526893c\"\u003e\u003ccode\u003ead5ff87\u003c/code\u003e\u003c/a\u003e Treat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2927\"\u003e#2927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/6761b2c8f9272fa0e908d0b9cdcb3cb0aa11382f\"\u003e\u003ccode\u003e6761b2c\u003c/code\u003e\u003c/a\u003e Remove Hugging Face sponsor block from docs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2923\"\u003e#2923\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/438f64834de00708a9bb3548a36090e7a924ad84\"\u003e\u003ccode\u003e438f648\u003c/code\u003e\u003c/a\u003e Surface sponsors on welcome page and sidebar (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2921\"\u003e#2921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/10ddc6dd296cb6e432a00835abe27f1c822373c1\"\u003e\u003ccode\u003e10ddc6d\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2920\"\u003e#2920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b499bc45101d920e691e384025d728507215d4d1\"\u003e\u003ccode\u003eb499bc4\u003c/code\u003e\u003c/a\u003e Eagerly import the ASGI app in the parent process (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.45.0...0.47.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.10 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.10...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.27 to 0.0.28\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.28\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\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/python-multipart/pull/281\"\u003eKludex/python-multipart#281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes 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/python-multipart/pull/282\"\u003eKludex/python-multipart#282\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/python-multipart/compare/0.0.27...0.0.28\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28\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/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.28 (2026-05-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/281\"\u003e#281\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/282\"\u003e#282\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/python-multipart/commit/7d8d28b210ac6cb055399562b0dc0e5cf9aef14a\"\u003e\u003ccode\u003e7d8d28b\u003c/code\u003e\u003c/a\u003e Version 0.0.28 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/284\"\u003e#284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b0dd125457d0f98de23bf2f894aedb1a54639d4e\"\u003e\u003ccode\u003eb0dd125\u003c/code\u003e\u003c/a\u003e Cap multipart boundary length at 256 bytes (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/282\"\u003e#282\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/d1b57392cf7d0c19235ba454eb5686fd27dc2384\"\u003e\u003ccode\u003ed1b5739\u003c/code\u003e\u003c/a\u003e Speed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/281\"\u003e#281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/09cb8c3da7638d45ecdf7c154832303214bba829\"\u003e\u003ccode\u003e09cb8c3\u003c/code\u003e\u003c/a\u003e Make the long_boundary benchmark dominated by the patched code path (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/280\"\u003e#280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/a6467c93c14aa4b09ef65450ead8011c45e5c7a0\"\u003e\u003ccode\u003ea6467c9\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Switch CodSpeed benchmarks to walltime mode\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/279\"\u003e#279\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/9a9690035a956fbdcca06f98461244cf790375a7\"\u003e\u003ccode\u003e9a96900\u003c/code\u003e\u003c/a\u003e Switch CodSpeed benchmarks to walltime mode (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/278\"\u003e#278\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/1fc7a626f566ae11bc63165260262b9a30af9008\"\u003e\u003ccode\u003e1fc7a62\u003c/code\u003e\u003c/a\u003e Make benchmark coverage trigger the partial-boundary fallback (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/277\"\u003e#277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/03df045810a216dceabbefc9dca7a33a264307bc\"\u003e\u003ccode\u003e03df045\u003c/code\u003e\u003c/a\u003e Add CodSpeed benchmark suite for parser hot paths (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/276\"\u003e#276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/79a7c614953d0c91a1d6dc69759b4fbcd0fb44f3\"\u003e\u003ccode\u003e79a7c61\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/273\"\u003e#273\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/bd29332f23429d06cf16226819f89b28a8288915\"\u003e\u003ccode\u003ebd29332\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 5 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/274\"\u003e#274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `webauthn` from 2.5.2 to 2.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/duo-labs/py_webauthn/releases\"\u003ewebauthn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis project now uses the \u003ca href=\"https://github.com/pyasn1/pyasn1/\"\u003epyasn1\u003c/a\u003e library to parse ASN.1-encoded values (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/263\"\u003e#263\u003c/a\u003e, h/t \u003ca href=\"https://github.com/ggirol-rc\"\u003e\u003ccode\u003e@​ggirol-rc\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSome bare \u003ccode\u003edict\u003c/code\u003e type annotations have been replaced with \u003ccode\u003eDict[str, Any]\u003c/code\u003e to satisfy stricter type checking setups (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/262\"\u003e#262\u003c/a\u003e, h/t \u003ca href=\"https://github.com/typestring\"\u003e\u003ccode\u003e@​typestring\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper has a new, optional \u003ccode\u003ebytes_encoder\u003c/code\u003e argument that accepts a \u003ccode\u003eCallable[[bytes], Any]\u003c/code\u003e method. This enables the use of custom encoding logic when serializing \u003ccode\u003ebytes\u003c/code\u003e values. When this argument is unspecified, \u003ccode\u003ebytes\u003c/code\u003e values will continue to be encoded into Base64URL (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.6.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe new \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper can be used to simplify registration and authentication options into a simple \u003ccode\u003eDict[str, Any]\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.5.3\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMore X.509 validation exceptions will include the cause of the exception as reported by the third-party library handling the validation (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/255\"\u003e#255\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/duo-labs/py_webauthn/blob/master/CHANGELOG.md\"\u003ewebauthn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis project now uses the \u003ca href=\"https://github.com/pyasn1/pyasn1/\"\u003epyasn1\u003c/a\u003e library to parse ASN.1-encoded values (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/263\"\u003e#263\u003c/a\u003e, h/t \u003ca href=\"https://github.com/ggirol-rc\"\u003e\u003ccode\u003e@​ggirol-rc\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSome bare \u003ccode\u003edict\u003c/code\u003e type annotations have been replaced with \u003ccode\u003eDict[str, Any]\u003c/code\u003e to satisfy stricter type checking setups (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/262\"\u003e#262\u003c/a\u003e, h/t \u003ca href=\"https://github.com/typestring\"\u003e\u003ccode\u003e@​typestring\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper has a new, optional \u003ccode\u003ebytes_encoder\u003c/code\u003e argument that accepts a \u003ccode\u003eCallable[[bytes], Any]\u003c/code\u003e method. This enables the use of custom encoding logic when serializing \u003ccode\u003ebytes\u003c/code\u003e values. When this argument is unspecified, \u003ccode\u003ebytes\u003c/code\u003e values will continue to be encoded into Base64URL (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.6.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe new \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper can be used to simplify registration and authentication options into a simple \u003ccode\u003eDict[str, Any]\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.5.3\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMore X.509 validation exceptions will include the cause of the exception as reported by the third-party library handling the validation (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/255\"\u003e#255\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/duo-labs/py_webauthn/commit/91af...\n\n_Description has been truncated_","html_url":"https://github.com/WebbPulse/CarModPicker/pull/136","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/WebbPulse%2FCarModPicker/issues/136","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/136/packages"},{"uuid":"4438189791","node_id":"PR_kwDOAG7wis7bIZb4","number":4829,"state":"open","title":"chore(deps): bump the python-minor-patch group across 1 directory with 16 updates","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-05-13T13:17:23.000Z","updated_at":"2026-05-13T13:30:58.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor-patch","update_count":16,"packages":[{"name":"pre-commit","old_version":"4.5.1","new_version":"4.6.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"mypy","old_version":"1.16.1","new_version":"1.20.2","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.12.1","new_version":"0.15.12","repository_url":"https://github.com/astral-sh/ruff"},{"name":"wheel","old_version":"0.46.3","new_version":"0.47.0","repository_url":"https://github.com/pypa/wheel"},{"name":"hatchling","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pypa/hatch"},{"name":"types-requests","old_version":"2.32.4.20250611","new_version":"2.33.0.20260503","repository_url":"https://github.com/python/typeshed"},{"name":"types-markdown","old_version":"3.8.0.20250415","new_version":"3.10.2.20260408","repository_url":"https://github.com/python/typeshed"},{"name":"sphinx-book-theme","old_version":"1.1.4","new_version":"1.2.0","repository_url":"https://github.com/executablebooks/sphinx-book-theme"},{"name":"sphinx-autoapi","old_version":"3.6.0","new_version":"3.8.0","repository_url":"https://github.com/readthedocs/sphinx-autoapi"},{"name":"sphinxcontrib-mermaid","old_version":"2.0.1","new_version":"2.0.2","repository_url":"https://github.com/mgaitan/sphinxcontrib-mermaid"},{"name":"markdown","old_version":"3.8.2","new_version":"3.10.2","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"orjson","old_version":"3.10.18","new_version":"3.11.8","repository_url":"https://github.com/ijl/orjson"},{"name":"typing-extensions","old_version":"4.14.0","new_version":"4.15.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"beautifulsoup4","old_version":"4.13.4","new_version":"4.14.3"},{"name":"flask-cors","old_version":"6.0.1","new_version":"6.0.2","repository_url":"https://github.com/corydolphin/flask-cors"},{"name":"jsonschema","old_version":"4.24.0","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.6.0` |\n| [mypy](https://github.com/python/mypy) | `1.16.1` | `1.20.2` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.12.1` | `0.15.12` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.47.0` |\n| [hatchling](https://github.com/pypa/hatch) | `1.27.0` | `1.29.0` |\n| [types-requests](https://github.com/python/typeshed) | `2.32.4.20250611` | `2.33.0.20260503` |\n| [types-markdown](https://github.com/python/typeshed) | `3.8.0.20250415` | `3.10.2.20260408` |\n| [sphinx-book-theme](https://github.com/executablebooks/sphinx-book-theme) | `1.1.4` | `1.2.0` |\n| [sphinx-autoapi](https://github.com/readthedocs/sphinx-autoapi) | `3.6.0` | `3.8.0` |\n| [sphinxcontrib-mermaid](https://github.com/mgaitan/sphinxcontrib-mermaid) | `2.0.1` | `2.0.2` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.8.2` | `3.10.2` |\n| [orjson](https://github.com/ijl/orjson) | `3.10.18` | `3.11.8` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.14.0` | `4.15.0` |\n| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.13.4` | `4.14.3` |\n| [flask-cors](https://github.com/corydolphin/flask-cors) | `6.0.1` | `6.0.2` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.24.0` | `4.26.0` |\n\n\nUpdates `pre-commit` from 4.5.1 to 4.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier usage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.0 - 2026-04-21\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier\nusage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/commit/f35134b05028ec938ac605ae500fdf95462655d3\"\u003e\u003ccode\u003ef35134b\u003c/code\u003e\u003c/a\u003e v4.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2a51ffcb81f6c8ed2e6467913c3343a8800f3ab9\"\u003e\u003ccode\u003e2a51ffc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e from pre-commit/hook-impl-optional-hook-dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/d7dee322abfc765b042f2e3b872aab3c3a867610\"\u003e\u003ccode\u003ed7dee32\u003c/code\u003e\u003c/a\u003e make --hook-dir optional for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/965aeb1c680e8b526342153547f0ec014484c63d\"\u003e\u003ccode\u003e965aeb1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e from pre-commit/hook-impl-required\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2eacc064aa9b5bb33d3a0d84a234b475e34f3096\"\u003e\u003ccode\u003e2eacc06\u003c/code\u003e\u003c/a\u003e --hook-type is required for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f5678bf4ac35cffc0ff7174ad85f7fdc2a5c977e\"\u003e\u003ccode\u003ef5678bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3657\"\u003e#3657\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/054cc5bd6bb1b20faa1eefe09f0de3b68fceee94\"\u003e\u003ccode\u003e054cc5b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/5c0f3024d2524f6e029a4c333392fd9be9fb27f6\"\u003e\u003ccode\u003e5c0f302\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3652\"\u003e#3652\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/a5d91142676630f8130020b35e166e0c0e92b8f4\"\u003e\u003ccode\u003ea5d9114\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/129a1f5ca1eaee0c952a5e7a07faae305c5e15bc\"\u003e\u003ccode\u003e129a1f5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3641\"\u003e#3641\u003c/a\u003e from pre-commit/mxr-patch-1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.5.1...v4.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 1.16.1 to 1.20.2\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\u003ch3\u003eMypy 1.20.2\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse WAL with SQLite cache and fix close (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21154\"\u003e21154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust SQLite journal mode (Ivan Levkivskyi, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21217\"\u003e21217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCorrectly aggregate narrowing information on parent expressions (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21206\"\u003e21206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix regression related to generic callables (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21208\"\u003e21208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix regression by avoiding widening types in some contexts (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21242\"\u003e21242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix slicing in non-strict optional mode (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21282\"\u003e21282\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emypyc: Fix match statement semantics for \u0026quot;or\u0026quot; pattern (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21156\"\u003e21156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emypyc: Fix issue with module dunder attributes (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21275\"\u003e21275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInitial support for Python 3.15.0a8 (Marc Mueller, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21255\"\u003e21255\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAcknowledgements\u003c/h3\u003e\n\u003cp\u003eThanks to all mypy contributors who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eA5rocks\u003c/li\u003e\n\u003cli\u003eAaron Wieczorek\u003c/li\u003e\n\u003cli\u003eAdam Turner\u003c/li\u003e\n\u003cli\u003eAli Hamdan\u003c/li\u003e\n\u003cli\u003easce\u003c/li\u003e\n\u003cli\u003eBobTheBuidler\u003c/li\u003e\n\u003cli\u003eBrent Westbrook\u003c/li\u003e\n\u003cli\u003eBrian Schubert\u003c/li\u003e\n\u003cli\u003ebzoracler\u003c/li\u003e\n\u003cli\u003eChris Burroughs\u003c/li\u003e\n\u003cli\u003eChristoph Tyralla\u003c/li\u003e\n\u003cli\u003eColin Watson\u003c/li\u003e\n\u003cli\u003eDonghoon Nam\u003c/li\u003e\n\u003cli\u003eE. M. Bray\u003c/li\u003e\n\u003cli\u003eEmma Smith\u003c/li\u003e\n\u003cli\u003eEthan Sarp\u003c/li\u003e\n\u003cli\u003eGeorge Ogden\u003c/li\u003e\n\u003cli\u003egetzze\u003c/li\u003e\n\u003cli\u003egrayjk\u003c/li\u003e\n\u003cli\u003eGregor Riepl\u003c/li\u003e\n\u003cli\u003eIvan Levkivskyi\u003c/li\u003e\n\u003cli\u003eJames Hilliard\u003c/li\u003e\n\u003cli\u003eJames Le Cuirot\u003c/li\u003e\n\u003cli\u003eJeremy Nimmer\u003c/li\u003e\n\u003cli\u003eJoren Hammudoglu\u003c/li\u003e\n\u003cli\u003eKai (Kazuya Ito)\u003c/li\u003e\n\u003cli\u003ekaushal trivedi\u003c/li\u003e\n\u003cli\u003eKevin Kannammalil\u003c/li\u003e\n\u003cli\u003eLukas Geiger\u003c/li\u003e\n\u003cli\u003eŁukasz Langa\u003c/li\u003e\n\u003cli\u003eMarc Mueller\u003c/li\u003e\n\u003cli\u003eMichael R. Crusoe\u003c/li\u003e\n\u003cli\u003emichaelm-openai\u003c/li\u003e\n\u003cli\u003eNeil Schemenauer\u003c/li\u003e\n\u003cli\u003ePiotr Sawicki\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/145a062651b5f9996b75ef32b7040bd2e885ed82\"\u003e\u003ccode\u003e145a062\u003c/code\u003e\u003c/a\u003e Bump version to 1.20.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/81cd49215c288eacb987de066f02daff2553b7c7\"\u003e\u003ccode\u003e81cd492\u003c/code\u003e\u003c/a\u003e Fix slicing with nonstrict optional (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21282\"\u003e#21282\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/908d3441eecbaa2a6193165317177db834d7ca1a\"\u003e\u003ccode\u003e908d344\u003c/code\u003e\u003c/a\u003e [mypyc] Set dunder attrs when adding module to sys.modules (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21275\"\u003e#21275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/ba28610fac9d2b33be210ca8dcfe4bc47b7af424\"\u003e\u003ccode\u003eba28610\u003c/code\u003e\u003c/a\u003e Initial support for Python 3.15.0a8 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21255\"\u003e#21255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/7b0e09f48dbd3717ed008a273cd17e8e960c2037\"\u003e\u003ccode\u003e7b0e09f\u003c/code\u003e\u003c/a\u003e Fix match statement semantics for \u0026quot;or\u0026quot; pattern (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21156\"\u003e#21156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/92b74f226de62f7505f5ef5cb158e8ec9c58b8b7\"\u003e\u003ccode\u003e92b74f2\u003c/code\u003e\u003c/a\u003e Avoid widening types in conditional_types (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21242\"\u003e#21242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0dcbfaa40b0e360a16baea9cf851955375d91b54\"\u003e\u003ccode\u003e0dcbfaa\u003c/code\u003e\u003c/a\u003e Fix is_overlapping_types for generic callables (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21208\"\u003e#21208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/210f518dede35292033ef0d387847406a0ccef8f\"\u003e\u003ccode\u003e210f518\u003c/code\u003e\u003c/a\u003e Correctly aggregate narrowing information on parent expressions (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21206\"\u003e#21206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/c34530e53a10e385d8b0f1af4baa88a596b5ceaa\"\u003e\u003ccode\u003ec34530e\u003c/code\u003e\u003c/a\u003e Only set journal mode in coordinator (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21217\"\u003e#21217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/79a3ec6d01b56a27c00e9b3320c2b1d4d73a77f9\"\u003e\u003ccode\u003e79a3ec6\u003c/code\u003e\u003c/a\u003e Use WAL with SQLite cache, fix close (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21154\"\u003e#21154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v1.16.1...v1.20.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.12.1 to 0.15.12\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.12\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\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/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.12\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\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.12\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\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/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.11\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Ignore \u003ccode\u003eRUF029\u003c/code\u003e when function is decorated with \u003ccode\u003easynccontextmanager\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24642\"\u003e#24642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003eairflow-xcom-pull-in-template-string\u003c/code\u003e (\u003ccode\u003eAIR201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23583\"\u003e#23583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix \u003ccode\u003eS103\u003c/code\u003e false positives and negatives in mask analysis (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24424\"\u003e#24424\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/66f93cf7ed4d36325f35a452e4afa28268fbcd28\"\u003e\u003ccode\u003e66f93cf\u003c/code\u003e\u003c/a\u003e Bump 0.15.12 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24815\"\u003e#24815\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/476a4d02e8e3b6c157ac39979d8b698a1b6baa91\"\u003e\u003ccode\u003e476a4d0\u003c/code\u003e\u003c/a\u003e [ty] Complete support for more detailed diagnostics on possibly unbound error...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ed669eab30095d6c51fe6cdef6050fb01276bcb3\"\u003e\u003ccode\u003eed669ea\u003c/code\u003e\u003c/a\u003e Implement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e73d952e43feb51356ee740c5a973fce81396ff6\"\u003e\u003ccode\u003ee73d952\u003c/code\u003e\u003c/a\u003e [ty] Include inferred type in \u003ccode\u003einvalid-key\u003c/code\u003e concise diagnostic for union/inte...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/80feb29b31cd98c093316df2e0407b0c70c01b55\"\u003e\u003ccode\u003e80feb29\u003c/code\u003e\u003c/a\u003e [ty] report only dead annotation-only locals as unused (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24811\"\u003e#24811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0fbf2bc27336a3d17d39af52cf89b78dcda8c7c8\"\u003e\u003ccode\u003e0fbf2bc\u003c/code\u003e\u003c/a\u003e Drop deprecated license classifier (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24808\"\u003e#24808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/43b174cc7f2fcb0080bb1d4843cd4bf6b72bbe27\"\u003e\u003ccode\u003e43b174c\u003c/code\u003e\u003c/a\u003e [ty] Infer lambda parameter types with \u003ccode\u003eCallable\u003c/code\u003e type context (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24317\"\u003e#24317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4f449ae4a2377569330a5ab94799d389357b5a3f\"\u003e\u003ccode\u003e4f449ae\u003c/code\u003e\u003c/a\u003e [ty] Add error context for intersection types (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24772\"\u003e#24772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/5b4e753acb46e96ad408e4904c15308e33efe307\"\u003e\u003ccode\u003e5b4e753\u003c/code\u003e\u003c/a\u003e [ty] Add support for goto in literal enum member inlay hint (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24792\"\u003e#24792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e7cc76275a758ce1c636ea1c2d091fd576aac794\"\u003e\u003ccode\u003ee7cc762\u003c/code\u003e\u003c/a\u003e [ty] Add error context for TypedDict assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24790\"\u003e#24790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.12.1...0.15.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `wheel` from 0.46.3 to 0.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/wheel/releases\"\u003ewheel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.47.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without unpacking them (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/639\"\u003e#639\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains uppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory inside uses normalized lowercase naming (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/411\"\u003e#411\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/pypa/wheel/blob/main/docs/news.rst\"\u003ewheel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease Notes\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003e0.47.0 (2026-04-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without\nunpacking them (\u003ccode\u003e[#639](https://github.com/pypa/wheel/issues/639) \u0026lt;https://github.com/pypa/wheel/issues/639\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains\nuppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory\ninside uses normalized lowercase naming\n(\u003ccode\u003e[#411](https://github.com/pypa/wheel/issues/411) \u0026lt;https://github.com/pypa/wheel/issues/411\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.3 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eImportError: cannot import name '_setuptools_logging' from 'wheel'\u003c/code\u003e when\ninstalled alongside an old version of setuptools and running the \u003ccode\u003ebdist_wheel\u003c/code\u003e\ncommand (\u003ccode\u003e[#676](https://github.com/pypa/wheel/issues/676) \u0026lt;https://github.com/pypa/wheel/issues/676\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.2 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRestored the \u003ccode\u003ebdist_wheel\u003c/code\u003e command for compatibility with \u003ccode\u003esetuptools\u003c/code\u003e older than\nv70.1\u003c/li\u003e\n\u003cli\u003eImporting \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e now emits a \u003ccode\u003eFutureWarning\u003c/code\u003e instead of a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003ewheel unpack\u003c/code\u003e potentially altering the permissions of files outside of the\ndestination tree with maliciously crafted wheels (CVE-2026-24049)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.1 (2025-04-08)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTemporarily restored the \u003ccode\u003ewheel.macosx_libfile\u003c/code\u003e module\n(\u003ccode\u003e[#659](https://github.com/pypa/wheel/issues/659) \u0026lt;https://github.com/pypa/wheel/issues/659\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.0 (2025-04-03)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.8\u003c/li\u003e\n\u003cli\u003eRemoved the \u003ccode\u003ebdist_wheel\u003c/code\u003e setuptools command implementation and entry point.\nThe \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e module is now just an alias to\n\u003ccode\u003esetuptools.command.bdist_wheel\u003c/code\u003e, emitting a deprecation warning on import.\u003c/li\u003e\n\u003cli\u003eRemoved vendored \u003ccode\u003epackaging\u003c/code\u003e in favor of a run-time dependency on it\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.metadata\u003c/code\u003e module private (with a deprecation warning if it's\nimported\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.cli\u003c/code\u003e package private (no deprecation warning)\u003c/li\u003e\n\u003cli\u003eFixed an exception when calling the \u003ccode\u003econvert\u003c/code\u003e command with an empty description\nfield\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.45.1 (2024-11-23)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed pure Python wheels converted from eggs and wininst files having the ABI tag in\nthe file name\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/wheel/commit/efd83a750f07a33462ea2eed365fd8dac9e51442\"\u003e\u003ccode\u003eefd83a7\u003c/code\u003e\u003c/a\u003e Created a new release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/bb69216d35588c2a0febc2d9a130727fe6e46ee3\"\u003e\u003ccode\u003ebb69216\u003c/code\u003e\u003c/a\u003e Reordered the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/d5a1763ce927618bfa7d82abe334d0d14a93cc37\"\u003e\u003ccode\u003ed5a1763\u003c/code\u003e\u003c/a\u003e fix(wheelfile): resolve .dist-info path case-insensitively when reading wheel...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/5718957928ece25eb0d1c12023c71dea4fcb5cf9\"\u003e\u003ccode\u003e5718957\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/625806845ae5756be3cc0f9d44832c29079c0954\"\u003e\u003ccode\u003e6258068\u003c/code\u003e\u003c/a\u003e chore: log_level is better than log_cli_level (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/2975debc789682b3a448b134611acc6962a93eb3\"\u003e\u003ccode\u003e2975deb\u003c/code\u003e\u003c/a\u003e Require tox \u0026gt;= 4.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/47674ba770e5ee72d679b7eb32b558e0c177640d\"\u003e\u003ccode\u003e47674ba\u003c/code\u003e\u003c/a\u003e chore: add check-sdist to checks (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/681\"\u003e#681\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/56223f6f8dfa8d3d40923f24dcf159204698d7b6\"\u003e\u003ccode\u003e56223f6\u003c/code\u003e\u003c/a\u003e \u003ccode\u003e__package__\u003c/code\u003e → \u003ccode\u003e__spec__.parent\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/679\"\u003e#679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/0ce509e02dc3cd1b7b0bdf868482de062b3c21c3\"\u003e\u003ccode\u003e0ce509e\u003c/code\u003e\u003c/a\u003e Added the wheel info subcommand (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/669\"\u003e#669\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/39039c0f3446c1ed5ec52621e98bc2bad8178a06\"\u003e\u003ccode\u003e39039c0\u003c/code\u003e\u003c/a\u003e Improved the index page\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/wheel/compare/0.46.3...0.47.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hatchling` from 1.27.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/hatch/releases\"\u003ehatchling's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHatchling v1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e\u003cstrong\u003eFixed:\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSource Date Epoch no longer fails when set to date before 1980.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eHatchling v1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e\u003cstrong\u003eChanged:\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.9\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003e\u003cstrong\u003eAdded:\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003esbom-files\u003c/code\u003e option and \u003ccode\u003esbom_files\u003c/code\u003e build data to the \u003ccode\u003ewheel\u003c/code\u003e build target for including Software Bill of Materials files.\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/pypa/hatch/commit/1a74daa6f554e2ec89f2641288e44ed39e5507cc\"\u003e\u003ccode\u003e1a74daa\u003c/code\u003e\u003c/a\u003e Noqa release command to unblock GHA for PRs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/78065f4c54ff16b72e92158f3547d61e420a93f7\"\u003e\u003ccode\u003e78065f4\u003c/code\u003e\u003c/a\u003e For Immutable Releases  (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2188\"\u003e#2188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/592c0a9c8cbd3e1b5d90cab57af5c17d7484037d\"\u003e\u003ccode\u003e592c0a9\u003c/code\u003e\u003c/a\u003e release Hatchling v1.29.0 (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2186\"\u003e#2186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/874059b82d06320d2e15ef909fbdc186a88bcdcc\"\u003e\u003ccode\u003e874059b\u003c/code\u003e\u003c/a\u003e Prerelease doc updates. (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2183\"\u003e#2183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/0e31bb64ec76afe9736500cafb6984ddc9c4de6d\"\u003e\u003ccode\u003e0e31bb6\u003c/code\u003e\u003c/a\u003e Immutable releases ci (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2182\"\u003e#2182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/f400be159bbd7c016ba5dc591a43753b193eadab\"\u003e\u003ccode\u003ef400be1\u003c/code\u003e\u003c/a\u003e Support a SOURCE_DATE_EPOCH prior to 1980 (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/1999\"\u003e#1999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/47b55ce0a9907302583db845c14bf5457432c80f\"\u003e\u003ccode\u003e47b55ce\u003c/code\u003e\u003c/a\u003e Fixing failing tests for changes in Rich markdown rendering (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2172\"\u003e#2172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/cc4acd668663b60e28f396c540c7acabe09f90be\"\u003e\u003ccode\u003ecc4acd6\u003c/code\u003e\u003c/a\u003e Add a note guiding users to include SBOM files in the source distribution (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2\"\u003e#2\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/9068758886e57751ff71a59520dcf576c7deea0b\"\u003e\u003ccode\u003e9068758\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2164\"\u003e#2164\u003c/a\u003e keep_env type error for hatch shell (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2165\"\u003e#2165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/bc31cfccc15283a49f62024d3607c7bfad01abe0\"\u003e\u003ccode\u003ebc31cfc\u003c/code\u003e\u003c/a\u003e Fix warning and tests with packaging 26.0 (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2159\"\u003e#2159\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/hatch/compare/hatchling-v1.27.0...hatchling-v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `types-requests` from 2.32.4.20250611 to 2.33.0.20260503\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python/typeshed/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `types-markdown` from 3.8.0.20250415 to 3.10.2.20260408\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python/typeshed/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-book-theme` from 1.1.4 to 1.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/releases\"\u003esphinx-book-theme's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.0 -- 2026-03-09\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eJupyterlite button - patched, merged version of \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/issues/655\"\u003e#655\u003c/a\u003e by \u003ca href=\"https://github.com/matthew-brett\"\u003e\u003ccode\u003e@​matthew-brett\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/914\"\u003eexecutablebooks/sphinx-book-theme#914\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[ENH] Show source text on GitLab projects by \u003ca href=\"https://github.com/tymcauley\"\u003e\u003ccode\u003e@​tymcauley\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/916\"\u003eexecutablebooks/sphinx-book-theme#916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in docs by \u003ca href=\"https://github.com/user27182\"\u003e\u003ccode\u003e@​user27182\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/913\"\u003eexecutablebooks/sphinx-book-theme#913\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eprepare for latest pydata and python releases by \u003ca href=\"https://github.com/choldgraf\"\u003e\u003ccode\u003e@​choldgraf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/920\"\u003eexecutablebooks/sphinx-book-theme#920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore PendingDeprecationWarning about parser_name deprecation with Docutils 0.22 by \u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/919\"\u003eexecutablebooks/sphinx-book-theme#919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCI: adding cronjob by \u003ca href=\"https://github.com/bsipocz\"\u003e\u003ccode\u003e@​bsipocz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/926\"\u003eexecutablebooks/sphinx-book-theme#926\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDOC: Fix margin directive documentation by \u003ca href=\"https://github.com/melissawm\"\u003e\u003ccode\u003e@​melissawm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/930\"\u003eexecutablebooks/sphinx-book-theme#930\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMAINT: adding sphinx9 and python3.14 support and bumping minimum sphinx to 7 and python to 3.11 by \u003ca href=\"https://github.com/bsipocz\"\u003e\u003ccode\u003e@​bsipocz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/927\"\u003eexecutablebooks/sphinx-book-theme#927\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e:\n\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/compare/v1.1.4...v1.2\"\u003ehttps://github.com/executablebooks/sphinx-book-theme/compare/v1.1.4...v1.2\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/executablebooks/sphinx-book-theme/blob/main/CHANGELOG.md\"\u003esphinx-book-theme's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.0 -- 2026-03-09\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eJupyterlite button - patched, merged version of \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/issues/655\"\u003e#655\u003c/a\u003e by \u003ca href=\"https://github.com/matthew-brett\"\u003e\u003ccode\u003e@​matthew-brett\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/914\"\u003eexecutablebooks/sphinx-book-theme#914\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[ENH] Show source text on GitLab projects by \u003ca href=\"https://github.com/tymcauley\"\u003e\u003ccode\u003e@​tymcauley\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/916\"\u003eexecutablebooks/sphinx-book-theme#916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in docs by \u003ca href=\"https://github.com/user27182\"\u003e\u003ccode\u003e@​user27182\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/913\"\u003eexecutablebooks/sphinx-book-theme#913\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eprepare for latest pydata and python releases by \u003ca href=\"https://github.com/choldgraf\"\u003e\u003ccode\u003e@​choldgraf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/920\"\u003eexecutablebooks/sphinx-book-theme#920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore PendingDeprecationWarning about parser_name deprecation with Docutils 0.22 by \u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/919\"\u003eexecutablebooks/sphinx-book-theme#919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCI: adding cronjob by \u003ca href=\"https://github.com/bsipocz\"\u003e\u003ccode\u003e@​bsipocz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/926\"\u003eexecutablebooks/sphinx-book-theme#926\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDOC: Fix margin directive documentation by \u003ca href=\"https://github.com/melissawm\"\u003e\u003ccode\u003e@​melissawm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/930\"\u003eexecutablebooks/sphinx-book-theme#930\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMAINT: adding sphinx9 and python3.14 support and bumping minimum sphinx to 7 and python to 3.11 by \u003ca href=\"https://github.com/bsipocz\"\u003e\u003ccode\u003e@​bsipocz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/927\"\u003eexecutablebooks/sphinx-book-theme#927\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e:\n\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/compare/v1.1.4...v1.2\"\u003ehttps://github.com/executablebooks/sphinx-book-theme/compare/v1.1.4...v1.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.1.2 -- 2024-02-13\u003c/h2\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/compare/v1.1.1...3da24da74f6042599fe6c9e2d612f5cbdef42280\"\u003efull changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eENH: bump version \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/818\"\u003e#818\u003c/a\u003e (\u003ca href=\"https://github.com/agoose77\"\u003e\u003ccode\u003e@​agoose77\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBugs fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: correct event-handler signature \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/817\"\u003e#817\u003c/a\u003e (\u003ca href=\"https://github.com/agoose77\"\u003e\u003ccode\u003e@​agoose77\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors to this release\u003c/h3\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/graphs/contributors?from=2024-02-13\u0026amp;to=2024-02-13\u0026amp;type=c\"\u003eGitHub contributors page for this release\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/search?q=repo%3Aexecutablebooks%2Fsphinx-book-theme+involves%3Aagoose77+updated%3A2024-02-13..2024-02-13\u0026amp;type=Issues\"\u003e\u003ccode\u003e@​agoose77\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.1.1 -- 2024-02-13\u003c/h2\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/compare/v1.1.0...9335ab99b0bc77b826cb2c5afcef3432f14e8780\"\u003efull changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eENH: bump version for 1.1.1 \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/815\"\u003e#815\u003c/a\u003e (\u003ca href=\"https://github.com/agoose77\"\u003e\u003ccode\u003e@​agoose77\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBugs fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: use \u003ccode\u003econfig-inited\u003c/code\u003e event to register config \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/814\"\u003e#814\u003c/a\u003e (\u003ca href=\"https://github.com/agoose77\"\u003e\u003ccode\u003e@​agoose77\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther merged PRs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuild(deps): Bump actions/setup-python from 4 to 5 \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/803\"\u003e#803\u003c/a\u003e (\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/801\"\u003e#801\u003c/a\u003e (\u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\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/executablebooks/sphinx-book-theme/commit/30f968ff990ef25ab5f38ff0dd26a10add814512\"\u003e\u003ccode\u003e30f968f\u003c/code\u003e\u003c/a\u003e Release v1.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/b78d24f6105cc91c41f18b3bf8f2e2a54c6c1f95\"\u003e\u003ccode\u003eb78d24f\u003c/code\u003e\u003c/a\u003e Finalizing changelog for v1.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/0415925b138a66229afb10c475663ea76d8dd480\"\u003e\u003ccode\u003e0415925\u003c/code\u003e\u003c/a\u003e MAINT: ignore bots in release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/5797d88ca3e42188c9eaf163c4680a6af67a1f13\"\u003e\u003ccode\u003e5797d88\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/issues/927\"\u003e#927\u003c/a\u003e from bsipocz/MAINT_sphinx_dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/f23d0946c74520fa3a9f358f33f612bc19668d79\"\u003e\u003ccode\u003ef23d094\u003c/code\u003e\u003c/a\u003e CI: Adding workaround for autodoc typehint parsing issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/8747e975f96c001a299b2a773fe2c8accac76ffe\"\u003e\u003ccode\u003e8747e97\u003c/code\u003e\u003c/a\u003e MAINT: dropping sphinx\u0026lt;7 and python\u0026lt;3.11 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/ffac4dee8755ff8cfd6ae1130a7e70e94ad0fa99\"\u003e\u003ccode\u003effac4de\u003c/code\u003e\u003c/a\u003e MAINT: using python 3.12 for RTD\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/cb587276c919c90787b87d56292c3e53ac607d8a\"\u003e\u003ccode\u003ecb58727\u003c/code\u003e\u003c/a\u003e MAINT: min pin for ablog due to sphinx9 incompatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/8cc45e4ef5e0d474869355e4240bd4d65b24dff0\"\u003e\u003ccode\u003e8cc45e4\u003c/code\u003e\u003c/a\u003e CI: ignore linkchecking URLs where anchors throw 403\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/d521920234ab145a573b2398777e4c022df36340\"\u003e\u003ccode\u003ed521920\u003c/code\u003e\u003c/a\u003e MAINT: adding sphinx9 and python 3.14 to testing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/compare/v1.1.4...v1.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-autoapi` from 3.6.0 to 3.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/releases\"\u003esphinx-autoapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.8.0\u003c/h2\u003e\n\u003ch1\u003eFeatures\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAutodoc-style directives can access members excluded by autoapi_options\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eMisc\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/553\"\u003e#553\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.7.0\u003c/h2\u003e\n\u003ch1\u003eFeatures\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded autoapi.import warning for when AutoAPI directives are given non-existent objects\u003c/li\u003e\n\u003cli\u003eAdding autoapi_follow_symlinks, which allows api to traverse into symlinked directories when generating the API documentation.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 and officially support Python 3.14\u003c/li\u003e\n\u003cli\u003eSupport rendering PEP-695 type parameters\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eBugfixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eRender typing_extensions.TypeAlias like other type aliases (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/520\"\u003e#520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix PythonFunction.overloads typing when source code overload(s) do not provide a return type (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/523\"\u003e#523\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eMisc\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings raised by astroid and sphinx\u003c/li\u003e\n\u003cli\u003eHandling case where match returns None to fix mypy unit test.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.6.1\u003c/h2\u003e\n\u003ch1\u003eBugfixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the supported versions of astroid. Fix the breaking change to Import and pass in the AstroidManager to the AstroidBuilder (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/536\"\u003e#536\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/readthedocs/sphinx-autoapi/blob/main/CHANGELOG.rst\"\u003esphinx-autoapi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.8.0 (2026-03-07)\u003c/h2\u003e\n\u003cp\u003eFeatures\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAutodoc-style directives can access members excluded by autoapi_options\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMisc\n^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/553\"\u003e#553\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.7.0 (2026-02-10)\u003c/h2\u003e\n\u003cp\u003eFeatures\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded autoapi.import warning for when AutoAPI directives are given non-existent objects\u003c/li\u003e\n\u003cli\u003eAdding \u003ccode\u003eautoapi_follow_symlinks\u003c/code\u003e, which allows api to traverse into symlinked directories when generating the API documentation.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 and officially support Python 3.14\u003c/li\u003e\n\u003cli\u003eSupport rendering PEP-695 type parameters\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRender typing_extensions.TypeAlias like other type aliases (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/520\"\u003e#520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ePythonFunction.overloads\u003c/code\u003e typing when source code overload(s) do not provide a return type (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/523\"\u003e#523\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMisc\n^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings raised by astroid and sphinx\u003c/li\u003e\n\u003cli\u003eHandling case where match returns None to fix mypy unit test.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.6.1 (2025-10-06)\u003c/h2\u003e\n\u003cp\u003eBugfixes\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the supported versions of astroid.\nFix the breaking change to Import and pass in the AstroidManager to the AstroidBuilder (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/536\"\u003e#536\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/readthedocs/sphinx-autoapi/commit/75cbffdea08771a0c574814053359b28dc7dfe85\"\u003e\u003ccode\u003e75cbffd\u003c/code\u003e\u003c/a\u003e Version 3.8.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/7838cf6937000a84ca8cb13a7d76e03b0084a7f3\"\u003e\u003ccode\u003e7838cf6\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/f1cdd302336455bee67a6dbc9ea2742fad17a756\"\u003e\u003ccode\u003ef1cdd30\u003c/code\u003e\u003c/a\u003e Attempt to fix macos-latest build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/34bb24ccc9de3be61c63a9c8b38458d06ea11eb3\"\u003e\u003ccode\u003e34bb24c\u003c/code\u003e\u003c/a\u003e Autodoc-style directives can access members excluded by autoapi_options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/ccb2e898cb8b3becf04eba76f5449e29d336215e\"\u003e\u003ccode\u003eccb2e89\u003c/code\u003e\u003c/a\u003e astroid requirement is consistent across all versions of Python\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/0917ed2d4a42fa4ddd3668247d10ca6d902d7ada\"\u003e\u003ccode\u003e0917ed2\u003c/code\u003e\u003c/a\u003e Version 3.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/394beb453256c9c15a30cb5851682fed2a844fc4\"\u003e\u003ccode\u003e394beb4\u003c/code\u003e\u003c/a\u003e Add warning for missing import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/96cd74d1a015a05bf4409a73b173dcdf8421902a\"\u003e\u003ccode\u003e96cd74d\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/c248b85d66c233a4673c64944bdeeb394be5116a\"\u003e\u003ccode\u003ec248b85\u003c/code\u003e\u003c/a\u003e Render typing_extensions.TypeAlias like other type aliases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/a2f49c9689ba76d5518c33fb509c57b5141342df\"\u003e\u003ccode\u003ea2f49c9\u003c/code\u003e\u003c/a\u003e Fix deprecation warnings raised by astroid and sphinx\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/compare/v3.6.0...v3.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-mermaid` from 2.0.1 to 2.0.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/blob/master/CHANGELOG.md\"\u003esphinxcontrib-mermaid's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003emermaid_dark_theme\u003c/code\u003e and \u003ccode\u003emermaid_light_theme\u003c/code\u003e config options for configurable theme switching\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/mgaitan/sphinxcontrib-mermaid/commit/19be46820247ed7b9ac333d4bde2e1e3445ca431\"\u003e\u003ccode\u003e19be468\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/240\"\u003e#240\u003c/a\u003e from timkpaine/tkp/hatch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/e1f9eccc13395df8e7beba0b942389bf0e95b4ac\"\u003e\u003ccode\u003ee1f9ecc\u003c/code\u003e\u003c/a\u003e Switch to hatchling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/42aa20a010f0d4b2b86352ae1a10c6d3cd1f6cb7\"\u003e\u003ccode\u003e42aa20a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/239\"\u003e#239\u003c/a\u003e from timkpaine/tkp/202\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/2db5b555ff3fde025be5bbab2729457760f49210\"\u003e\u003ccode\u003e2db5b55\u003c/code\u003e\u003c/a\u003e bump to 2.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/25c7ef7b8ff75001ad0e475ffb2d60a21eb13b42\"\u003e\u003ccode\u003e25c7ef7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/237\"\u003e#237\u003c/a\u003e from kartben/local_paths\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/e98c6f8b8869b9f47a9ce206bf33bed0c1b60065\"\u003e\u003ccode\u003ee98c6f8\u003c/code\u003e\u003c/a\u003e increase test coverage for _use_local options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/1422b452a55017407e9688c912b93b25ee95bcec\"\u003e\u003ccode\u003e1422b45\u003c/code\u003e\u003c/a\u003e Resolve local Mermaid/ELK/ZenUML/D3 JS paths under html_static_path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/d6d874c4fbded7b7b7d86c26f0d39c7e70a55a1e\"\u003e\u003ccode\u003ed6d874c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/236\"\u003e#236\u003c/a\u003e from jensens/configurable-theme\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/bce597640b897ff4ab03cc6d77a2eb1a7d26f0d5\"\u003e\u003ccode\u003ebce5976\u003c/code\u003e\u003c/a\u003e Document mermaid_dark_theme and mermaid_light_theme config options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/12bb2ac696a1e0ea9ec5b183bab0bc50216c7970\"\u003e\u003ccode\u003e12bb2ac\u003c/code\u003e\u003c/a\u003e Add mermaid_dark_theme and mermaid_light_theme config options\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/compare/2.0.1...2.0.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown` from 3.8.2 to 3.10.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Python-Markdown/markdown/releases\"\u003emarkdown's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 3.10.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix a regression related to comment handling (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1590\"\u003e#1590\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMore reliable fix for \u003ccode\u003e\u0026lt;/\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1593\"\u003e#1593\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.10.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure nested elements inside inline comments are properly unescaped (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1571\"\u003e#1571\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMake the docs build successfully with mkdocstrings-python 2.0 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1575\"\u003e#1575\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix infinite loop when multiple bogus or unclosed HTML comments appear in input (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1578\"\u003e#1578\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix another infinite loop when handling bad comments (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1586\"\u003e#1586\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.10.0\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOfficially support Python 3.14 and PyPy 3.11 and drop support for Python 3.9\nand PyPy 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix an HTML comment parsing case in some Python versions that can cause an\ninfinite loop (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1554\"\u003e#1554\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRevert the default behavior of \u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e (to \u003ccode\u003eTrue\u003c/code\u003e). The new\nbehavior introduced in 3.9.0 is experimental and results are inconsistent.\nIt should not have been made the default behavior (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1561\"\u003e#1561\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.9.0\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFootnotes are now ordered by the occurrence of their references in the\ndocument. A new configuration option for the footnotes extension,\n\u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e, has been added to support restoring the previous\nbehavior of ordering footnotes by the occurrence of definitions (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1367\"\u003e#1367\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure inline processing iterates through elements in document order (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1546\"\u003e#1546\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix handling of incomplete HTML tags in code spans in Python 3.14 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1547\"\u003e#1547\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/Python-Markdown/markdown/blob/master/docs/changelog.md\"\u003emarkdown's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[3.10.2] - 2026-02-09\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix a regression related to comment handling (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1590\"\u003e#1590\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMore reliable fix for \u003ccode\u003e\u0026lt;/\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1593\"\u003e#1593\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.10.1] - 2026-01-21\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure nested elements inside inline comments are properly unescaped (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1571\"\u003e#1571\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMake the docs build successfully with mkdocstrings-python 2.0 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1575\"\u003e#1575\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix infinite loop when multiple bogus or unclosed HTML comments appear in input (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1578\"\u003e#1578\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix another infinite loop when handling bad comments (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1586\"\u003e#1586\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.10.0] - 2025-11-03\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOfficially support Python 3.14 and PyPy 3.11 and drop support for Python 3.9\nand PyPy 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix an HTML comment parsing case in some Python versions that can cause an\ninfinite loop (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1554\"\u003e#1554\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRevert the default behavior of \u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e (to \u003ccode\u003eTrue\u003c/code\u003e). The new\nbehavior introduced in 3.9.0 is experimental and results are inconsistent.\nIt should not have been made the default behavior (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1561\"\u003e#1561\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.9.0] - 2025-09-04\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFootnotes are now ordered by the occurrence of their references in the\ndocument. A new configuration option for the footnotes extension,\n\u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e, has been added to support restoring the previous\nbehavior of ordering footnotes by the occurrence of definitions (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1367\"\u003e#1367\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure inline processing iterates through elements in document order (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1546\"\u003e#1546\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix handling of incomplete HTML tags in code spans in Python 3.14 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1547\"\u003e#1547\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/Python-Markdown/markdown/commit/e7a0efb3a7c36d6b8005403122705662bc17c904\"\u003e\u003ccode\u003ee7a0efb\u003c/code\u003e\u003c/a\u003e Bump version to 3.10.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/630183336bda57c258becc3ed229105481876a7e\"\u003e\u003ccode\u003e6301833\u003c/code\u003e\u003c/a\u003e Document HTML sanitation policy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/7f29f1a69d236f5bb11645c2fa03fcf701487c8c\"\u003e\u003ccode\u003e7f29f1a\u003c/code\u003e\u003c/a\u003e More reliable fix for \u003ccode\u003e\u0026lt;/\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/c4386475a6b6daea43b7d7717add4271adc9a3c1\"\u003e\u003ccode\u003ec438647\u003c/code\u003e\u003c/a\u003e Fix regression of special comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/e5fa5b86e8ec380cbc520cfc637d72c779e5c601\"\u003e\u003ccode\u003ee5fa5b8\u003c/code\u003e\u003c/a\u003e Bump version to 3.10.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/f9253495f5d9919f2fdd5e147832b5fc21330f65\"\u003e\u003ccode\u003ef925349\u003c/code\u003e\u003c/a\u003e More HTML fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/9933a0a4699f3dea91f46528a2bf54863f531c08\"\u003e\u003ccode\u003e9933a0a\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Allow reference links with backticks\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/07dfa4eb43f7a2ab3181b4f842a960a03a6c1221\"\u003e\u003ccode\u003e07dfa4e\u003c/code\u003e\u003c/a\u003e Allow reference links with backticks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/fb6b27a6ff90980b5bcb0cd51528a7c9dc3a93ca\"\u003e\u003ccode\u003efb6b27a\u003c/code\u003e\u003c/a\u003e Fix infinite loop when text contains multiple unclosed comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/89112c293f7b399ae8808f3a06306f46601e9684\"\u003e\u003ccode\u003e89112c2\u003c/code\u003e\u003c/a\u003e Make the docs build successfully with mkdocstrings-python 2.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Python-Markdown/markdown/compare/3.8.2...3.10.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `orjson` from 3.10.18 to 3.11.8\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ijl/orjson/releases\"\u003eorjson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.11.8\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuild and compatibility improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.7\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse a faster library to serialize \u003ccode\u003efloat\u003c/code\u003e. Users with byte-exact regression\ntests should note positive exponents are now written using a \u003ccode\u003e+\u003c/code\u003e, e.g.,\n\u003ccode\u003e1.2e+30\u003c/code\u003e instead of \u003ccode\u003e1.2e30\u003c/code\u003e. Both formats are spec-compliant.\u003c/li\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 5 free-threading.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.6\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eorjson now includes code licensed under the Mozilla Public License 2.0 (MPL-2.0).\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 5.\u003c/li\u003e\n\u003cli\u003eBuild now depends on Rust 1.89 or later instead of 1.85.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix sporadic crash serializing deeply nested \u003ccode\u003elist\u003c/code\u003e of \u003ccode\u003edict\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.5\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShow simple error message instead of traceback when attempting to\nbuild on unsupported Python versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.4\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 1.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for 3.14 and manylinux i686, manylinux arm7,\nmanylinux ppc64le, manylinux s390x.\u003c/li\u003e\n\u003cli\u003eBuild now requires a C compiler.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix PyPI project metadata when using maturin 1.9.2 or later.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix build using Rust 1.89 on amd64.\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/ijl/orjson/blob/master/CHANGELOG.md\"\u003eorjson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.11.8 - 2026-03-31\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuild and compatibility improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.7 - 2026-02-02\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse a faster library to serialize \u003ccode\u003efloat\u003c/code\u003e. Users with byte-exact regression\ntests should note positive exponents are now written using a \u003ccode\u003e+\u003c/code\u003e, e.g.,\n\u003ccode\u003e1.2e+30\u003c/code\u003e instead of \u003ccode\u003e1.2e30\u003c/code\u003e. Both formats are spec-compliant.\u003c/li\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 5 free-threading.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.6 - 2026-01-29\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eorjson now includes code licensed under the Mozilla Public License 2.0 (MPL-2.0).\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 5.\u003c/li\u003e\n\u003cli\u003eBuild now depends on Rust 1.89 or later instead of 1.85.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix sporadic crash serializing deeply nested \u003ccode\u003elist\u003c/code\u003e of \u003ccode\u003edict\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.5 - 2025-12-06\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShow simple error message instead of traceback when attempting to\nbuild on unsupported Python versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.4 - 2025-10-24\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 1.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for 3.14 and manylinux i686, manylinux arm7,\nmanylinux ppc64le, manylinux s390x.\u003c/li\u003e\n\u003cli\u003eBuild now requires a C compiler.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.3 - 2025-08-26\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/ijl/orjson/commit/5cbb3d0398a2f42de51210270286fecd798c5d78\"\u003e\u003ccode\u003e5cbb3d0\u003c/code\u003e\u003c/a\u003e 3.11.8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/4195d7f263e33076295b75efdcbaf6a55af8674e\"\u003e\u003ccode\u003e4195d7f\u003c/code\u003e\u003c/a\u003e writer::half\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/d00641b69410728a735f0855eb1c2843b0a5819b\"\u003e\u003ccode\u003ed00641b\u003c/code\u003e\u003c/a\u003e writer::uuid\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/c84d9b4ba4853781af943fa5c493e261e2f82b84\"\u003e\u003ccode\u003ec84d9b4\u003c/code\u003e\u003c/a\u003e build and compatibility misc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/4547234b681fac5e0e0734cf44c21e75f9654e43\"\u003e\u003ccode\u003e4547234\u003c/code\u003e\u003c/a\u003e ffi::numpy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/0d4a5ad1f17a72528ba027554466fdec6580cdeb\"\u003e\u003ccode\u003e0d4a5ad\u003c/code\u003e\u003c/a\u003e datetime PyRef idiom\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/e93a13d372ec956d027e71d023eb534b8445ac85\"\u003e\u003ccode\u003ee93a13d\u003c/code\u003e\u003c/a\u003e Cross-compile avoids maturin v1.12 build-details.json error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/ec2b066cae79ae4a90ed126ac5723335dd99e408\"\u003e\u003ccode\u003eec2b066\u003c/code\u003e\u003c/a\u003e 3.11.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/1ca01f78cf4198ec37407d83713afa6e5c53dbf9\"\u003e\u003ccode\u003e1ca01f7\u003c/code\u003e\u003c/a\u003e zmij\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/1716a226bd1f38db01503f30cd37b0efec48d88e\"\u003e\u003ccode\u003e1716a22\u003c/code\u003e\u003c/a\u003e cargo update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ijl/orjson/compare/3.10.18...3.11.8\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.14.0 to 4.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003cp\u003eNew features since 4.14.1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.14.1\u003c/h2\u003e\n\u003ch1\u003eRelease 4.14.1 (July 4, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix usage of \u003ccode\u003etyping_extensions.TypedDict\u003c/code\u003e nested inside other types\n(e.g., \u003ccode\u003etyping.Type[typing_extensions.TypedDict]\u003c/code\u003e). This is not allowed by the\ntype system but worked on older versions, so we maintain support.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.15.0 (August 25, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003ch1\u003eRelease 4.15.0rc1 (August 18, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.14.1 (July 4, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix usage of \u003ccode\u003etyping_extensions.TypedDict\u003c/code\u003e nested inside other types\n(e.g., \u003ccode\u003etyping.Type[typing_extensions.TypedDict]\u003c/code\u003e). This is not allowed by the\ntype system but worked on older versions, so we maintain support.\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/typing_extensions/commit/9d1637e264b5c1a6b7acee3e907015f89b20c2c9\"\u003e\u003ccode\u003e9d1637e\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4bd67c5be5d9443c7d33c314d02a56ee125eb88d\"\u003e\u003ccode\u003e4bd67c5\u003c/code\u003e\u003c/a\u003e Coverage: exclude some noise (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e589a26da73b075c5276bae40b86db1af0144f84\"\u003e\u003ccode\u003ee589a26\u003c/code\u003e\u003c/a\u003e Coverage: add detailed report to job summary (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/67d37fed1298e050f74d5acc95b2621bd37837ad\"\u003e\u003ccode\u003e67d37fe\u003c/code\u003e\u003c/a\u003e Coverage: Implement fail_under (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e9ae26f5286edee9262727755ecb9ad16e999192\"\u003e\u003ccode\u003ee9ae26f\u003c/code\u003e\u003c/a\u003e Don't delete previous coverage comment (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/ac80bb728a3006fc88ef7373b92f0c25cfcc7895\"\u003e\u003ccode\u003eac80bb7\u003c/code\u003e\u003c/a\u003e Add Coverage workflow (\u003ca href=\"https://redirect.git...\n\n_Description has been truncated_","html_url":"https://github.com/ankitects/anki/pull/4829","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankitects%2Fanki/issues/4829","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4829/packages"},{"uuid":"4425229344","node_id":"PR_kwDOPa2xds7aeRAd","number":115,"state":"closed","title":"chore(deps): bump the minor-patch group in /backend with 15 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-17T05:29:14.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-12T00:19:03.000Z","updated_at":"2026-05-17T05:29:16.000Z","time_to_close":450611,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"minor-patch","update_count":15,"packages":[{"name":"anyio","old_version":"4.9.0","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"click","old_version":"8.1.8","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"idna","old_version":"3.10","new_version":"3.14","repository_url":"https://github.com/kjd/idna"},{"name":"pydantic-settings","old_version":"2.8.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"typing-extensions","old_version":"4.14.1","new_version":"4.15.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"uvicorn","old_version":"0.45.0","new_version":"0.46.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"psycopg2-binary","old_version":"2.9.10","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.28","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"webauthn","old_version":"2.5.2","new_version":"2.7.1","repository_url":"https://github.com/duo-labs/py_webauthn"},{"name":"google-auth","old_version":"2.45.0","new_version":"2.52.0","repository_url":"https://github.com/googleapis/google-auth-library-python"},{"name":"requests","old_version":"2.33.0","new_version":"2.34.0","repository_url":"https://github.com/psf/requests"},{"name":"beautifulsoup4","old_version":"4.12.3","new_version":"4.14.3"},{"name":"boto3","old_version":"1.42.91","new_version":"1.43.6","repository_url":"https://github.com/boto/boto3"},{"name":"boto3-stubs","old_version":"1.42.91","new_version":"1.43.6","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"moto","old_version":"5.1.22","new_version":"5.2.1","repository_url":"https://github.com/getmoto/moto"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps the minor-patch group in /backend with 15 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.9.0` | `4.13.0` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.3.3` |\n| [idna](https://github.com/kjd/idna) | `3.10` | `3.14` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.8.1` | `2.14.1` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.14.1` | `4.15.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.45.0` | `0.46.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.10` | `2.9.12` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.28` |\n| [webauthn](https://github.com/duo-labs/py_webauthn) | `2.5.2` | `2.7.1` |\n| [google-auth](https://github.com/googleapis/google-auth-library-python) | `2.45.0` | `2.52.0` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.0` |\n| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.12.3` | `4.14.3` |\n| [boto3](https://github.com/boto/boto3) | `1.42.91` | `1.43.6` |\n| [boto3-stubs](https://github.com/youtype/mypy_boto3_builder) | `1.42.91` | `1.43.6` |\n| [moto](https://github.com/getmoto/moto) | `5.1.22` | `5.2.1` |\n\nUpdates `anyio` from 4.9.0 to 4.13.0\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.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003ettl\u003c/code\u003e parameter to the \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e wrapper (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1073\"\u003e#1073\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWidened the type annotations of file I/O streams to accept \u003ccode\u003eIO[bytes]\u003c/code\u003e instead of just \u003ccode\u003eBinaryIO\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.Path\u003c/code\u003e not being compatible with Python 3.15 due to the removal of \u003ccode\u003epathlib.Path.is_reserved()\u003c/code\u003e and the addition of \u003ccode\u003epathlib.Path.__vfspath__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1061\"\u003e#1061\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eBrokenResourceError\u003c/code\u003e raised by the asyncio \u003ccode\u003eSocketStream\u003c/code\u003e not having the original exception as its cause (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1055\"\u003e#1055\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eTypeError\u003c/code\u003e raised when using \u0026quot;func\u0026quot; as a parameter name in \u003ccode\u003epytest.mark.parametrize\u003c/code\u003e when using the pytest plugin (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1068\"\u003e#1068\u003c/a\u003e; PR by \u003ca href=\"https://github.com/JohnnyDeuss\"\u003e\u003ccode\u003e@​JohnnyDeuss\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the pytest plugin not running tests that had the \u003ccode\u003eanyio\u003c/code\u003e marker added programmatically via \u003ccode\u003epytest_collection_modifyitems\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/422\"\u003e#422\u003c/a\u003e; PR by \u003ca href=\"https://github.com/chbndrhnns\"\u003e\u003ccode\u003e@​chbndrhnns\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when they are contained in an exception group alongside non-cancellation exceptions (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1091\"\u003e#1091\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCondition.wait()\u003c/code\u003e not passing on a notification when the task is cancelled but already received a notification\u003c/li\u003e\n\u003cli\u003eFixed inverted condition in the process pool shutdown phase which would cause still-running pooled processes not to be terminated (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1074\"\u003e#1074\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged all functions currently raising the private \u003ccode\u003eNoCurrentAsyncBackend\u003c/code\u003e exception (since v4.12.0) to instead raise the public \u003ccode\u003eNoEventLoopError\u003c/code\u003e exception (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1048\"\u003e#1048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e not working with instance methods (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1042\"\u003e#1042\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for asyncio's \u003ca href=\"https://docs.python.org/3/library/asyncio-graph.html\"\u003etask call graphs\u003c/a\u003e on Python 3.14 and later when using AnyIO's task groups (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1025\"\u003e#1025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded an asynchronous implementation of the \u003ccode\u003efunctools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1001\"\u003e#1001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003euvloop=True\u003c/code\u003e on Windows via the \u003ca href=\"https://github.com/Vizonex/Winloop\"\u003ewinloop\u003c/a\u003e implementation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/960\"\u003e#960\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for use as a context manager to \u003ccode\u003eanyio.lowlevel.RunVar\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1003\"\u003e#1003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003e__all__\u003c/code\u003e declarations to public submodules (\u003ccode\u003eanyio.lowlevel\u003c/code\u003e etc.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1009\"\u003e#1009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the ability to set the token count of a \u003ccode\u003eCapacityLimiter\u003c/code\u003e to zero (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1019\"\u003e#1019\u003c/a\u003e; requires Python 3.10 or later when using Trio)\u003c/li\u003e\n\u003cli\u003eAdded parameters \u003ccode\u003ecase_sensitive\u003c/code\u003e and \u003ccode\u003erecurse_symlinks\u003c/code\u003e along with support for path-like objects to \u003ccode\u003eanyio.Path.glob()\u003c/code\u003e and \u003ccode\u003eanyio.Path.rglob()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1033\"\u003e#1033\u003c/a\u003e; PR by \u003ca href=\"https://github.com/northisup\"\u003e\u003ccode\u003e@​northisup\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped \u003ccode\u003esniffio\u003c/code\u003e as a direct dependency and added the \u003ccode\u003eget_available_backends()\u003c/code\u003e function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1021\"\u003e#1021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not raising \u003ccode\u003eClosedResourceError\u003c/code\u003e and \u003ccode\u003eBrokenResourceError\u003c/code\u003e on asyncio. Previously, a non-AnyIO exception was raised in such cases (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not checkpointing before writing data on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1002\"\u003e#1002\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a race condition where cancelling a \u003ccode\u003eFuture\u003c/code\u003e from \u003ccode\u003eBlockingPortal.start_task_soon()\u003c/code\u003e would sometimes not cancel the async function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1011\"\u003e#1011\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the presence of the pytest plugin causing breakage with older versions of pytest (\u0026lt;= 6.1.2) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1028\"\u003e#1028\u003c/a\u003e; PR by \u003ca href=\"https://github.com/saper\"\u003e\u003ccode\u003e@​saper\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a rarely occurring \u003ccode\u003eRuntimeError: Set changed size during iteration\u003c/code\u003e while shutting down the process pool when using the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/985\"\u003e#985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for cancellation reasons (the \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003eCancelScope.cancel()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum version of Trio to v0.31.0\u003c/li\u003e\n\u003cli\u003eAdded the ability to enter the event loop from foreign (non-worker) threads by passing the return value of \u003ccode\u003eanyio.lowlevel.current_token()\u003c/code\u003e to \u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e and \u003ccode\u003eanyio.from_thread.run_sync()\u003c/code\u003e as the \u003ccode\u003etoken\u003c/code\u003e keyword argument (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded pytest option (\u003ccode\u003eanyio_mode = \u0026quot;auto\u0026quot;\u003c/code\u003e) to make the pytest plugin automatically handle all async tests (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the \u003ccode\u003eanyio.Condition.wait_for()\u003c/code\u003e method for feature parity with asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the default type argument of \u003ccode\u003eanyio.abc.TaskStatus\u003c/code\u003e from \u003ccode\u003eAny\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/964\"\u003e#964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed TCP listener behavior to guarantee the same ephemeral port is used for all socket listeners when \u003ccode\u003elocal_port=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/857\"\u003e#857\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed inconsistency between Trio and asyncio where a TCP stream that previously raised a \u003ccode\u003eBrokenResourceError\u003c/code\u003e on \u003ccode\u003esend()\u003c/code\u003e would still raise \u003ccode\u003eBrokenResourceError\u003c/code\u003e after the stream was closed on asyncio, but \u003ccode\u003eClosedResourceError\u003c/code\u003e on Trio. They now both raise a \u003ccode\u003eClosedResourceError\u003c/code\u003e in this scenario. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.10.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003efeed_data()\u003c/code\u003e method to the \u003ccode\u003eBufferedByteReceiveStream\u003c/code\u003e class, allowing users to inject data directly into the buffer\u003c/li\u003e\n\u003cli\u003eAdded various class methods to wrap existing sockets as listeners or socket streams:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSocketListener.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eConnectedUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXDatagramSocket.from_socket()\u003c/code\u003e\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/agronholm/anyio/commit/afbe93ca9d0c447adf26e9c1715ac20870622bf2\"\u003e\u003ccode\u003eafbe93c\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/33bdf2e4b4f40c2df178123746147a6d2471808d\"\u003e\u003ccode\u003e33bdf2e\u003c/code\u003e\u003c/a\u003e Rearranged the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/19e09e25bc5a23dd78a577d8c3909dd377057c78\"\u003e\u003ccode\u003e19e09e2\u003c/code\u003e\u003c/a\u003e Fixed inverted condition in _forcibly_shutdown_process_pool_on_exit (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9369d80b9e8292f2a892a9d5c73923c6a28aa08c\"\u003e\u003ccode\u003e9369d80\u003c/code\u003e\u003c/a\u003e Fixed Condition.wait() not handing over notification when cancelled\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f122abdc6f6b166c6b6ac27d36d55cdf8fa08e8\"\u003e\u003ccode\u003e6f122ab\u003c/code\u003e\u003c/a\u003e Fixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/beaa45aff568a4020f2faf317321dd92f0e1f4a0\"\u003e\u003ccode\u003ebeaa45a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1097\"\u003e#1097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/602f6606dcf3f37702686a4f3e161328c537b07f\"\u003e\u003ccode\u003e602f660\u003c/code\u003e\u003c/a\u003e Widened type annotations to accept IO[bytes] in file streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b5dcd45170701a756ba634197398f05d4710cab3\"\u003e\u003ccode\u003eb5dcd45\u003c/code\u003e\u003c/a\u003e Added note about erasing the template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d68670b3b4e0917d4caff2de082e03220f3e05a1\"\u003e\u003ccode\u003ed68670b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/fc17a22dd948e6a3d90d99908813f0010dfc3d2c\"\u003e\u003ccode\u003efc17a22\u003c/code\u003e\u003c/a\u003e tweak to_thread docs about abandon_on_cancel (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1088\"\u003e#1088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.9.0...4.13.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.1.8 to 8.3.3\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.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 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.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3262\"\u003e#3262\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3280\"\u003e#3280\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3111\"\u003e#3111\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3189\"\u003e#3189\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3250\"\u003e#3250\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2865\"\u003e#2865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2879\"\u003e#2879\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.3.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.2 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.3.2/\"\u003ehttps://pypi.org/project/click/8.3.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/29\"\u003ehttps://github.com/pallets/click/milestone/29\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.3.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-20\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n:issue:\u003ccode\u003e1026\u003c/code\u003e :pr:\u003ccode\u003e1477\u003c/code\u003e :pr:\u003ccode\u003e2775\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. :issue:\u003ccode\u003e3298\u003c/code\u003e :pr:\u003ccode\u003e3299\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. :pr:\u003ccode\u003e3238\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n:issue:\u003ccode\u003e3224\u003c/code\u003e :pr:\u003ccode\u003e3240\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n:issue:\u003ccode\u003e654\u003c/code\u003e :issue:\u003ccode\u003e824\u003c/code\u003e :issue:\u003ccode\u003e843\u003c/code\u003e :pr:\u003ccode\u003e951\u003c/code\u003e :pr:\u003ccode\u003e3235\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. :pr:\u003ccode\u003e3151\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. :pr:\u003ccode\u003e3151\u003c/code\u003e :pr:\u003ccode\u003e3177\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. :issue:\u003ccode\u003e2836\u003c/code\u003e :pr:\u003ccode\u003e2837\u003c/code\u003e :pr:\u003ccode\u003e3165\u003c/code\u003e :pr:\u003ccode\u003e3262\u003c/code\u003e :pr:\u003ccode\u003e3280\u003c/code\u003e\n:pr:\u003ccode\u003e3328\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. :issue:\u003ccode\u003e3111\u003c/code\u003e :pr:\u003ccode\u003e3239\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. :issue:\u003ccode\u003e3189\u003c/code\u003e :pr:\u003ccode\u003e3250\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n:issue:\u003ccode\u003e2865\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. :issue:\u003ccode\u003e2879\u003c/code\u003e :pr:\u003ccode\u003e3248\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.3.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. :issue:\u003ccode\u003e3084\u003c/code\u003e :pr:\u003ccode\u003e3152\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n:issue:\u003ccode\u003e3136\u003c/code\u003e :pr:\u003ccode\u003e3199\u003c/code\u003e :pr:\u003ccode\u003e3202\u003c/code\u003e :pr:\u003ccode\u003e3209\u003c/code\u003e :pr:\u003ccode\u003e3212\u003c/code\u003e :pr:\u003ccode\u003e3224\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/pallets/click/commit/c06d2d0a6aee6bcc50bd8257be2a4a592f4e75d0\"\u003e\u003ccode\u003ec06d2d0\u003c/code\u003e\u003c/a\u003e Release 8.3.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f1f191ecd2c790b161187c78e7c88440e9524e5c\"\u003e\u003ccode\u003ef1f191e\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3343\"\u003e#3343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bb59ba0fd279ca085d1113f0499b6a602ca31081\"\u003e\u003ccode\u003ebb59ba0\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/4a352253c9ff013e36d11e4a6820d36d00ff2cd4\"\u003e\u003ccode\u003e4a35225\u003c/code\u003e\u003c/a\u003e Reduce blast-radius of \u003ccode\u003eUNSET\u003c/code\u003e in \u003ccode\u003edefault_map\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c07bb936de43fd303f9cfbefe248ab23fd2199c8\"\u003e\u003ccode\u003ec07bb93\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into unset-in-default-map\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c7e1ba8448cbcb2cdd9c1c7f4a592e863dcc3995\"\u003e\u003ccode\u003ec7e1ba8\u003c/code\u003e\u003c/a\u003e Reorder \u003ccode\u003eParameterSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/76552ff1e8c85837f911fc34037e702ae4327eda\"\u003e\u003ccode\u003e76552ff\u003c/code\u003e\u003c/a\u003e Show default string in prompt (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/ac5cec5fe54e5a691e7bac17f441ce9498e0744c\"\u003e\u003ccode\u003eac5cec5\u003c/code\u003e\u003c/a\u003e Reorder ParameterSource from most to least explicit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c452e00e6772931b7071d9316b82b77e5b8f280\"\u003e\u003ccode\u003e8c452e0\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into show-default-string-in-prompt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c95c73bd5ef89eac638f85f1904a104ba4b1a32\"\u003e\u003ccode\u003e8c95c73\u003c/code\u003e\u003c/a\u003e Reconcile default value passing and default activation (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.1.8...8.3.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.10 to 3.14\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.14 (2026-05-10)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved opportunity to process long inputs into quadratic\ntime by rejecting oversize inputs up-front. Closes a bypass\nof the CVE-2024-3651 mitigation. [GHSA-65pc-fj4g-8rjx]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003cp\u003e3.13 (2026-04-22)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e3.12 (2026-04-21)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003cp\u003e3.11 (2025-10-12)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 16.0.0, including significant changes to UTS46\nprocessing. As a result of Unicode ending support for it, transitional\nprocessing no longer has an effect and returns the same result.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14, lowest supported version is Python 3.8.\u003c/li\u003e\n\u003cli\u003eVarious updates to packaging, including PEP 740 support.\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/kjd/idna/commit/37b6b7497aee4805f7a74a7d86206ac05be9669a\"\u003e\u003ccode\u003e37b6b74\u003c/code\u003e\u003c/a\u003e Release v3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/628fef84d3eda59321c21127e73dcd873db23ead\"\u003e\u003ccode\u003e628fef8\u003c/code\u003e\u003c/a\u003e Use valid_string_length() for early oversized-input check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1e26c7fd93c67995422af9d1f071f45ee6433fd0\"\u003e\u003ccode\u003e1e26c7f\u003c/code\u003e\u003c/a\u003e Tweak release wording\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/ab5668fb6eaf4254d91d6993c0b23e98e21202fb\"\u003e\u003ccode\u003eab5668f\u003c/code\u003e\u003c/a\u003e Pre-release 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c0dda4501df5d91c3181ce6f962dc5de74e82cc1\"\u003e\u003ccode\u003ec0dda45\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/b7391f4c240bf2eae80eaed0a2ef7c2e0496af96\"\u003e\u003ccode\u003eb7391f4\u003c/code\u003e\u003c/a\u003e Add docstrings to package (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/226\"\u003e#226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0f4a28d88f8cce54269f0b6a42edf5e6a5424319\"\u003e\u003ccode\u003e0f4a28d\u003c/code\u003e\u003c/a\u003e Raise IDNAError on non-string input to encode/decode (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/224\"\u003e#224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7e6df7196e6396b5b84b9530eab8272b5ad51898\"\u003e\u003ccode\u003e7e6df71\u003c/code\u003e\u003c/a\u003e Address type issues found by \u003ccode\u003ety\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/225\"\u003e#225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/6ebfaab9ea718dce38a7c17ddafd7fb28b0468d4\"\u003e\u003ccode\u003e6ebfaab\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/221\"\u003e#221\u003c/a\u003e from kjd/release-3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/89cdfd27338896cee6b1ee18e64c96ac28684ce0\"\u003e\u003ccode\u003e89cdfd2\u003c/code\u003e\u003c/a\u003e Release v3.13\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.10...v3.14\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.8.1 to 2.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/850\"\u003epydantic/pydantic-settings#850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 5 updates 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/pydantic/pydantic-settings/pull/854\"\u003epydantic/pydantic-settings#854\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 3 updates 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/pydantic/pydantic-settings/pull/853\"\u003epydantic/pydantic-settings#853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates 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/pydantic/pydantic-settings/pull/856\"\u003epydantic/pydantic-settings#856\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/858\"\u003epydantic/pydantic-settings#858\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.1 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/859\"\u003epydantic/pydantic-settings#859\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-settings/compare/v2.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 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/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 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/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 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/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 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/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python 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/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group 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/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates 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/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt 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-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group 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/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor 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-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\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-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\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/pydantic/pydantic-settings/commit/e95c30bec8cfaee88ee275138c064aea97a25bdf\"\u003e\u003ccode\u003ee95c30b\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/859\"\u003e#859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/0c8734581b6cf70a995afad603ac456631d00621\"\u003e\u003ccode\u003e0c87345\u003c/code\u003e\u003c/a\u003e Fix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/858\"\u003e#858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/7bd0072795a800065b42210b6dca90fc9b83daf7\"\u003e\u003ccode\u003e7bd0072\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 2 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/856\"\u003e#856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/b03e573d017ed48e1c2774a5e0b715db9766c76b\"\u003e\u003ccode\u003eb03e573\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/853\"\u003e#853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/eaa3b434938411ec8a3717ea646614561e713f51\"\u003e\u003ccode\u003eeaa3b43\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 5 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/854\"\u003e#854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9f95615c24c6813c1d7d203576581a79cb6d9e8e\"\u003e\u003ccode\u003e9f95615\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/850\"\u003e#850\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.8.1...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.14.1 to 4.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003cp\u003eNew features since 4.14.1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.15.0 (August 25, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003ch1\u003eRelease 4.15.0rc1 (August 18, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/typing_extensions/commit/9d1637e264b5c1a6b7acee3e907015f89b20c2c9\"\u003e\u003ccode\u003e9d1637e\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4bd67c5be5d9443c7d33c314d02a56ee125eb88d\"\u003e\u003ccode\u003e4bd67c5\u003c/code\u003e\u003c/a\u003e Coverage: exclude some noise (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e589a26da73b075c5276bae40b86db1af0144f84\"\u003e\u003ccode\u003ee589a26\u003c/code\u003e\u003c/a\u003e Coverage: add detailed report to job summary (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/67d37fed1298e050f74d5acc95b2621bd37837ad\"\u003e\u003ccode\u003e67d37fe\u003c/code\u003e\u003c/a\u003e Coverage: Implement fail_under (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e9ae26f5286edee9262727755ecb9ad16e999192\"\u003e\u003ccode\u003ee9ae26f\u003c/code\u003e\u003c/a\u003e Don't delete previous coverage comment (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/ac80bb728a3006fc88ef7373b92f0c25cfcc7895\"\u003e\u003ccode\u003eac80bb7\u003c/code\u003e\u003c/a\u003e Add Coverage workflow (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/623\"\u003e#623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/abaaafd98c1cc7e5baf098ec287a3d22cb339670\"\u003e\u003ccode\u003eabaaafd\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/98104053ea8d49bcdd247804e5fa9f73136acbd4\"\u003e\u003ccode\u003e9810405\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e@disjoint_base\u003c/code\u003e (PEP 800) (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/634\"\u003e#634\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/7ee9e05fd484d06899ce56e80f5e1aa4c760fc03\"\u003e\u003ccode\u003e7ee9e05\u003c/code\u003e\u003c/a\u003e Backport type_params fix from CPython (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/1e8eb9c06ef51b3a1e1f05303a16feca13f5ed98\"\u003e\u003ccode\u003e1e8eb9c\u003c/code\u003e\u003c/a\u003e Do not refer to PEP 705 as being experimental (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.14.1...4.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.45.0 to 0.46.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.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer 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/2917\"\u003eKludex/uvicorn#2917\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.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.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/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.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\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/b224045f5900b7f766743bcb16ba9fc3adea2606\"\u003e\u003ccode\u003eb224045\u003c/code\u003e\u003c/a\u003e Version 0.46.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2918\"\u003e#2918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7375b5bf66d962186d663e85615d4b4d956bf880\"\u003e\u003ccode\u003e7375b5b\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d438fb16fe2d23c7bbc2ca7094645cff1f116458\"\u003e\u003ccode\u003ed438fb1\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3e6b96446653d0156434bce529a14c80764c9eda\"\u003e\u003ccode\u003e3e6b964\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.10 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.10...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.27 to 0.0.28\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.28\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\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/python-multipart/pull/281\"\u003eKludex/python-multipart#281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes 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/python-multipart/pull/282\"\u003eKludex/python-multipart#282\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/python-multipart/compare/0.0.27...0.0.28\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28\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/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.28 (2026-05-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/281\"\u003e#281\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/282\"\u003e#282\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/python-multipart/commit/7d8d28b210ac6cb055399562b0dc0e5cf9aef14a\"\u003e\u003ccode\u003e7d8d28b\u003c/code\u003e\u003c/a\u003e Version 0.0.28 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/284\"\u003e#284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b0dd125457d0f98de23bf2f894aedb1a54639d4e\"\u003e\u003ccode\u003eb0dd125\u003c/code\u003e\u003c/a\u003e Cap multipart boundary length at 256 bytes (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/282\"\u003e#282\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/d1b57392cf7d0c19235ba454eb5686fd27dc2384\"\u003e\u003ccode\u003ed1b5739\u003c/code\u003e\u003c/a\u003e Speed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/281\"\u003e#281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/09cb8c3da7638d45ecdf7c154832303214bba829\"\u003e\u003ccode\u003e09cb8c3\u003c/code\u003e\u003c/a\u003e Make the long_boundary benchmark dominated by the patched code path (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/280\"\u003e#280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/a6467c93c14aa4b09ef65450ead8011c45e5c7a0\"\u003e\u003ccode\u003ea6467c9\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Switch CodSpeed benchmarks to walltime mode\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/279\"\u003e#279\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/9a9690035a956fbdcca06f98461244cf790375a7\"\u003e\u003ccode\u003e9a96900\u003c/code\u003e\u003c/a\u003e Switch CodSpeed benchmarks to walltime mode (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/278\"\u003e#278\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/1fc7a626f566ae11bc63165260262b9a30af9008\"\u003e\u003ccode\u003e1fc7a62\u003c/code\u003e\u003c/a\u003e Make benchmark coverage trigger the partial-boundary fallback (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/277\"\u003e#277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/03df045810a216dceabbefc9dca7a33a264307bc\"\u003e\u003ccode\u003e03df045\u003c/code\u003e\u003c/a\u003e Add CodSpeed benchmark suite for parser hot paths (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/276\"\u003e#276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/79a7c614953d0c91a1d6dc69759b4fbcd0fb44f3\"\u003e\u003ccode\u003e79a7c61\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/273\"\u003e#273\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/bd29332f23429d06cf16226819f89b28a8288915\"\u003e\u003ccode\u003ebd29332\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 5 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/274\"\u003e#274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `webauthn` from 2.5.2 to 2.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/duo-labs/py_webauthn/releases\"\u003ewebauthn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis project now uses the \u003ca href=\"https://github.com/pyasn1/pyasn1/\"\u003epyasn1\u003c/a\u003e library to parse ASN.1-encoded values (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/263\"\u003e#263\u003c/a\u003e, h/t \u003ca href=\"https://github.com/ggirol-rc\"\u003e\u003ccode\u003e@​ggirol-rc\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSome bare \u003ccode\u003edict\u003c/code\u003e type annotations have been replaced with \u003ccode\u003eDict[str, Any]\u003c/code\u003e to satisfy stricter type checking setups (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/262\"\u003e#262\u003c/a\u003e, h/t \u003ca href=\"https://github.com/typestring\"\u003e\u003ccode\u003e@​typestring\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper has a new, optional \u003ccode\u003ebytes_encoder\u003c/code\u003e argument that accepts a \u003ccode\u003eCallable[[bytes], Any]\u003c/code\u003e method. This enables the use of custom encoding logic when serializing \u003ccode\u003ebytes\u003c/code\u003e values. When this argument is unspecified, \u003ccode\u003ebytes\u003c/code\u003e values will continue to be encoded into Base64URL (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.6.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe new \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper can be used to simplify registration and authentication options into a simple \u003ccode\u003eDict[str, Any]\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.5.3\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMore X.509 validation exceptions will include the cause of the exception as reported by the third-party library handling the validation (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/255\"\u003e#255\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/duo-labs/py_webauthn/blob/master/CHANGELOG.md\"\u003ewebauthn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis project now uses the \u003ca href=\"https://github.com/pyasn1/pyasn1/\"\u003epyasn1\u003c/a\u003e library to parse ASN.1-encoded values (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/263\"\u003e#263\u003c/a\u003e, h/t \u003ca href=\"https://github.com/ggirol-rc\"\u003e\u003ccode\u003e@​ggirol-rc\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSome bare \u003ccode\u003edict\u003c/code\u003e type annotations have been replaced with \u003ccode\u003eDict[str, Any]\u003c/code\u003e to satisfy stricter type checking setups (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/262\"\u003e#262\u003c/a\u003e, h/t \u003ca href=\"https://github.com/typestring\"\u003e\u003ccode\u003e@​typestring\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper has a new, optional \u003ccode\u003ebytes_encoder\u003c/code\u003e argument that accepts a \u003ccode\u003eCallable[[bytes], Any]\u003c/code\u003e method. This enables the use of custom encoding logic when serializing \u003ccode\u003ebytes\u003c/code\u003e values. When this argument is unspecified, \u003ccode\u003ebytes\u003c/code\u003e values will continue to be encoded into Base64URL (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.6.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe new \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper can be used to simplify registration and authentication options into a simple \u003ccode\u003eDict[str, Any]\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.5.3\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMore X.509 validation exceptions will include the cause of the exception as reported by the third-party library handling the validation (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/255\"\u003e#255\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/duo-labs/py_webauthn/commit/91afa1f64390b165fa83651709fb5160a4545100\"\u003e\u003ccode\u003e91afa1f\u003c/code\u003e\u003c/a\u003e Update CHANGELOG for v2.7.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/6ea6638ef63c978e8afc9a40edfdaa8c92232635\"\u003e\u003ccode\u003e6ea6638\u003c/code\u003e\u003c/a\u003e Bump version to v2.7.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/6e6d9b34dfb39ac1f8b008c4bb827f9d06fdf616\"\u003e\u003ccode\u003e6e6d9b3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/issues/264\"\u003e#264\u003c/a\u003e from duo-labs/revert-pqc-alpha-work\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/2be3e050e5eff825743206251a2ea3fafd19c63f\"\u003e\u003ccode\u003e2be3e05\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Add ML-DSA unit tests\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/a82574640ab8fffd3709c078391b26af2d9f84c2\"\u003e\u003ccode\u003ea825746\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Update CHANGELOG for v2.8.0-alpha1\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/953b65a44ca9f139dd49ded67c8922775ef36b8f\"\u003e\u003ccode\u003e953b65a\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Bump version to v2.8.0-alpha1\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/8ebe1b281f639335bd8437c845a48c09526ed3fe\"\u003e\u003ccode\u003e8ebe1b2\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Merge pull request \u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/issues/260\"\u003e#260\u003c/a\u003e from duo-labs/mm/pqc-dilithium-alpha\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/0424e376f07e011535e10ce09a7c225780b0403b\"\u003e\u003ccode\u003e0424e37\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/issues/263\"\u003e#263\u003c/a\u003e from ggirol-rc/pyasn1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/bfdebf41a355394828679a32b6c8f400aa896533\"\u003e\u003ccode\u003ebfdebf4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/issues/262\"\u003e#262\u003c/a\u003e from typestring/dict-type-hints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/a768cd8b71363d7c46f32ec7601d95cd2b53b66a\"\u003e\u003ccode\u003ea768cd8\u003c/code\u003e\u003c/a\u003e move from unmaintained asn1crypto to pyasn1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/duo-labs/py_webauthn/compare/v2.5.2...v2.7.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-auth` from 2.45.0 to 2.52.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-auth-library-python/releases\"\u003egoogle-...\n\n_Description has been truncated_","html_url":"https://github.com/WebbPulse/CarModPicker/pull/115","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/WebbPulse%2FCarModPicker/issues/115","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/115/packages"},{"uuid":"4409576139","node_id":"PR_kwDONrwnDc7ZslCF","number":581,"state":"closed","title":"chore(deps): bump the production group across 1 directory with 52 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":5,"pull_request":true,"closed_at":"2026-05-29T23:35:55.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-08T21:42:28.000Z","updated_at":"2026-05-29T23:35:57.000Z","time_to_close":1821207,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"production","update_count":52,"packages":[{"name":"anyio","old_version":"4.9.0","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"build","old_version":"1.2.2.post1","new_version":"1.5.0","repository_url":"https://github.com/pypa/build"},{"name":"certifi","old_version":"2025.1.31","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"charset-normalizer","old_version":"3.4.1","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.1.8","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"cryptography","old_version":"46.0.7","new_version":"48.0.0","repository_url":"https://github.com/pyca/cryptography"},{"name":"dnspython","old_version":"2.7.0","new_version":"2.8.0","repository_url":"https://github.com/rthalley/dnspython"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"exceptiongroup","old_version":"1.2.2","new_version":"1.3.1","repository_url":"https://github.com/agronholm/exceptiongroup"},{"name":"fastapi","old_version":"0.120.3","new_version":"0.136.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"fastapi-cli","old_version":"0.0.7","new_version":"0.0.24","repository_url":"https://github.com/fastapi/fastapi-cli"},{"name":"fastapi-keycloak-middleware","old_version":"1.2.0","new_version":"1.6.0"},{"name":"greenlet","old_version":"3.1.1","new_version":"3.5.0","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"httptools","old_version":"0.6.4","new_version":"0.7.1","repository_url":"https://github.com/MagicStack/httptools"},{"name":"idna","old_version":"3.10","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"iniconfig","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/pytest-dev/iniconfig"},{"name":"jwcrypto","old_version":"1.5.6","new_version":"1.5.7","repository_url":"https://github.com/latchset/jwcrypto"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"packaging","old_version":"24.2","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pluggy","old_version":"1.5.0","new_version":"1.6.0","repository_url":"https://github.com/pytest-dev/pluggy"},{"name":"psycopg2-binary","old_version":"2.9.10","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pycparser","old_version":"2.22","new_version":"3.0","repository_url":"https://github.com/eliben/pycparser"},{"name":"pydantic","old_version":"2.11.2","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-core","old_version":"2.33.1","new_version":"2.46.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pytest-asyncio","old_version":"0.15.1","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"python-multipart","old_version":"0.0.26","new_version":"0.0.27","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.33.0","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"rfc3986","old_version":"1.5.0","new_version":"2.0.0","repository_url":"https://github.com/python-hyper/rfc3986"},{"name":"rich","old_version":"14.0.0","new_version":"15.0.0","repository_url":"https://github.com/Textualize/rich"},{"name":"rich-toolkit","old_version":"0.14.1","new_version":"0.19.7"},{"name":"sqlalchemy","old_version":"2.0.40","new_version":"2.0.49","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"sqlmodel","old_version":"0.0.22","new_version":"0.0.38","repository_url":"https://github.com/fastapi/sqlmodel"},{"name":"starlette","old_version":"0.49.1","new_version":"1.0.0","repository_url":"https://github.com/Kludex/starlette"},{"name":"tomli","old_version":"2.0.1","new_version":"2.4.1","repository_url":"https://github.com/hukkin/tomli"},{"name":"typer","old_version":"0.15.2","new_version":"0.25.1","repository_url":"https://github.com/fastapi/typer"},{"name":"typing-extensions","old_version":"4.13.1","new_version":"4.15.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.30.6","new_version":"0.46.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"uvloop","old_version":"0.21.0","new_version":"0.22.1","repository_url":"https://github.com/MagicStack/uvloop"},{"name":"watchfiles","old_version":"1.0.4","new_version":"1.1.1","repository_url":"https://github.com/samuelcolvin/watchfiles"},{"name":"websockets","old_version":"14.2","new_version":"16.0","repository_url":"https://github.com/python-websockets/websockets"},{"name":"jsonschema","old_version":"4.25.1","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"attrs","old_version":"25.3.0","new_version":"26.1.0","repository_url":"https://github.com/python-attrs/attrs"},{"name":"cached-property","old_version":"1.5.2","new_version":"2.0.1","repository_url":"https://github.com/pydanny/cached-property"},{"name":"filelock","old_version":"3.20.3","new_version":"3.29.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"httpx","old_version":"0.26.0","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"python-keycloak","old_version":"4.7.3","new_version":"7.1.1","repository_url":"https://github.com/marcospereirampj/python-keycloak"},{"name":"referencing","old_version":"0.36.2","new_version":"0.37.0","repository_url":"https://github.com/python-jsonschema/referencing"},{"name":"rpds-py","old_version":"0.27.1","new_version":"0.30.0","repository_url":"https://github.com/crate-py/rpds"},{"name":"typing-inspection","old_version":"0.4.1","new_version":"0.4.2","repository_url":"https://github.com/pydantic/typing-inspection"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production group with 52 updates in the /ichub-backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.9.0` | `4.13.0` |\n| [build](https://github.com/pypa/build) | `1.2.2.post1` | `1.5.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2025.1.31` | `2026.4.22` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.1` | `3.4.7` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.3.3` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.7` | `48.0.0` |\n| [dnspython](https://github.com/rthalley/dnspython) | `2.7.0` | `2.8.0` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [exceptiongroup](https://github.com/agronholm/exceptiongroup) | `1.2.2` | `1.3.1` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.120.3` | `0.136.1` |\n| [fastapi-cli](https://github.com/fastapi/fastapi-cli) | `0.0.7` | `0.0.24` |\n| fastapi-keycloak-middleware | `1.2.0` | `1.6.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.1.1` | `3.5.0` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.6.4` | `0.7.1` |\n| [idna](https://github.com/kjd/idna) | `3.10` | `3.13` |\n| [iniconfig](https://github.com/pytest-dev/iniconfig) | `2.1.0` | `2.3.0` |\n| [jwcrypto](https://github.com/latchset/jwcrypto) | `1.5.6` | `1.5.7` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.2.0` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [packaging](https://github.com/pypa/packaging) | `24.2` | `26.2` |\n| [pluggy](https://github.com/pytest-dev/pluggy) | `1.5.0` | `1.6.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.10` | `2.9.12` |\n| [pycparser](https://github.com/eliben/pycparser) | `2.22` | `3.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.11.2` | `2.13.4` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.33.1` | `2.46.4` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.15.1` | `1.3.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.26` | `0.0.27` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.33.1` |\n| [rfc3986](https://github.com/python-hyper/rfc3986) | `1.5.0` | `2.0.0` |\n| [rich](https://github.com/Textualize/rich) | `14.0.0` | `15.0.0` |\n| rich-toolkit | `0.14.1` | `0.19.7` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.40` | `2.0.49` |\n| [sqlmodel](https://github.com/fastapi/sqlmodel) | `0.0.22` | `0.0.38` |\n| [starlette](https://github.com/Kludex/starlette) | `0.49.1` | `1.0.0` |\n| [tomli](https://github.com/hukkin/tomli) | `2.0.1` | `2.4.1` |\n| [typer](https://github.com/fastapi/typer) | `0.15.2` | `0.25.1` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.13.1` | `4.15.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.30.6` | `0.46.0` |\n| [uvloop](https://github.com/MagicStack/uvloop) | `0.21.0` | `0.22.1` |\n| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.0.4` | `1.1.1` |\n| [websockets](https://github.com/python-websockets/websockets) | `14.2` | `16.0` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.25.1` | `4.26.0` |\n| [attrs](https://github.com/python-attrs/attrs) | `25.3.0` | `26.1.0` |\n| [cached-property](https://github.com/pydanny/cached-property) | `1.5.2` | `2.0.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.20.3` | `3.29.0` |\n| [httpx](https://github.com/encode/httpx) | `0.26.0` | `0.28.1` |\n| [python-keycloak](https://github.com/marcospereirampj/python-keycloak) | `4.7.3` | `7.1.1` |\n| [referencing](https://github.com/python-jsonschema/referencing) | `0.36.2` | `0.37.0` |\n| [rpds-py](https://github.com/crate-py/rpds) | `0.27.1` | `0.30.0` |\n| [typing-inspection](https://github.com/pydantic/typing-inspection) | `0.4.1` | `0.4.2` |\n\n\nUpdates `anyio` from 4.9.0 to 4.13.0\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.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003ettl\u003c/code\u003e parameter to the \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e wrapper (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1073\"\u003e#1073\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWidened the type annotations of file I/O streams to accept \u003ccode\u003eIO[bytes]\u003c/code\u003e instead of just \u003ccode\u003eBinaryIO\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.Path\u003c/code\u003e not being compatible with Python 3.15 due to the removal of \u003ccode\u003epathlib.Path.is_reserved()\u003c/code\u003e and the addition of \u003ccode\u003epathlib.Path.__vfspath__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1061\"\u003e#1061\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eBrokenResourceError\u003c/code\u003e raised by the asyncio \u003ccode\u003eSocketStream\u003c/code\u003e not having the original exception as its cause (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1055\"\u003e#1055\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eTypeError\u003c/code\u003e raised when using \u0026quot;func\u0026quot; as a parameter name in \u003ccode\u003epytest.mark.parametrize\u003c/code\u003e when using the pytest plugin (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1068\"\u003e#1068\u003c/a\u003e; PR by \u003ca href=\"https://github.com/JohnnyDeuss\"\u003e\u003ccode\u003e@​JohnnyDeuss\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the pytest plugin not running tests that had the \u003ccode\u003eanyio\u003c/code\u003e marker added programmatically via \u003ccode\u003epytest_collection_modifyitems\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/422\"\u003e#422\u003c/a\u003e; PR by \u003ca href=\"https://github.com/chbndrhnns\"\u003e\u003ccode\u003e@​chbndrhnns\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when they are contained in an exception group alongside non-cancellation exceptions (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1091\"\u003e#1091\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCondition.wait()\u003c/code\u003e not passing on a notification when the task is cancelled but already received a notification\u003c/li\u003e\n\u003cli\u003eFixed inverted condition in the process pool shutdown phase which would cause still-running pooled processes not to be terminated (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1074\"\u003e#1074\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged all functions currently raising the private \u003ccode\u003eNoCurrentAsyncBackend\u003c/code\u003e exception (since v4.12.0) to instead raise the public \u003ccode\u003eNoEventLoopError\u003c/code\u003e exception (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1048\"\u003e#1048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e not working with instance methods (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1042\"\u003e#1042\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for asyncio's \u003ca href=\"https://docs.python.org/3/library/asyncio-graph.html\"\u003etask call graphs\u003c/a\u003e on Python 3.14 and later when using AnyIO's task groups (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1025\"\u003e#1025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded an asynchronous implementation of the \u003ccode\u003efunctools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1001\"\u003e#1001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003euvloop=True\u003c/code\u003e on Windows via the \u003ca href=\"https://github.com/Vizonex/Winloop\"\u003ewinloop\u003c/a\u003e implementation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/960\"\u003e#960\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for use as a context manager to \u003ccode\u003eanyio.lowlevel.RunVar\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1003\"\u003e#1003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003e__all__\u003c/code\u003e declarations to public submodules (\u003ccode\u003eanyio.lowlevel\u003c/code\u003e etc.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1009\"\u003e#1009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the ability to set the token count of a \u003ccode\u003eCapacityLimiter\u003c/code\u003e to zero (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1019\"\u003e#1019\u003c/a\u003e; requires Python 3.10 or later when using Trio)\u003c/li\u003e\n\u003cli\u003eAdded parameters \u003ccode\u003ecase_sensitive\u003c/code\u003e and \u003ccode\u003erecurse_symlinks\u003c/code\u003e along with support for path-like objects to \u003ccode\u003eanyio.Path.glob()\u003c/code\u003e and \u003ccode\u003eanyio.Path.rglob()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1033\"\u003e#1033\u003c/a\u003e; PR by \u003ca href=\"https://github.com/northisup\"\u003e\u003ccode\u003e@​northisup\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped \u003ccode\u003esniffio\u003c/code\u003e as a direct dependency and added the \u003ccode\u003eget_available_backends()\u003c/code\u003e function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1021\"\u003e#1021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not raising \u003ccode\u003eClosedResourceError\u003c/code\u003e and \u003ccode\u003eBrokenResourceError\u003c/code\u003e on asyncio. Previously, a non-AnyIO exception was raised in such cases (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not checkpointing before writing data on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1002\"\u003e#1002\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a race condition where cancelling a \u003ccode\u003eFuture\u003c/code\u003e from \u003ccode\u003eBlockingPortal.start_task_soon()\u003c/code\u003e would sometimes not cancel the async function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1011\"\u003e#1011\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the presence of the pytest plugin causing breakage with older versions of pytest (\u0026lt;= 6.1.2) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1028\"\u003e#1028\u003c/a\u003e; PR by \u003ca href=\"https://github.com/saper\"\u003e\u003ccode\u003e@​saper\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a rarely occurring \u003ccode\u003eRuntimeError: Set changed size during iteration\u003c/code\u003e while shutting down the process pool when using the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/985\"\u003e#985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for cancellation reasons (the \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003eCancelScope.cancel()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum version of Trio to v0.31.0\u003c/li\u003e\n\u003cli\u003eAdded the ability to enter the event loop from foreign (non-worker) threads by passing the return value of \u003ccode\u003eanyio.lowlevel.current_token()\u003c/code\u003e to \u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e and \u003ccode\u003eanyio.from_thread.run_sync()\u003c/code\u003e as the \u003ccode\u003etoken\u003c/code\u003e keyword argument (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded pytest option (\u003ccode\u003eanyio_mode = \u0026quot;auto\u0026quot;\u003c/code\u003e) to make the pytest plugin automatically handle all async tests (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the \u003ccode\u003eanyio.Condition.wait_for()\u003c/code\u003e method for feature parity with asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the default type argument of \u003ccode\u003eanyio.abc.TaskStatus\u003c/code\u003e from \u003ccode\u003eAny\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/964\"\u003e#964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed TCP listener behavior to guarantee the same ephemeral port is used for all socket listeners when \u003ccode\u003elocal_port=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/857\"\u003e#857\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed inconsistency between Trio and asyncio where a TCP stream that previously raised a \u003ccode\u003eBrokenResourceError\u003c/code\u003e on \u003ccode\u003esend()\u003c/code\u003e would still raise \u003ccode\u003eBrokenResourceError\u003c/code\u003e after the stream was closed on asyncio, but \u003ccode\u003eClosedResourceError\u003c/code\u003e on Trio. They now both raise a \u003ccode\u003eClosedResourceError\u003c/code\u003e in this scenario. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.10.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003efeed_data()\u003c/code\u003e method to the \u003ccode\u003eBufferedByteReceiveStream\u003c/code\u003e class, allowing users to inject data directly into the buffer\u003c/li\u003e\n\u003cli\u003eAdded various class methods to wrap existing sockets as listeners or socket streams:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSocketListener.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eConnectedUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXDatagramSocket.from_socket()\u003c/code\u003e\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/agronholm/anyio/commit/afbe93ca9d0c447adf26e9c1715ac20870622bf2\"\u003e\u003ccode\u003eafbe93c\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/33bdf2e4b4f40c2df178123746147a6d2471808d\"\u003e\u003ccode\u003e33bdf2e\u003c/code\u003e\u003c/a\u003e Rearranged the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/19e09e25bc5a23dd78a577d8c3909dd377057c78\"\u003e\u003ccode\u003e19e09e2\u003c/code\u003e\u003c/a\u003e Fixed inverted condition in _forcibly_shutdown_process_pool_on_exit (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9369d80b9e8292f2a892a9d5c73923c6a28aa08c\"\u003e\u003ccode\u003e9369d80\u003c/code\u003e\u003c/a\u003e Fixed Condition.wait() not handing over notification when cancelled\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f122abdc6f6b166c6b6ac27d36d55cdf8fa08e8\"\u003e\u003ccode\u003e6f122ab\u003c/code\u003e\u003c/a\u003e Fixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/beaa45aff568a4020f2faf317321dd92f0e1f4a0\"\u003e\u003ccode\u003ebeaa45a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1097\"\u003e#1097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/602f6606dcf3f37702686a4f3e161328c537b07f\"\u003e\u003ccode\u003e602f660\u003c/code\u003e\u003c/a\u003e Widened type annotations to accept IO[bytes] in file streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b5dcd45170701a756ba634197398f05d4710cab3\"\u003e\u003ccode\u003eb5dcd45\u003c/code\u003e\u003c/a\u003e Added note about erasing the template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d68670b3b4e0917d4caff2de082e03220f3e05a1\"\u003e\u003ccode\u003ed68670b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/fc17a22dd948e6a3d90d99908813f0010dfc3d2c\"\u003e\u003ccode\u003efc17a22\u003c/code\u003e\u003c/a\u003e tweak to_thread docs about abandon_on_cancel (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1088\"\u003e#1088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.9.0...4.13.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.2.2.post1 to 1.5.0\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.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eci: try to improve release docs 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/1051\"\u003epypa/build#1051\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: drop 3.9, require 3.10+ 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/1036\"\u003epypa/build#1036\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: tox toml 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/1033\"\u003epypa/build#1033\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: api should not ignore installed, only 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/1056\"\u003epypa/build#1056\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/build/compare/1.4.4...1.5.0\"\u003ehttps://github.com/pypa/build/compare/1.4.4...1.5.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.4.4\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(release): generate consistent CHANGELOG heading levels 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/1032\"\u003epypa/build#1032\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: move source links 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/1034\"\u003epypa/build#1034\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erevert: drop PEP 660 change 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/1039\"\u003epypa/build#1039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: ignore installed when running pip 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/1040\"\u003epypa/build#1040\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: revert part of \u003ca href=\"https://redirect.github.com/pypa/build/issues/973\"\u003e#973\u003c/a\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/build/pull/1044\"\u003epypa/build#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: report coverage failure lines 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/1046\"\u003epypa/build#1046\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: fix issue with uv run 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/1048\"\u003epypa/build#1048\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: reorganize testing docs for copy/paste by \u003ca href=\"https://github.com/abitrolly\"\u003e\u003ccode\u003e@​abitrolly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1043\"\u003epypa/build#1043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: keep environment from leaking in Python 3.15 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/1049\"\u003epypa/build#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix issue with changelog generation 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/1050\"\u003epypa/build#1050\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/build/compare/1.4.3...1.4.4\"\u003ehttps://github.com/pypa/build/compare/1.4.3...1.4.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.4.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(api): resolve thread-safety races in build API 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/1015\"\u003epypa/build#1015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(builder): validate backend-path entries exist on disk 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/1016\"\u003epypa/build#1016\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings build paths 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/992\"\u003epypa/build#992\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd kind=(step, ) for root messages with * by \u003ca href=\"https://github.com/abitrolly\"\u003e\u003ccode\u003e@​abitrolly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/973\"\u003epypa/build#973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: correct changelog category ordering 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/1017\"\u003epypa/build#1017\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): show full dependency chain 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/1019\"\u003epypa/build#1019\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: fully annotate 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/1020\"\u003epypa/build#1020\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: lazy imports 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/1021\"\u003epypa/build#1021\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: adding more ruff codes 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/1022\"\u003epypa/build#1022\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: improve annotations 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/1023\"\u003epypa/build#1023\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test(coverage): achieve 100% test coverage 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/1018\"\u003epypa/build#1018\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff PT 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/1025\"\u003epypa/build#1025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff PYI 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/1026\"\u003epypa/build#1026\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff SIM/RET 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/1028\"\u003epypa/build#1028\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): strip PYTHONPATH from isolated builds 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/1024\"\u003epypa/build#1024\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: use ruff ALL 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/1029\"\u003epypa/build#1029\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.0 (2026-04-30)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Python 3.9 support - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1036\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\u003eMake \u003ccode\u003e--ignore-installed\u003c/code\u003e opt-in from the API via \u003ccode\u003efresh=True\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1056\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eMiscellaneous\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e:issue:\u003ccode\u003e1033\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e####################\n1.4.4 (2026-04-22)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eFix release pipeline generating \u003ccode\u003eCHANGELOG.rst\u003c/code\u003e entries with inconsistent heading levels, which broke \u003ccode\u003esphinx -W\u003c/code\u003e\nand pinned Read the Docs \u003ccode\u003estable\u003c/code\u003e at 1.4.0 - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e. (:issue:\u003ccode\u003e1031\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRevert :pr:\u003ccode\u003e1039\u003c/code\u003e from build 1.4.3, no longer check direct_url (for now) - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1039\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--ignore-installed\u003c/code\u003e to pip install command to prevent issues with packages already present in the isolated\nbuild environment - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1037\u003c/code\u003e) (:issue:\u003ccode\u003e1040\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePartial revert of :pr:\u003ccode\u003e973\u003c/code\u003e, keeping log messages in one entry, multiple lines. (:issue:\u003ccode\u003e1044\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eMiscellaneous\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e:issue:\u003ccode\u003e1048\u003c/code\u003e, :issue:\u003ccode\u003e1049\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e####################\n1.4.3 (2026-04-10)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\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/615d04cfc52ac3c1592a463f0afe484fee1cc368\"\u003e\u003ccode\u003e615d04c\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/776f702f84787525df62a5473dd13d4e2f45b977\"\u003e\u003ccode\u003e776f702\u003c/code\u003e\u003c/a\u003e fix: api should not ignore installed, only CLI (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1056\"\u003e#1056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/42da4c4b483563819fabdb8ecf2f6df53ed82123\"\u003e\u003ccode\u003e42da4c4\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1055\"\u003e#1055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/b445cd2e736db5f80cde7d952d620a73cc26bf9d\"\u003e\u003ccode\u003eb445cd2\u003c/code\u003e\u003c/a\u003e chore: tox toml (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1033\"\u003e#1033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/c44c143876042ac6e1212a31684a3adca19beda4\"\u003e\u003ccode\u003ec44c143\u003c/code\u003e\u003c/a\u003e feat: drop 3.9, require 3.10+ (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/a9bb4560d213069b11c8068159f1de060abec5b7\"\u003e\u003ccode\u003ea9bb456\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 in the actions group...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/cb3351155ce99902580022acb81dc0adb8124d53\"\u003e\u003ccode\u003ecb33511\u003c/code\u003e\u003c/a\u003e ci: try to improve release docs (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1051\"\u003e#1051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/70666a296c2e5bb7451f5a04eef259f6f943d0de\"\u003e\u003ccode\u003e70666a2\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.4.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/653d86586dea8b4e020086a276a15a27ac7bd25d\"\u003e\u003ccode\u003e653d865\u003c/code\u003e\u003c/a\u003e docs: fix issue with changelog generation (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/373b9ee171e2f16353365b1a9a02bc408b96ca73\"\u003e\u003ccode\u003e373b9ee\u003c/code\u003e\u003c/a\u003e tests: keep environment from leaking in Python 3.15 (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.2.2.post1...1.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2025.1.31 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/8571a4ba5205675107f9026d0008ad2d7a2778bf\"\u003e\u003ccode\u003e8571a4b\u003c/code\u003e\u003c/a\u003e 2026.02.25 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/395\"\u003e#395\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6f7de00579d292af565bbb8a947643219794eb6d\"\u003e\u003ccode\u003e6f7de00\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/390\"\u003e#390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a1de59b15105cad768afed4f066b36171134f04a\"\u003e\u003ccode\u003ea1de59b\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.1 to 6.0.2 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/391\"\u003e#391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2025.01.31...2026.04.22\"\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.1 to 3.4.7\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.7\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003cbr /\u003e\nmypyc changed the usual binary output for the optimized wheel. Beware, especially if using PyInstaller or alike. See \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/714\"\u003ejawah/charset_normalizer#714\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eVersion 3.4.4\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.3...3.4.4\"\u003e3.4.4\u003c/a\u003e (2025-10-13)\u003c/h2\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/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.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.4\"\u003e3.4.4\u003c/a\u003e (2025-10-13)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBound \u003ccode\u003esetuptools\u003c/code\u003e to a specific constraint \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=81\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.18.2\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esetuptools-scm\u003c/code\u003e as a build dependency.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\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/jawah/charset_normalizer/commit/0f07891bf516b5d5231f1bd4dd2d8da7d4d09a9a\"\u003e\u003ccode\u003e0f07891\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/729\"\u003e#729\u003c/a\u003e from jawah/release-3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fdbeb299479e8f4d737e4d227cd0b2bd5d273dc0\"\u003e\u003ccode\u003efdbeb29\u003c/code\u003e\u003c/a\u003e chore: update dev, and ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b66f922bfbdbdd9dd46af18a8964d4fb888756d4\"\u003e\u003ccode\u003eb66f922\u003c/code\u003e\u003c/a\u003e chore: add ft classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/f94249d0a2c712f2d03124f4de6b77f5e03aaa96\"\u003e\u003ccode\u003ef94249d\u003c/code\u003e\u003c/a\u003e chore: add test cases for utf_7 recent fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/95c866f6c984bbd043e7e3ed0628aa4f3f8d5a26\"\u003e\u003ccode\u003e95c866f\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/4f429bb764c7e893f99bb4bceb60856da1baacfb\"\u003e\u003ccode\u003e4f429bb\u003c/code\u003e\u003c/a\u003e chore: bump mypy pre-commit to v1.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b579cd6cab9bd83aa3fc0ca169d4df022bf4888c\"\u003e\u003ccode\u003eb579cd6\u003c/code\u003e\u003c/a\u003e fix: correctly remove SIG remnant in utf-7 decoded string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/58bf944a77cc0883fc46a6ee8edac3549fea5d59\"\u003e\u003ccode\u003e58bf944\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump github/codeql-action from 4.32.4 to 4.35.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/44cf8a1b676a2532a8f1694e62e4f4f98f9132e1\"\u003e\u003ccode\u003e44cf8a1\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/362bc20073f737b1ba4ca2f68cffb0c4cc024d20\"\u003e\u003ccode\u003e362bc20\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump docker/setup-qemu-action from 3.7.0 to 4.0.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.1...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.1.8 to 8.3.3\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.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 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.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3262\"\u003e#3262\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3280\"\u003e#3280\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3111\"\u003e#3111\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3189\"\u003e#3189\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3250\"\u003e#3250\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2865\"\u003e#2865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2879\"\u003e#2879\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.3.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.2 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.3.2/\"\u003ehttps://pypi.org/project/click/8.3.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/29\"\u003ehttps://github.com/pallets/click/milestone/29\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.3.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-20\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n:issue:\u003ccode\u003e1026\u003c/code\u003e :pr:\u003ccode\u003e1477\u003c/code\u003e :pr:\u003ccode\u003e2775\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. :issue:\u003ccode\u003e3298\u003c/code\u003e :pr:\u003ccode\u003e3299\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. :pr:\u003ccode\u003e3238\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n:issue:\u003ccode\u003e3224\u003c/code\u003e :pr:\u003ccode\u003e3240\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n:issue:\u003ccode\u003e654\u003c/code\u003e :issue:\u003ccode\u003e824\u003c/code\u003e :issue:\u003ccode\u003e843\u003c/code\u003e :pr:\u003ccode\u003e951\u003c/code\u003e :pr:\u003ccode\u003e3235\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. :pr:\u003ccode\u003e3151\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. :pr:\u003ccode\u003e3151\u003c/code\u003e :pr:\u003ccode\u003e3177\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. :issue:\u003ccode\u003e2836\u003c/code\u003e :pr:\u003ccode\u003e2837\u003c/code\u003e :pr:\u003ccode\u003e3165\u003c/code\u003e :pr:\u003ccode\u003e3262\u003c/code\u003e :pr:\u003ccode\u003e3280\u003c/code\u003e\n:pr:\u003ccode\u003e3328\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. :issue:\u003ccode\u003e3111\u003c/code\u003e :pr:\u003ccode\u003e3239\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. :issue:\u003ccode\u003e3189\u003c/code\u003e :pr:\u003ccode\u003e3250\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n:issue:\u003ccode\u003e2865\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. :issue:\u003ccode\u003e2879\u003c/code\u003e :pr:\u003ccode\u003e3248\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.3.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. :issue:\u003ccode\u003e3084\u003c/code\u003e :pr:\u003ccode\u003e3152\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n:issue:\u003ccode\u003e3136\u003c/code\u003e :pr:\u003ccode\u003e3199\u003c/code\u003e :pr:\u003ccode\u003e3202\u003c/code\u003e :pr:\u003ccode\u003e3209\u003c/code\u003e :pr:\u003ccode\u003e3212\u003c/code\u003e :pr:\u003ccode\u003e3224\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/pallets/click/commit/c06d2d0a6aee6bcc50bd8257be2a4a592f4e75d0\"\u003e\u003ccode\u003ec06d2d0\u003c/code\u003e\u003c/a\u003e Release 8.3.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f1f191ecd2c790b161187c78e7c88440e9524e5c\"\u003e\u003ccode\u003ef1f191e\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3343\"\u003e#3343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bb59ba0fd279ca085d1113f0499b6a602ca31081\"\u003e\u003ccode\u003ebb59ba0\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/4a352253c9ff013e36d11e4a6820d36d00ff2cd4\"\u003e\u003ccode\u003e4a35225\u003c/code\u003e\u003c/a\u003e Reduce blast-radius of \u003ccode\u003eUNSET\u003c/code\u003e in \u003ccode\u003edefault_map\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c07bb936de43fd303f9cfbefe248ab23fd2199c8\"\u003e\u003ccode\u003ec07bb93\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into unset-in-default-map\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c7e1ba8448cbcb2cdd9c1c7f4a592e863dcc3995\"\u003e\u003ccode\u003ec7e1ba8\u003c/code\u003e\u003c/a\u003e Reorder \u003ccode\u003eParameterSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/76552ff1e8c85837f911fc34037e702ae4327eda\"\u003e\u003ccode\u003e76552ff\u003c/code\u003e\u003c/a\u003e Show default string in prompt (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/ac5cec5fe54e5a691e7bac17f441ce9498e0744c\"\u003e\u003ccode\u003eac5cec5\u003c/code\u003e\u003c/a\u003e Reorder ParameterSource from most to least explicit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c452e00e6772931b7071d9316b82b77e5b8f280\"\u003e\u003ccode\u003e8c452e0\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into show-default-string-in-prompt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c95c73bd5ef89eac638f85f1904a104ba4b1a32\"\u003e\u003ccode\u003e8c95c73\u003c/code\u003e\u003c/a\u003e Reconcile default value passing and default activation (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.1.8...8.3.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 46.0.7 to 48.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e48.0.0 - 2026-05-04\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **BACKWARDS INCOMPATIBLE:** Support for Python 3.8 has been removed.\n  ``cryptography`` now requires Python 3.9 or later.\n* **BACKWARDS INCOMPATIBLE:** Loading an X.509 CRL whose inner\n  ``TBSCertList.signature`` algorithm does not match the outer\n  ``signatureAlgorithm`` now raises ``ValueError``. Previously, such CRLs\n  were parsed successfully and only rejected during signature validation.\n* Added support for :doc:`/hazmat/primitives/asymmetric/mlkem` and\n  :doc:`/hazmat/primitives/asymmetric/mldsa` when using OpenSSL 3.5.0 or\n  later, in addition to the existing AWS-LC and BoringSSL support. This means\n  post-quantum algorithms are now available to users of our wheels.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNote:\u003c/strong\u003e Going forward, we do not guarantee that all functionality\u003cbr /\u003e\nin \u003ccode\u003ecryptography\u003c/code\u003e will be available when building against\u003cbr /\u003e\nOpenSSL. See :doc:\u003ccode\u003e/statements/state-of-openssl\u003c/code\u003e for more information.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v47-0-0:\u003c/p\u003e\n\u003cp\u003e47.0.0 - 2026-04-24\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.8 is deprecated and will be removed in the next\n\u003ccode\u003ecryptography\u003c/code\u003e release.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Support for binary elliptic curves\n(\u003ccode\u003eSECT*\u003c/code\u003e classes) has been removed. These curves are rarely used and\nhave additional security considerations that make them undesirable.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Support for OpenSSL 1.1.x has been removed.\nOpenSSL 3.0.0 or later is now required. LibreSSL, BoringSSL, and AWS-LC\ncontinue to be supported.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Dropped support for LibreSSL \u0026lt; 4.1.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Loading keys with unsupported algorithms or\nkeys with unsupported explicit curve encodings now raises\n:class:\u003ccode\u003e~cryptography.exceptions.UnsupportedAlgorithm\u003c/code\u003e instead of\n\u003ccode\u003eValueError\u003c/code\u003e. This change affects\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_pem_private_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_der_private_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_pem_public_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_der_public_key\u003c/code\u003e,\nand :meth:\u003ccode\u003e~cryptography.x509.Certificate.public_key\u003c/code\u003e when called on\ncertificates with unsupported public key algorithms.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e When parsing elliptic curve private keys, we now\nreject keys that incorrectly encode a private key of the wrong length because\nsuch keys are impossible to process in a constant-time manner. We do not\nbelieve keys with this problem are in wide use, however we may revert this\nchange based on the feedback we receive.\u003c/li\u003e\n\u003cli\u003eDeprecated passing 64-bit (8-byte) and 128-bit (16-byte) keys to\n:class:\u003ccode\u003e~cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES\u003c/code\u003e. In a\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/cryptography/commit/8e03e30e3aae01632a697e903e3593c924f0139d\"\u003e\u003ccode\u003e8e03e30\u003c/code\u003e\u003c/a\u003e bump for 48.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14796\"\u003e#14796\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/295e0d254ef31ab864730aa41312ec355416ee71\"\u003e\u003ccode\u003e295e0d2\u003c/code\u003e\u003c/a\u003e Add AGENTS.md with CLAUDE.md symlink (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14794\"\u003e#14794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/104a2de19e268a433e6da92be9cb872dcf0003c8\"\u003e\u003ccode\u003e104a2de\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14793\"\u003e#14793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67ec1e51988195e17993d2edef5258b27509b926\"\u003e\u003ccode\u003e67ec1e5\u003c/code\u003e\u003c/a\u003e call check_length early on AesSiv::encrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14792\"\u003e#14792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/b2da57a0d9e4bfd2b95364299091a18f74127b26\"\u003e\u003ccode\u003eb2da57a\u003c/code\u003e\u003c/a\u003e changelog for mldsa/mlkem for openssl (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14791\"\u003e#14791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/3cf44adee25c368d4a136e072fa9f80465d91eb0\"\u003e\u003ccode\u003e3cf44ad\u003c/code\u003e\u003c/a\u003e ML-KEM OpenSSL support (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14781\"\u003e#14781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2e31639666766f846fbab2c605879db0fa64fe83\"\u003e\u003ccode\u003e2e31639\u003c/code\u003e\u003c/a\u003e ML-DSA OpenSSL support (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14773\"\u003e#14773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/5affe5a286a986fdf512c4a5cb280d28a96c10e3\"\u003e\u003ccode\u003e5affe5a\u003c/code\u003e\u003c/a\u003e fix rust nightly clippy (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14790\"\u003e#14790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2e73ca448eaf64b6f0d4ffbb794cf96170cef5ec\"\u003e\u003ccode\u003e2e73ca4\u003c/code\u003e\u003c/a\u003e bump rust-openssl dep and update EcPoint::mul_generator to mul_generator2 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/82ebd3b9f49d49ad5fd8b4b1f1dd02487b6e1466\"\u003e\u003ccode\u003e82ebd3b\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14785\"\u003e#14785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.7...48.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `dnspython` from 2.7.0 to 2.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/rthalley/dnspython/releases\"\u003ednspython's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ednspython 2.8.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://dnspython.readthedocs.io/en/stable/whatsnew.html\"\u003eWhat's New\u003c/a\u003e for details.\u003c/p\u003e\n\u003cp\u003eThe minimum supported version of Python is 3.10.\u003c/p\u003e\n\u003cp\u003eMy thanks to the many people who have contributed to this release. Also thanks to my co-maintainers: Tomáš Křížek, Petr Špaček, and Brian Wellington.\u003c/p\u003e\n\u003cp\u003eThis release was published to PyPI using Trusted Publishing.\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/rthalley/dnspython/blob/main/doc/whatsnew.rst\"\u003ednspython's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.8.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003edns/btreezone.py provides another zone versioned implementation built on top of a\nB-tree.  It maintains DNSSEC sort order, labels nodes as delegation points or glue,\nand can find the \u0026quot;bounds\u0026quot; of a name (useful for DNSSEC responses).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003edns/query.py now provides make_socket(), make_ssl_socket(), and make_ssl_context()\nto make using persistent connections with the query code easier.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003edns/win32util.py now supports explicitly setting the configuration method used to get\nsystem dns info, using the set_config_method() function.   There is a new configuration\nmethod that uses the Win32 API, which can be set using\nset_config_method(ConfigMethod.Win32).  We are considering making the Win32 API\nthe default in the future as we believe it to be the most accurate.  Any feedback on\nit compared to the other methods is welcome.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe DSYNC record is now supported.  This type is still in draft stage at the IETF\nand is subject to change.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe minimum supported Python version is now 3.10.\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/rthalley/dnspython/commit/77fd94cd9716faf23e0a6e333f6568fc24284402\"\u003e\u003ccode\u003e77fd94c\u003c/code\u003e\u003c/a\u003e 2.8.0 versioning\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/884f38345a8152342fe8ab5da8db9aab654051ba\"\u003e\u003ccode\u003e884f383\u003c/code\u003e\u003c/a\u003e update 2.8 branch workflows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/1938fe331f97376bf91c028fbfb8c7588c1b84f4\"\u003e\u003ccode\u003e1938fe3\u003c/code\u003e\u003c/a\u003e update 2.8 branch workflows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/a35d6925efe20744e8cf7545d19d03ba06e7ab6f\"\u003e\u003ccode\u003ea35d692\u003c/code\u003e\u003c/a\u003e 2.8.0rc1 prep\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/c862baaf0d0aa36d2e7003dfe226cd6ad4d827c4\"\u003e\u003ccode\u003ec862baa\u003c/code\u003e\u003c/a\u003e 2.8.0rc1 prep\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/0945d5923d58048c17325975f70f0738c87570b4\"\u003e\u003ccode\u003e0945d59\u003c/code\u003e\u003c/a\u003e more lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/8fa6766d2f7a2431372fc912fb334e752290ebf2\"\u003e\u003ccode\u003e8fa6766\u003c/code\u003e\u003c/a\u003e lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/641633503ee6b07bf382594ac04707072b90de18\"\u003e\u003ccode\u003e6416335\u003c/code\u003e\u003c/a\u003e Type syntax (\u003ca href=\"https://redirect.github.com/rthalley/dnspython/issues/1218\"\u003e#1218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/a4591447b7d6e38479bcddb14de3b69f314e7009\"\u003e\u003ccode\u003ea459144\u003c/code\u003e\u003c/a\u003e lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/a0d5f172e89f30709b47b59fb0919d8cf137f611\"\u003e\u003ccode\u003ea0d5f17\u003c/code\u003e\u003c/a\u003e fix the all entries\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/rthalley/dnspython/compare/v2.7.0...v2.8.0\"\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 `exceptiongroup` from 1.2.2 to 1.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/exceptiongroup/releases\"\u003eexceptiongroup's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.3.1\u003c...\n\n_Description has been truncated_","html_url":"https://github.com/eclipse-tractusx/industry-core-hub/pull/581","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-tractusx%2Findustry-core-hub/issues/581","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/581/packages"}],"issue_packages":[{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-24T01:50:20.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4964417245","node_id":"PR_kwDOSuNyS871pZua","number":26,"state":"open","title":"build(deps): Bump the dependencies group across 3 directories with 73 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-24T01:50:20.000Z","updated_at":"2026-07-24T01:50:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","group_name":"dependencies","update_count":73,"packages":[{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"bleach","old_version":"4.1.0","new_version":"6.4.0","repository_url":"https://github.com/mozilla/bleach"},{"name":"blessed","old_version":"1.39.0","new_version":"1.47.0","repository_url":"https://github.com/jquast/blessed"},{"name":"boto3","old_version":"1.43.8","new_version":"1.43.50","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.8","new_version":"1.43.50","repository_url":"https://github.com/boto/botocore"},{"name":"certifi","old_version":"2026.4.22","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"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":"django","old_version":"5.2.14","new_version":"6.0.7","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.18.0","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-filter","old_version":"25.2","new_version":"26.1","repository_url":"https://github.com/carltongibson/django-filter"},{"name":"django-js-asset","old_version":"3.1.2","new_version":"4.0.1","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-maintenance-mode","old_version":"0.22.0","new_version":"0.23.0","repository_url":"https://github.com/fabiocaccamo/django-maintenance-mode"},{"name":"django-markdownify","old_version":"0.9.1","new_version":"0.9.7","repository_url":"https://github.com/erwinmatijsen/django-markdownify"},{"name":"django-money","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/django-money/django-money"},{"name":"django-oauth-toolkit","old_version":"3.2.0","new_version":"3.3.0","repository_url":"https://github.com/django-oauth/django-oauth-toolkit"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"django-redis","old_version":"6.0.0","new_version":"7.0.0","repository_url":"https://github.com/jazzband/django-redis"},{"name":"django-structlog","old_version":"10.0.0","new_version":"10.1.0","repository_url":"https://github.com/jrobichaud/django-structlog"},{"name":"docutils","old_version":"0.22.4","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"dulwich","old_version":"1.2.1","new_version":"1.2.11","repository_url":"https://github.com/dulwich/dulwich"},{"name":"fido2","old_version":"2.2.0","new_version":"2.2.1","repository_url":"https://github.com/Yubico/python-fido2"},{"name":"grpcio","old_version":"1.80.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"icalendar","old_version":"7.1.0","new_version":"7.2.0","repository_url":"https://github.com/collective/icalendar"},{"name":"idna","old_version":"3.15","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"importlib-metadata","old_version":"8.7.1","new_version":"9.0.0","repository_url":"https://github.com/python/importlib_metadata"},{"name":"jwcrypto","old_version":"1.5.7","new_version":"1.5.8","repository_url":"https://github.com/latchset/jwcrypto"},{"name":"lxml","old_version":"6.1.0","new_version":"6.1.1","repository_url":"https://github.com/lxml/lxml"},{"name":"nh3","old_version":"0.3.5","new_version":"0.3.6","repository_url":"https://github.com/messense/nh3"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-dbapi","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.9.6","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"prettytable","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/prettytable/prettytable"},{"name":"protobuf","old_version":"6.33.6","new_version":"7.35.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pypdf","old_version":"6.11.0","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"python-fsutil","old_version":"0.16.1","new_version":"0.17.0","repository_url":"https://github.com/fabiocaccamo/python-fsutil"},{"name":"redis","old_version":"7.4.0","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"rpds-py","old_version":"0.30.0","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"s3transfer","old_version":"0.17.0","new_version":"0.19.1","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.60.0","new_version":"2.66.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"setuptools","old_version":"82.0.1","new_version":"83.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.68.4","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"tzdata","old_version":"2026.2","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"wcwidth","old_version":"0.7.0","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"weasyprint","old_version":"68.1","new_version":"69.0","repository_url":"https://github.com/Kozea/WeasyPrint"},{"name":"wrapt","old_version":"1.17.3","new_version":"2.2.2","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"zipp","old_version":"3.23.1","new_version":"4.1.0","repository_url":"https://github.com/jaraco/zipp"},{"name":"zopfli","old_version":"0.4.1","new_version":"0.4.3","repository_url":"https://github.com/fonttools/py-zopfli"},{"name":"click","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.14.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-stubs","old_version":"6.0.4","new_version":"6.0.7","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.4","new_version":"6.0.7","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"pip","old_version":"26.1.1","new_version":"26.1.2","repository_url":"https://github.com/pypa/pip"},{"name":"prek","old_version":"0.4.0","new_version":"0.4.10","repository_url":"https://github.com/j178/prek"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-codspeed","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"},{"name":"ty","old_version":"0.0.1a21","new_version":"0.0.60","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-psycopg2","old_version":"2.9.21.20260509","new_version":"2.9.21.20260712","repository_url":"https://github.com/python/typeshed"},{"name":"types-pyyaml","old_version":"6.0.12.20260510","new_version":"6.0.12.20260518","repository_url":"https://github.com/python/typeshed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 1 update in the /contrib/dev_reqs directory: [jc](https://github.com/kellyjonbrazil/jc).\nBumps the dependencies group with 2 updates in the /docs directory: [mkdocs-git-revision-date-localized-plugin](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).\nBumps the dependencies group with 70 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [bleach](https://github.com/mozilla/bleach) | `4.1.0` | `6.4.0` |\n| [blessed](https://github.com/jquast/blessed) | `1.39.0` | `1.47.0` |\n| [boto3](https://github.com/boto/boto3) | `1.43.8` | `1.43.50` |\n| [botocore](https://github.com/boto/botocore) | `1.43.8` | `1.43.50` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.4.22` | `2026.6.17` |\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| [django](https://github.com/django/django) | `5.2.14` | `6.0.7` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.18.0` |\n| [django-filter](https://github.com/carltongibson/django-filter) | `25.2` | `26.1` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `3.1.2` | `4.0.1` |\n| [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) | `0.22.0` | `0.23.0` |\n| [django-markdownify](https://github.com/erwinmatijsen/django-markdownify) | `0.9.1` | `0.9.7` |\n| [django-money](https://github.com/django-money/django-money) | `3.6.0` | `3.6.1` |\n| [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) | `3.2.0` | `3.3.0` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [django-redis](https://github.com/jazzband/django-redis) | `6.0.0` | `7.0.0` |\n| [django-structlog](https://github.com/jrobichaud/django-structlog) | `10.0.0` | `10.1.0` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.22.4` | `0.23` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `1.2.1` | `1.2.11` |\n| [fido2](https://github.com/Yubico/python-fido2) | `2.2.0` | `2.2.1` |\n| [grpcio](https://github.com/grpc/grpc) | `1.80.0` | `1.82.1` |\n| [icalendar](https://github.com/collective/icalendar) | `7.1.0` | `7.2.0` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.18` |\n| [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` |\n| [jwcrypto](https://github.com/latchset/jwcrypto) | `1.5.7` | `1.5.8` |\n| [lxml](https://github.com/lxml/lxml) | `6.1.0` | `6.1.1` |\n| [nh3](https://github.com/messense/nh3) | `0.3.5` | `0.3.6` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.62b1` | `0.65b0` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.6` | `4.10.0` |\n| [prettytable](https://github.com/prettytable/prettytable) | `3.17.0` | `3.18.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.35.1` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.11.0` | `6.14.2` |\n| [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.1` | `0.17.0` |\n| [redis](https://github.com/redis/redis-py) | `7.4.0` | `8.0.1` |\n| [rpds-py](https://github.com/crate-py/rpds) | `0.30.0` | `2026.6.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.17.0` | `0.19.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.60.0` | `2.66.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `83.0.0` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.4` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.2` | `2026.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.7.0` | `0.8.2` |\n| [weasyprint](https://github.com/Kozea/WeasyPrint) | `68.1` | `69.0` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.2.2` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.1` | `4.1.0` |\n| [zopfli](https://github.com/fonttools/py-zopfli) | `0.4.1` | `0.4.3` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.2` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.0` | `7.15.2` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.4` | `6.0.7` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.4` | `6.0.7` |\n| [pip](https://github.com/pypa/pip) | `26.1.1` | `26.1.2` |\n| [prek](https://github.com/j178/prek) | `0.4.0` | `0.4.10` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `5.0.2` | `5.0.3` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a21` | `0.0.60` |\n| [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260509` | `2.9.21.20260712` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20260510` | `6.0.12.20260518` |\n\n\nUpdates `jc` from 1.25.6 to 1.25.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kellyjonbrazil/jc/releases\"\u003ejc's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eJC version 1.25.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\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/kellyjonbrazil/jc/blob/master/CHANGELOG\"\u003ejc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ejc changelog\u003c/p\u003e\n\u003cp\u003e20260617 v1.25.7\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20251012 v1.25.6\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-localgroup\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-user\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eroute-print\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etraceroute-s\u003c/code\u003e streaming command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_hops\u003c/code\u003e and \u003ccode\u003edata_bytes\u003c/code\u003e fields to \u003ccode\u003etraceroute\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ex509-crl\u003c/code\u003e file parser to support Certificate Revocation List PEM and DER files\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eyay\u003c/code\u003e as a magic command for the \u003ccode\u003epacman\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e command parser to support output with the \u003ccode\u003ecable_pairing\u003c/code\u003e attribute\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support blank \u003ccode\u003eteam.config\u003c/code\u003e JSON value and \u003ccode\u003eteam-port.config\u003c/code\u003e JSON value\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etop\u003c/code\u003e command parsers to correct memory size field parsing. Several new unit\nand byte conversion fields have been added\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ewho\u003c/code\u003e command parser to support the \u003ccode\u003eprocess\u003c/code\u003e field on Debian13\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20250503 v1.25.5\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eamixer\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003eiptables\u003c/code\u003e command parser to add default policy statistics fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e parser failing to parse controllers with power state prop\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsblk\u003c/code\u003e command parser to support multiple mountpoints. Also, added\nbyte conversions for size fields.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support \u003ccode\u003eteam.config\u003c/code\u003e JSON field\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etime\u003c/code\u003e command parser for output that does not contain centiseconds\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ex509-cert\u003c/code\u003e parser to handle IDNA2008 encoded email addresses with a warning\u003c/li\u003e\n\u003cli\u003eFix typing for upcoming python v3.14\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/kellyjonbrazil/jc/commit/8290734a87a30e5f0af7e1fba5ecbda2e1c145a8\"\u003e\u003ccode\u003e8290734\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/712\"\u003e#712\u003c/a\u003e from kellyjonbrazil/dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/9d11e1fe5bbdfb9f68b001940a7ae235b68db637\"\u003e\u003ccode\u003e9d11e1f\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/3a2946b6584f2128917ffe908f749498b8c5ea5c\"\u003e\u003ccode\u003e3a2946b\u003c/code\u003e\u003c/a\u003e add streaming csv-ih, tsv, and tsv-ih parsers with doc fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/22ff0e33c3957c929d45864cc9790b8f7b6fe9c8\"\u003e\u003ccode\u003e22ff0e3\u003c/code\u003e\u003c/a\u003e fix for python 3.15 behavior changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/fab550e3b8fef49abe297c5ac4f0b2f9b330d3a9\"\u003e\u003ccode\u003efab550e\u003c/code\u003e\u003c/a\u003e docs: fix typos (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/711\"\u003e#711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/6e79f08c9083836467711e6965f5ca18b1505674\"\u003e\u003ccode\u003e6e79f08\u003c/code\u003e\u003c/a\u003e Add TSV alias and CSV/TSV \u0026quot;No Header\u0026quot; alias (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/900aed5d880f2c1150739976bfbfb1f87e64cbc9\"\u003e\u003ccode\u003e900aed5\u003c/code\u003e\u003c/a\u003e fix tests and update docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/676695eacf75aa01920b89bb1809ee96e47d20bb\"\u003e\u003ccode\u003e676695e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/701\"\u003e#701\u003c/a\u003e from jeffdyke/feature/certs-with-cert-name\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/30c75073044dd364174b080709e9fb6c870ce82e\"\u003e\u003ccode\u003e30c7507\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/7d801f30bb9b35b60938c193d76227f5a3473b50\"\u003e\u003ccode\u003e7d801f3\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kellyjonbrazil/jc/compare/v1.25.6...v1.25.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-git-revision-date-localized-plugin` from 1.5.2 to 1.5.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/releases\"\u003emkdocs-git-revision-date-localized-plugin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix paths in MANIFEST.in by \u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\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/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\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/timvink/mkdocs-git-revision-date-localized-plugin/commit/30e58767a16cd9ec1dd2669f0bdc1af8630af18c\"\u003e\u003ccode\u003e30e5876\u003c/code\u003e\u003c/a\u003e Bump version to 1.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/d58c5becb14bcd4a6143768fb3b7478954c09133\"\u003e\u003ccode\u003ed58c5be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/211\"\u003e#211\u003c/a\u003e from mitya57/fix-manifest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/6da0b4ea1b8c379164a4f1db8e005e98a0b4557d\"\u003e\u003ccode\u003e6da0b4e\u003c/code\u003e\u003c/a\u003e Fix paths in MANIFEST.in\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/aa0d4a3b93f6c4cc36afbf2d8def4af5566d0834\"\u003e\u003ccode\u003eaa0d4a3\u003c/code\u003e\u003c/a\u003e Constrain mkdocs to \u0026lt;2\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.4 to 1.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\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/mkdocstrings/mkdocstrings/commit/9a11dcb8e9b39ff6e1a22abdd362350de4e68e9f\"\u003e\u003ccode\u003e9a11dcb\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e\u003ccode\u003e4732798\u003c/code\u003e\u003c/a\u003e fix: Stop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ecbaa9a05dde5bdc83accf8814fa1c9a1ffe1473\"\u003e\u003ccode\u003eecbaa9a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/64260f748f3db8b301a9d6fa05b2609ab6f6876c\"\u003e\u003ccode\u003e64260f7\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003e\u003ccode\u003eacc0da3\u003c/code\u003e\u003c/a\u003e fix: Parse inventory project and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ec45a9b7a1301a4c70e02e6c92e1b9caff6df61f\"\u003e\u003ccode\u003eec45a9b\u003c/code\u003e\u003c/a\u003e ci: Fix warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ce2199c5195535f8c3b4907dd3ac7de2181925cc\"\u003e\u003ccode\u003ece2199c\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README (\u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\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/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `bleach` from 4.1.0 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mozilla/bleach/blob/main/CHANGES\"\u003ebleach's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.4.0 (June 5th, 2026)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNOTE: 2026-06-05: Bleach is no longer maintained. There will be no future\nreleases including for security issues.\u003c/strong\u003e\nSee issue: \u003ccode\u003e\u0026lt;https://github.com/mozilla/bleach/issues/698\u0026gt;\u003c/code\u003e__\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eBackwards incompatible changes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for pypy 3.10. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/764\"\u003e#764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix bug 2023812 / GHSA-8rfp-98v4-mmr6.\u003c/p\u003e\n\u003cp\u003eFix XSS issue with sanitize_uri_value where disallowed schemes with\nUnicode invisible characters wouldn't be rejected.\u003c/p\u003e\n\u003cp\u003eFor example::\u003c/p\u003e\n\u003cp\u003eimport bleach\npayload1 = '\u003c!-- raw HTML omitted --\u003eClick\u003c!-- raw HTML omitted --\u003e'\nresult1 = bleach.clean(payload1)\nprint(repr(result1))\u003c/p\u003e\n\u003cp\u003eoutputs::\u003c/p\u003e\n\u003cp\u003e'\u003c!-- raw HTML omitted --\u003eClick\u003c!-- raw HTML omitted --\u003e'\u003c/p\u003e\n\u003cp\u003eSee the advisory for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix GHSA-gj48-438w-jh9v.\u003c/p\u003e\n\u003cp\u003eFix issue where URI sanitization wasn't happening in formaction attributes.\u003c/p\u003e\n\u003cp\u003eSee the advisory for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd support for pypy 3.11. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/764\"\u003e#764\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop version max in tinycss2 pin. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/772\"\u003e#772\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis removes one of the things we had to keep checking and updating. Users\nnow own the responsibility for correctness with the version of tinycss2\nthey're using.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 6.3.0 (October 27th, 2025)\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/mozilla/bleach/commit/f0355a7af00500482c5292c6c83290c6a178068d\"\u003e\u003ccode\u003ef0355a7\u003c/code\u003e\u003c/a\u003e fix: fix last release date in CHANGES\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/ae4e8a26706516ad01b92e66321b480208a440da\"\u003e\u003ccode\u003eae4e8a2\u003c/code\u003e\u003c/a\u003e chore: bleach 6.4.0 and final release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/970df58e9f0c55cc52244f3f0106e473a40d886d\"\u003e\u003ccode\u003e970df58\u003c/code\u003e\u003c/a\u003e fix: uri-sanitization in formaction attributes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/7c4867c32344d1c961107fae62240a6f0dc680dc\"\u003e\u003ccode\u003e7c4867c\u003c/code\u003e\u003c/a\u003e fix: xss bypass in allowed protocol test using unicode invisible characters\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/913ab75992b845e2c9c060c41f24d46921db4693\"\u003e\u003ccode\u003e913ab75\u003c/code\u003e\u003c/a\u003e fix: reduce redundancy in workflow jobs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/218c15af455c8dec14f98fcb2e235f8680e93930\"\u003e\u003ccode\u003e218c15a\u003c/code\u003e\u003c/a\u003e fix: rework pip caching\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/4f0b097bf80548a022050e2f71f024d755a9f154\"\u003e\u003ccode\u003e4f0b097\u003c/code\u003e\u003c/a\u003e fix: fix tox platform restrictions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/e95a79d07bb5d792425c2bc0ef5dd03f6614f3bb\"\u003e\u003ccode\u003ee95a79d\u003c/code\u003e\u003c/a\u003e chore: update pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/91539d4e80d4685b8f2bedc79076ff0ff6c1b911\"\u003e\u003ccode\u003e91539d4\u003c/code\u003e\u003c/a\u003e Bump actions/cache from 5.0.3 to 5.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/cd47b4ce495859065da23c2116f651e591e1e90d\"\u003e\u003ccode\u003ecd47b4c\u003c/code\u003e\u003c/a\u003e fix: handle left-angle-bracket that's not a tag (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mozilla/bleach/compare/v4.1.0...v6.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `blessed` from 1.39.0 to 1.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jquast/blessed/releases\"\u003eblessed's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.46\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix DA1 response for some terminals (kitty) by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/392\"\u003ejquast/blessed#392\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved remote truecolor detection by unique TERM by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/394\"\u003ejquast/blessed#394\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd sugar for some extended capabilities by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/393\"\u003ejquast/blessed#393\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.45...1.46\"\u003ehttps://github.com/jquast/blessed/compare/1.45...1.46\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.43: bugfix leaked XTGETTCAP responses into inkey()\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix leaked XTGETTCAP responses into inkey() by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/383\"\u003ejquast/blessed#383\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.42...1.43\"\u003ehttps://github.com/jquast/blessed/compare/1.42...1.43\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.42: bugfix regression: cbreak and raw() were not thread-safe\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression in \u003ccode\u003eTerminal.cbreak()\u003c/code\u003e and \u003ccode\u003eraw\u003c/code\u003e were not thread-safe broken in versions 1.40 and 1.41, remove signal ignore of SIGTTOU \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/380\"\u003e#380\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.41...1.42\"\u003ehttps://github.com/jquast/blessed/compare/1.41...1.42\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.41: bugfix get_location() regression\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix get_location() return type in 1.40 release by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/379\"\u003ejquast/blessed#379\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.40...1.41\"\u003ehttps://github.com/jquast/blessed/compare/1.40...1.41\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.40: XTGETTCAP support\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ecurses-free jinxed 2.0 integration by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/374\"\u003ejquast/blessed#374\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eQuery XTGETTCAP on Terminal init by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/375\"\u003ejquast/blessed#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.39...1.40\"\u003ehttps://github.com/jquast/blessed/compare/1.39...1.40\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.17.9: Initial support for Python 3.10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: Now imports on 3.10+\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.15.0: Disable various integration tests, support python 3.7\u003c/h2\u003e\n\u003cp\u003eNo release notes provided.\u003c/p\u003e\n\u003ch2\u003e1.14.0: bugfix term.wrap for text containing newlines\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: term.wrap misbehaved for text containing newlines, \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/74\"\u003e#74\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.13.0: new Terminal.split_seqs() function, speed enhancement\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eenhancement: method \u003ccode\u003eTerminal.split_seqs\u003c/code\u003e introduced, and 4x cost reduction in related sequence-aware functions, \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/29\"\u003e#29\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003edeprecated: function \u003ccode\u003eblessed.sequences.measure_length\u003c/code\u003e superseded by \u003ccode\u003eblessed.sequences.iter_parse\u003c/code\u003e if necessary.\u003c/li\u003e\n\u003cli\u003edeprecated: warnings about \u0026quot;binary-packed capabilities\u0026quot; are no longer emitted on strange terminal types, making best effort.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.12.0: add Terminal.get_location() method\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eenhancement: method Terminal.get_location\u003ccode\u003ereturns the\u003c/code\u003e(row, col)`` position of the cursor at the time of call for attached terminal.\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/jquast/blessed/blob/master/docs/history.rst\"\u003eblessed's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. py:currentmodule:: blessed.terminal\u003c/p\u003e\n\u003ch1\u003eVersion History\u003c/h1\u003e\n\u003cp\u003e1.47\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~Terminal.does_sixel\u003c/code\u003e now returns \u003ccode\u003eTrue\u003c/code\u003e for SyncTERM using special-case\nmatching of its illegal DA1 response.\u003c/li\u003e\n\u003cli\u003ebugfix: legacy SGR mouse decoder reported no-button motion event (mode 1003) as \u003ccode\u003eLEFT_MOTION\u003c/code\u003e\ninstead of \u003ccode\u003eMOTION\u003c/code\u003e, :ghpull:\u003ccode\u003e398\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ebugfix: match keyboard input \u003ccode\u003e\\x1b\\n\u003c/code\u003e as \u003ccode\u003eKEY_ALT_ENTER\u003c/code\u003e instead of \u003ccode\u003eKEY_CTRL_ALT_J\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.46\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~Terminal.does_sixel\u003c/code\u003e failed to detect DA1 and caused the response to \u0026quot;leak\u0026quot; into\nnext call to :meth:\u003ccode\u003e~Terminal.inkey\u003c/code\u003e for some terminals of unmatched patterns (e.g., kitty).\u003c/li\u003e\n\u003cli\u003eimprove: add new sugar for extended cap-defined styles, like 'clear_scrollback' (common),\n'strikethrough', and 'overline' (not common).\u003c/li\u003e\n\u003cli\u003eimprove: Truecolor support by unique TERM, improves remote sessions like SSH that do not forward\n\u003ccode\u003eCOLORTERM\u003c/code\u003e, and, for the few terminals that do not respond to XTGETTCAP request for \u003ccode\u003eRGB\u003c/code\u003e:\n(kitty).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.45\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: name consistency of kitty keyboard modifiers :ghpull:\u003ccode\u003e390\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.44\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eimprove: reduce errant XTGETTCAP output for Terminal.app and ConEmu.exe :ghpull:\u003ccode\u003e385\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.43\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression of XTGETTCAP responses leaking into first call for empty/non-response\nterminals (libvte/Gnome Terminal), in versions 1.40 to 1.42 :ghpull:\u003ccode\u003e383\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.42\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression in :meth:\u003ccode\u003e~.Terminal.cbreak\u003c/code\u003e and :meth:\u003ccode\u003e~.Terminal.raw\u003c/code\u003e were not thread-safe\nbroken in versions 1.40 and 1.41, remove signal ignore of SIGTTOU :ghissue:\u003ccode\u003e380\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.41\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~.Terminal.get_location\u003c/code\u003e broken in 1.40, returned a generator instead of a tuple.\n:ghissue:\u003ccode\u003e378\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.40\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eimproved: jinxed_ is \u003cstrong\u003enow required on all platforms\u003c/strong\u003e, providing a curses-free and\n\u003ccode\u003esingleton-free \u0026lt;https://jinxed.readthedocs.io/en/stable/capabilities.html#singleton-free\u0026gt;\u003c/code\u003e_\nimplementation of the subset of curses_ used by blessed.  The jinxed_ 1.5.0 release provides a\nterminal \u003ccode\u003ecapability database \u0026lt;https://jinxed.readthedocs.io/en/stable/capabilities.html#database\u0026gt;\u003c/code\u003e of 45 terminals and their\ncommon aliases.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eimproved: Class initialization of :class:\u003ccode\u003e~.Terminal()\u003c/code\u003e now uses \u003ccode\u003eXTGETTCAP\u003c/code\u003e_ to determine\npreferred terminal name \u003ccode\u003eTN\u003c/code\u003e, 24-bit color support \u003ccode\u003eRGB\u003c/code\u003e, number of colors \u003ccode\u003eCo\u003c/code\u003e, \u003ccode\u003eitalic\u003c/code\u003e,\nand \u003ccode\u003eblink\u003c/code\u003e capabilities.\u003c/p\u003e\n\u003cp\u003eThis improves detection of Terminal \u003ccode\u003ekind\u003c/code\u003e and \u003ccode\u003enumber_of_colors\u003c/code\u003e over protocols like serial\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/jquast/blessed/commits\"\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.8 to 1.43.50\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a8ae7f0619b16600dfb006b07c55c3e276cbf21a\"\u003e\u003ccode\u003ea8ae7f0\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.50'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b8c36a990c84df2cdec68b0af03194c619e3e8f1\"\u003e\u003ccode\u003eb8c36a9\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.50\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/fa19980a5c4eee55479fb56b444dc785a6e6b988\"\u003e\u003ccode\u003efa19980\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/2ce2fd5ac8a6e5069465b4eface2938a940bc8b2\"\u003e\u003ccode\u003e2ce2fd5\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d2937da5351e7da82f983c2c572ba35615746b62\"\u003e\u003ccode\u003ed2937da\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/159cb6abdba69c6a433ad2b83920e850643a85cc\"\u003e\u003ccode\u003e159cb6a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.49\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2b8f4d84ae0fb264813e0997f3e510d517b4a1ab\"\u003e\u003ccode\u003e2b8f4d8\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/aa40f37ebe773ef7e8aadbeffee37aeaec8a29c2\"\u003e\u003ccode\u003eaa40f37\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.48'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/652b573c3d4853497e60f983ff2938d2c4efbb4e\"\u003e\u003ccode\u003e652b573\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.48' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/13cce5d163edd8e436f51d61c9fde9619c48993b\"\u003e\u003ccode\u003e13cce5d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.48\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.8...1.43.50\"\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.8 to 1.43.50\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/42b0340e335b1f633be78fa7e59832bb37951a68\"\u003e\u003ccode\u003e42b0340\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.50'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/febd30f4a24b77afe9ef211aad0675453d621618\"\u003e\u003ccode\u003efebd30f\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.50\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/31af253ee49bea34214380b92e7d0152d5f69fa4\"\u003e\u003ccode\u003e31af253\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e179889d6e2bc604b77b9785735d336612e7108a\"\u003e\u003ccode\u003ee179889\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eceb63d43b437b7e5cc67251c07bdb583ee845bd\"\u003e\u003ccode\u003eeceb63d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3749\"\u003e#3749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eecee80c7891c35f2f60ec00d7c4fa81b5fce388\"\u003e\u003ccode\u003eeecee80\u003c/code\u003e\u003c/a\u003e Bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3745\"\u003e#3745\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7d6402f9d49dfa0a873f07b57b888b8d5158738c\"\u003e\u003ccode\u003e7d6402f\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/10f305e588ce4ebe24dd0c8d8ff0e825782bbd85\"\u003e\u003ccode\u003e10f305e\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/2b632ee6822a4f254a02aae6e37b479ae77b688f\"\u003e\u003ccode\u003e2b632ee\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.49\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7ef2356e4892dfb360bddfb0fba8632ac8a59797\"\u003e\u003ccode\u003e7ef2356\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.8...1.43.50\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.4.22 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.06.17\"\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 `django` from 5.2.14 to 6.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/e2a424605ac2e7e6e799496542fb2997207e2f23\"\u003e\u003ccode\u003ee2a4246\u003c/code\u003e\u003c/a\u003e [6.0.x] Bumped version for 6.0.7 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/a5de13f1491f1dbf2bb0ad9b91570524ebbc8acd\"\u003e\u003ccode\u003ea5de13f\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-53878 -- Prevented newlines from being accepted in Dom...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/38dfbd27d7d4f4e6eaa087d7a90f2613fbf55b3a\"\u003e\u003ccode\u003e38dfbd2\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-53877 -- Prevented heap buffer over-read when creating...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/64f9a2b2283fde3ec69fb0dfe441cf0f6f411ba3\"\u003e\u003ccode\u003e64f9a2b\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-48588 -- Prevented caching of responses that set cooki...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c26957a58241037f5849171f35177b95c7ec6660\"\u003e\u003ccode\u003ec26957a\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed flatpages synopsis in docs.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/0b60f44b77510c00ca79403560987cfbaf5a0037\"\u003e\u003ccode\u003e0b60f44\u003c/code\u003e\u003c/a\u003e [6.0.x] Added FILE_UPLOAD_DIRECTORY_PERMISSIONS to docs settings index.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/d928e3060b258fcd002c80d80bb40390efc988db\"\u003e\u003ccode\u003ed928e30\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37172\"\u003e#37172\u003c/a\u003e -- Linked to upload handlers section in FILE_UPLOAD_* se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/e18935cc265aa30079b9c2d280e53cfb91679bba\"\u003e\u003ccode\u003ee18935c\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37158\"\u003e#37158\u003c/a\u003e -- Reordered the contribution checklist sections.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/490eb9cfb68848b88c91f2b6c75d57e2620c7304\"\u003e\u003ccode\u003e490eb9c\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed document referenced in multiple toctrees warning in docs/intern...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/748a9b53c5864f87f4501378d2748199ff0063bb\"\u003e\u003ccode\u003e748a9b5\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed duplicate target name in docs/internals/howto-release-django.txt.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/5.2.14...6.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth` from 65.14.3 to 65.18.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-filter` from 25.2 to 26.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst\"\u003edjango-filter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 26.1 (2026-07-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded testing for Django 6.1.\u003c/p\u003e\n\u003cp\u003eDRF integration will require the upcoming DRF v3.18.\nSee \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded testing against Python 3.14.\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/carltongibson/django-filter/commit/52c3c0f21ef8fe281982ec0e95a3675cd8402214\"\u003e\u003ccode\u003e52c3c0f\u003c/code\u003e\u003c/a\u003e Set date and bump version for 26.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/6a3222aaf83170df0f967423444d5312b99a3d69\"\u003e\u003ccode\u003e6a3222a\u003c/code\u003e\u003c/a\u003e Add testing for Python 3.14.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/aa3bd8e87136d4730f4eb44b3386e52c218bcf66\"\u003e\u003ccode\u003eaa3bd8e\u003c/code\u003e\u003c/a\u003e Added testing against Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/ec717ea11378a4dc003cbe2f77b5211d8815a0b6\"\u003e\u003ccode\u003eec717ea\u003c/code\u003e\u003c/a\u003e Correct Language header in Greek locale file (el) (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1751\"\u003e#1751\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/31b297ca2414218052476ba458c4d1eedc0a0f99\"\u003e\u003ccode\u003e31b297c\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1733\"\u003e#1733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/590c0a3e7d73fafa4fb25df45b53fcc79258d09f\"\u003e\u003ccode\u003e590c0a3\u003c/code\u003e\u003c/a\u003e Fix version range for Django 6.0 (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1731\"\u003e#1731\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/6204bc4eb75edf7ba766fc256d72a68fa80c3029\"\u003e\u003ccode\u003e6204bc4\u003c/code\u003e\u003c/a\u003e Added release date for v25.2.\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/carltongibson/django-filter/compare/25.2...26.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-js-asset` from 3.1.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/feincms/django-js-asset/blob/main/CHANGELOG.rst\"\u003edjango-js-asset's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. _changelog:\u003c/p\u003e\n\u003ch1\u003eChange log\u003c/h1\u003e\n\u003cp\u003eNext version\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Fixed ``js_asset.Media`` crashing with an ``AttributeError`` when rendering an\n  asset that only implements Django's plain ``__html__`` contract (neither a\n  ``MediaAsset`` nor one of our ``ImportMap``/``JSON`` types). Such assets now\n  fall back to ``__html__()`` exactly like ``django.forms.Media`` does; the\n  nonce cannot be threaded into an opaque ``__html__`` asset, same as with stock\n  Django.\n- Corrected the docs around Django 6.1 support. Thanks James Bligh!\n- Finally set up a documentation site at Read the Docs for django-js-asset.\n\u003cp\u003e4.0 (2026-06-11)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eThis is a major release. Most code keeps working unchanged and the rendered\nHTML is the same, but \u003cstrong\u003eif you use import maps the upgrade is not automatic\u003c/strong\u003e --\nsee the import-map note at the end.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003ejs_asset.Media\u003c/code\u003e, a \u003ccode\u003edjango.forms.Media\u003c/code\u003e subclass with two extra\nabilities. First, it merges every embedded \u003ccode\u003eImportMap\u003c/code\u003e into a single\n\u003ccode\u003e\u0026lt;script type=\u0026quot;importmap\u0026quot;\u0026gt;\u003c/code\u003e rendered before any other script -- this\nreplaces the old global \u003ccode\u003eimportmap\u003c/code\u003e object and works no matter how many\nmedia objects Django combines. Second, it applies a request-scoped CSP nonce\nto the tags it renders. It implements \u003ccode\u003e__add__\u003c/code\u003e \u003cstrong\u003eand\u003c/strong\u003e \u003ccode\u003e__radd__\u003c/code\u003e, so it\nkeeps its type -- and its nonce -- when combined with a plain \u003ccode\u003eforms.Media\u003c/code\u003e\nfrom either side (e.g. while Django collects form and widget media). The nonce\ncan be passed to the constructor (\u003ccode\u003enonce=\u003c/code\u003e), copied onto a clone with\n\u003ccode\u003ewith_nonce()\u003c/code\u003e, or passed to \u003ccode\u003erender(nonce=...)\u003c/code\u003e; \u003ccode\u003erender()\u003c/code\u003e also accepts\n\u003ccode\u003eattrs={\u0026quot;nonce\u0026quot;: ...}\u003c/code\u003e so it plugs straight into Django 6.2's\n\u003ccode\u003e{% csp_nonce_attr %}\u003c/code\u003e tag. \u003ccode\u003eMedia.from_media()\u003c/code\u003e wraps an existing\n\u003ccode\u003eforms.Media\u003c/code\u003e instance (e.g. \u003ccode\u003eform.media\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eJS\u003c/code\u003e and \u003ccode\u003eCSS\u003c/code\u003e now \u003cem\u003eproduce\u003c/em\u003e Django's own \u003ccode\u003eScript\u003c/code\u003e and \u003ccode\u003eStylesheet\u003c/code\u003e\nobjects (backported via \u003ccode\u003ejs_asset._compat\u003c/code\u003e on Django versions that lack\nthem) instead of being standalone dataclasses. They therefore share merge\nbuckets with native Django assets and with bare path strings, so the same\nfile is no longer rendered more than once when \u003ccode\u003ejs_asset\u003c/code\u003e assets, plain\nstrings and Django's auto-wrapped assets meet in \u003ccode\u003eforms.Media.merge()\u003c/code\u003e.\n\u003ccode\u003eisinstance(x, JS)\u003c/code\u003e / \u003ccode\u003eisinstance(x, CSS)\u003c/code\u003e keep working (via a metaclass).\nInline CSS (\u003ccode\u003eCSS(src, inline=True)\u003c/code\u003e) is rendered by a small dedicated\n\u003ccode\u003eInlineStyle\u003c/code\u003e asset. Rendered output is unchanged.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eScript\u003c/code\u003e, \u003ccode\u003eStylesheet\u003c/code\u003e, \u003ccode\u003eMediaAsset\u003c/code\u003e and \u003ccode\u003eInlineStyle\u003c/code\u003e can now be\nimported from \u003ccode\u003ejs_asset\u003c/code\u003e -- prefer these in \u003ccode\u003eisinstance\u003c/code\u003e checks over\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/feincms/django-js-asset/commit/7c024a3ef83a1c2951f2ab3925e85b81ebbc8bc0\"\u003e\u003ccode\u003e7c024a3\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/59aa7e529ef7052c3c1710e8a673c14c852334f6\"\u003e\u003ccode\u003e59aa7e5\u003c/code\u003e\u003c/a\u003e Fix \u003cstrong\u003ehtml\u003c/strong\u003e objects in Media\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b3c515c793185d96d43124a8239267a535bdd18f\"\u003e\u003ccode\u003eb3c515c\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/8a343389d9500999bd3397a1d1c44cb5ee709a00\"\u003e\u003ccode\u003e8a34338\u003c/code\u003e\u003c/a\u003e Address review comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b7d05eb0f4d7548219b06eb4057fe908c2e85a23\"\u003e\u003ccode\u003eb7d05eb\u003c/code\u003e\u003c/a\u003e Remove the global importmap and update the guidance accordingly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/3213b9bd209527e989c0fb8f552e7941407460cc\"\u003e\u003ccode\u003e3213b9b\u003c/code\u003e\u003c/a\u003e Increase interoperability with Django's own object-based media assets\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/cfe3b529f22bd8dcd1abf193aa4af0f1e96681be\"\u003e\u003ccode\u003ecfe3b52\u003c/code\u003e\u003c/a\u003e Add a Media subclass with import-map merging and CSP nonce support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/6708307bd5e1d5cc18cb58da63e2c6ace07e653c\"\u003e\u003ccode\u003e6708307\u003c/code\u003e\u003c/a\u003e dj62 does not exist yet as a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/9961d4871605432a9923d2a844d51d9efca47c73\"\u003e\u003ccode\u003e9961d48\u003c/code\u003e\u003c/a\u003e Run tests with newer Django and Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/f77abf57e6754612793c9976305f704f61dfceff\"\u003e\u003ccode\u003ef77abf5\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/feincms/django-js-asset/issues/20\"\u003e#20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/feincms/django-js-asset/compare/3.1.2...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-maintenance-mode` from 0.22.0 to 0.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fabiocaccamo/django-maintenance-mode/releases\"\u003edjango-maintenance-mode's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.23.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePython 3.14\u003c/code\u003e and \u003ccode\u003eDjango 6.0\u003c/code\u003e support.\u003c/li\u003e\n\u003cli\u003eAdd scheduled maintenance mode support: \u003ccode\u003eset_maintenance_mode(True, start=..., end=...)\u003c/code\u003e and \u003ccode\u003emanage.py maintenance_mode on --start ... --end ...\u003c/code\u003e (maintenance mode automatically activates/deactivates itself based on the scheduled datetimes). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/64\"\u003e#64\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote for custom state backends consumers: \u003ccode\u003eget_value()\u003c/code\u003e now returns \u003ccode\u003ebool\u003c/code\u003e or \u003ccode\u003edict\u003c/code\u003e (scheduled state), and the state file format is extended accordingly (running \u003ccode\u003emaintenance_mode off\u003c/code\u003e restores the plain bool format).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_STAFF_USER\u003c/code\u003e and \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_SUPERUSER\u003c/code\u003e settings to override the \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_AUTHENTICATED_USER\u003c/code\u003e behavior for staff users and superusers (if \u003ccode\u003eNone\u003c/code\u003e, default, they inherit the \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_AUTHENTICATED_USER\u003c/code\u003e behavior). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/191\"\u003e#191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003eMAINTENANCE_MODE_RESPONSE_TYPE\u003c/code\u003e to be the path of a function that receives the request and returns the response type (\u003ccode\u003e\u0026quot;html\u0026quot;\u003c/code\u003e or \u003ccode\u003e\u0026quot;json\u0026quot;\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/204\"\u003e#204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTENANCE_MODE_GET_AUTHENTICATED_USER\u003c/code\u003e setting to support non-session authentication (eg. \u003ccode\u003eJWT\u003c/code\u003e / token authentication with \u003ccode\u003edjango-rest-framework\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/233\"\u003e#233\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove middleware position docs. \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/251\"\u003e#251\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/fabiocaccamo/django-maintenance-mode/blob/main/CHANGELOG.md\"\u003edjango-maintenance-mode's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/fabiocaccamo/django-maintenance-mode/releases/tag/0.23.0\"\u003e0.23.0\u003c/a\u003e - 2026-07-13\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePython 3.14\u003c/code\u003e and \u003ccode\u003eDjango 6.0\u003c/code\u003e support.\u003c/li\u003e\n\u003cli\u003eAdd scheduled maintenance mode support: \u003ccode\u003eset_maintenance_mode(True, start=..., end=...)\u003c/code\u003e and \u003ccode\u003emanage.py maintenance_mode on --start ... --end ...\u003c/code\u003e (maintenance mode automatically activates/deactivates itself based on the scheduled datetimes). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/64\"\u003e#64\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote for custom state backends consumers: \u003ccode\u003eget_value()\u003c/code\u003e now returns \u003ccode\u003ebool\u003c/code\u003e or \u003ccode\u003edict\u003c/code\u003e (scheduled state), and the state file format is extended accordingly (running \u003ccode\u003emaintenance_mode off\u003c/code\u003e restores the plain bool format).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTE...\n\n_Description has been truncated_","html_url":"https://github.com/artursampaio-gc/goproduct/pull/26","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/artursampaio-gc%2Fgoproduct/issues/26","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/26/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-22T04:55:23.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4945586489","node_id":"PR_kwDOSftIMc70sZjY","number":80,"state":"open","title":"chore(deps)(deps): bump the python-patch-minor group across 1 directory with 37 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-22T04:55:23.000Z","updated_at":"2026-07-22T04:55:24.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): bump","group_name":"python-patch-minor","update_count":37,"packages":[{"name":"fastapi","old_version":"0.136.1","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.51.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"python-multipart","old_version":"0.0.31","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"alembic","old_version":"1.18.4","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"pymupdf","old_version":"1.24.10","new_version":"1.28.0","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"pypdf","old_version":"6.13.3","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"pdfplumber","old_version":"0.11.9","new_version":"0.11.10","repository_url":"https://github.com/jsvine/pdfplumber"},{"name":"openai","old_version":"2.32.0","new_version":"2.46.0","repository_url":"https://github.com/openai/openai-python"},{"name":"google-genai","old_version":"2.10.0","new_version":"2.13.0","repository_url":"https://github.com/googleapis/python-genai"},{"name":"google-cloud-vision","old_version":"3.14.0","new_version":"3.15.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"playwright","old_version":"1.60.0","new_version":"1.61.0","repository_url":"https://github.com/microsoft/playwright-python"},{"name":"ruff","old_version":"0.15.14","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"coverage","old_version":"7.14.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"httpx2","old_version":"2.4.0","new_version":"2.7.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"pip-audit","old_version":"2.10.0","new_version":"2.10.1","repository_url":"https://github.com/pypa/pip-audit"},{"name":"anyio","old_version":"4.13.0","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"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":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"google-api-core","old_version":"2.30.3","new_version":"2.32.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-api-python-client","old_version":"2.196.0","new_version":"2.198.0","repository_url":"https://github.com/googleapis/google-api-python-client"},{"name":"google-auth","old_version":"2.53.0","new_version":"2.56.2","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"greenlet","old_version":"3.5.1","new_version":"3.5.3","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"grpcio","old_version":"1.80.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"grpcio-status","old_version":"1.71.2","new_version":"1.82.1"},{"name":"idna","old_version":"3.16","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"jiter","old_version":"0.15.0","new_version":"0.16.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"proto-plus","old_version":"1.28.0","new_version":"1.28.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pypdfium2","old_version":"5.8.0","new_version":"5.12.1","repository_url":"https://github.com/pypdfium2-team/pypdfium2"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.69.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"websockets","old_version":"16.0","new_version":"16.1.1","repository_url":"https://github.com/python-websockets/websockets"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-patch-minor group with 37 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.139.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.51.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.31` | `0.0.32` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.18.4` | `1.18.5` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.51` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.24.10` | `1.28.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.3` | `6.14.2` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.9` | `0.11.10` |\n| [openai](https://github.com/openai/openai-python) | `2.32.0` | `2.46.0` |\n| [google-genai](https://github.com/googleapis/python-genai) | `2.10.0` | `2.13.0` |\n| [google-cloud-vision](https://github.com/googleapis/google-cloud-python) | `3.14.0` | `3.15.0` |\n| [playwright](https://github.com/microsoft/playwright-python) | `1.60.0` | `1.61.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.14` | `0.15.22` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.0` | `7.15.2` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.4.0` | `2.7.0` |\n| [pip-audit](https://github.com/pypa/pip-audit) | `2.10.0` | `2.10.1` |\n| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.2` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.7.22` |\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| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [google-api-core](https://github.com/googleapis/google-cloud-python) | `2.30.3` | `2.32.0` |\n| [google-api-python-client](https://github.com/googleapis/google-api-python-client) | `2.196.0` | `2.198.0` |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.53.0` | `2.56.2` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.1` | `3.5.3` |\n| [grpcio](https://github.com/grpc/grpc) | `1.80.0` | `1.82.1` |\n| [grpcio-status](https://grpc.io) | `1.71.2` | `1.82.1` |\n| [idna](https://github.com/kjd/idna) | `3.16` | `3.18` |\n| [jiter](https://github.com/pydantic/jiter) | `0.15.0` | `0.16.0` |\n| [proto-plus](https://github.com/googleapis/google-cloud-python) | `1.28.0` | `1.28.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.47.0` |\n| [pypdfium2](https://github.com/pypdfium2-team/pypdfium2) | `5.8.0` | `5.12.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.69.0` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `16.0` | `16.1.1` |\n\n\nUpdates `fastapi` from 0.136.1 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!-- 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/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.136.1...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.47.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\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\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.47.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 `python-multipart` from 0.0.31 to 0.0.32\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.32\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace per-byte partial-boundary scan with rfind lookbehind 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/python-multipart/pull/300\"\u003eKludex/python-multipart#300\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/python-multipart/compare/0.0.31...0.0.32\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\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/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.32 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary scanning for CR/LF-dense part data \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003e#300\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/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6\"\u003e\u003ccode\u003e238ead6\u003c/code\u003e\u003c/a\u003e Version 0.0.32 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af\"\u003e\u003ccode\u003e8672979\u003c/code\u003e\u003c/a\u003e Replace per-byte partial-boundary scan with rfind lookbehind (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df\"\u003e\u003ccode\u003e8190779\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 7 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/301\"\u003e#301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44\"\u003e\u003ccode\u003e0d3c086\u003c/code\u003e\u003c/a\u003e Use uv package ecosystem for Dependabot (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.18.4 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 `sqlalchemy` from 2.0.49 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 `pydantic` from 2.13.2 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\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/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\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/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.13.2...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 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/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/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.33.1...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.24.10 to 1.28.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.28.0\u003c/strong\u003e (2026-06-29)\u003c/p\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4114 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4114\u0026gt;\u003c/code\u003e_: ComboBox choice_values full of empty strings despite PDF having valid choices.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4950 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4950\u0026gt;\u003c/code\u003e_: remove_rotation() raises ValueError on widgets with empty/infinite rects\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e5001 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/5001\u0026gt;\u003c/code\u003e_: Formulae incorrectly rendered as black boxes\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e5033 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/5033\u0026gt;\u003c/code\u003e_: Annot.set_rotation(0) followed by Annot.update() throws AttributeError\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse MuPDF-1.28.0.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.\u003cstrong\u003einit\u003c/strong\u003e(): new arg \u003ccode\u003earchive\u003c/code\u003e to support documents with archives.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.convert_to_pdf(): also generate links.\u003c/li\u003e\n\u003cli\u003eFixed MacOS x64 platform tag - used to be macosx_10_9_x86_64, but we actually\nrequire MacOS 10.15, so platform tag is now macosx_10_15_x86_64.\u003c/li\u003e\n\u003cli\u003eSupport Windows builds with free thread python.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.save() now saves non-PDF documents in PDF format.\u003c/li\u003e\n\u003cli\u003eNew method pymupdf.Document.apply_css().\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\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/pymupdf/PyMuPDF/commit/e9cdfc9e7fe3260efcc9d28713903f075ab05bce\"\u003e\u003ccode\u003ee9cdfc9\u003c/code\u003e\u003c/a\u003e changes.txt: fix mupdf version number.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/629a3582fd31d352f042c9f444b984d8ed22e449\"\u003e\u003ccode\u003e629a358\u003c/code\u003e\u003c/a\u003e docs/document.rst: add new in 1.28.0 to \u003cstrong\u003einit\u003c/strong\u003e's archive.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/7264f27eecc53dcfe0401d3ba97c10b1aa97669d\"\u003e\u003ccode\u003e7264f27\u003c/code\u003e\u003c/a\u003e README.md: updated example conversion from md to pdf.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/119a0bca69156375494eacff9725bb0221fa9b19\"\u003e\u003ccode\u003e119a0bc\u003c/code\u003e\u003c/a\u003e docs/document.rst: document that save() now also works for non-pdf documents.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5ebfc4c03195b56e5ed62d45c895823354b92af7\"\u003e\u003ccode\u003e5ebfc4c\u003c/code\u003e\u003c/a\u003e setup.py: use mupdf-1.28.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/14d8fac83f51b6659015066d5a57ce72b9209438\"\u003e\u003ccode\u003e14d8fac\u003c/code\u003e\u003c/a\u003e changes.txt: removed bogus \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4423\"\u003e#4423\u003c/a\u003e entry, added \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/5033\"\u003e#5033\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d9616168f3d23779b7289acdb0950544f6795031\"\u003e\u003ccode\u003ed961616\u003c/code\u003e\u003c/a\u003e tests/test_annots.py: added test_5033() for setRect() vs set_rect() bug.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d91bd63304edc6685c9561e923e2fda30d603e9f\"\u003e\u003ccode\u003ed91bd63\u003c/code\u003e\u003c/a\u003e changes.txt: added note about save() and non-pdf documents.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/fd409de6680d9a4532ac07560d724d7dc2833b43\"\u003e\u003ccode\u003efd409de\u003c/code\u003e\u003c/a\u003e .github/workflows/: updated to use mupdf branch 1.28.x.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/04aa7dd994f282b1835ac01784b80bd66ce4b09c\"\u003e\u003ccode\u003e04aa7dd\u003c/code\u003e\u003c/a\u003e Remove old setRect Name\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.10...1.28.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.13.3 to 6.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/releases\"\u003epypdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.14.2, 2026-06-23\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3892\"\u003e#3892\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.1...6.14.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.1, 2026-06-23\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.0...6.14.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.0, 2026-06-22\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApply general limit for requested image size (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3888\"\u003e#3888\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSpeed up recovery when reading broken cross-reference table (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3887\"\u003e#3887\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCheck whether image is displayed on a given page (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3738\"\u003e#3738\u003c/a\u003e) by \u003ca href=\"https://github.com/andreasntr\"\u003e\u003ccode\u003e@​andreasntr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSeveral fixes by \u003ca href=\"https://github.com/metsw24-max\"\u003e\u003ccode\u003e@​metsw24-max\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.0\"\u003eFull Changelog\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/py-pdf/pypdf/blob/main/CHANGELOG.md\"\u003epypdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.14.2, 2026-06-23\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3892\"\u003e#3892\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.1...6.14.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.1, 2026-06-23\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.0...6.14.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.0, 2026-06-22\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApply general limit for requested image size (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3888\"\u003e#3888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSpeed up recovery when reading broken cross-reference table (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3887\"\u003e#3887\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCheck whether image is displayed on a given page (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3738\"\u003e#3738\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSeveral fixes\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.0\"\u003eFull Changelog\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/py-pdf/pypdf/commit/2266ee853d1420c8774f6657ce3b8f1502cac713\"\u003e\u003ccode\u003e2266ee8\u003c/code\u003e\u003c/a\u003e REL: 6.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/5a33a46416aa1ae6c025ff90a3cca57631fdafd2\"\u003e\u003ccode\u003e5a33a46\u003c/code\u003e\u003c/a\u003e SEC: Avoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/1ee4e58bea04bfca119c7c2fe29d8167dcddcb81\"\u003e\u003ccode\u003e1ee4e58\u003c/code\u003e\u003c/a\u003e REL: 6.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/ec3b14596186c40caca7cf8ab9b2155203e01b5b\"\u003e\u003ccode\u003eec3b145\u003c/code\u003e\u003c/a\u003e SEC: Detect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/c6cd82e82e4906ff29eeeea0e5b81ae38b00be9c\"\u003e\u003ccode\u003ec6cd82e\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed inline image settings in _read_inline_image (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3889\"\u003e#3889\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/0ae42ba0f683e26c76968529a94905587c181010\"\u003e\u003ccode\u003e0ae42ba\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed page label entries in get_label_from_nums (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3884\"\u003e#3884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/50617b5fae0138a30995eebec169d7e63e3ed797\"\u003e\u003ccode\u003e50617b5\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed Tm operand count in extract_text (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3877\"\u003e#3877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/86e5a82471587570c269194e5220d588b06a1119\"\u003e\u003ccode\u003e86e5a82\u003c/code\u003e\u003c/a\u003e MAINT: Improve readability (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3874\"\u003e#3874\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/83cb25f33f41abcbec59e7866e9530b93b7c1ae3\"\u003e\u003ccode\u003e83cb25f\u003c/code\u003e\u003c/a\u003e DEV: Fix sample files commit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/06588ecb5127fe08045e10fa0f227f231ad259ee\"\u003e\u003ccode\u003e06588ec\u003c/code\u003e\u003c/a\u003e REL: 6.14.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pdfplumber` from 0.11.9 to 0.11.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/releases\"\u003epdfplumber's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.11.10\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\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/jsvine/pdfplumber/blob/stable/CHANGELOG.md\"\u003epdfplumber's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.11.10] — 2026-06-14\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\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/jsvine/pdfplumber/commit/7d4f2f582f2d99f9e60ba522fdf7afd2f6d54c62\"\u003e\u003ccode\u003e7d4f2f5\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b2f8f6fd7f7f92b73d2f1f9350b6e7e9d2\"\u003e\u003ccode\u003e1e6de0b\u003c/code\u003e\u003c/a\u003e Upgrade dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/91b2b6cbca6efd8b94cc44f942385b1047f00661\"\u003e\u003ccode\u003e91b2b6c\u003c/code\u003e\u003c/a\u003e Appease linter/coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/98041536932ce85d18a1fba80d9db0686b831d9d\"\u003e\u003ccode\u003e9804153\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ebafd6e9cb81afcfee0e4d79d119d3058490467a\"\u003e\u003ccode\u003eebafd6e\u003c/code\u003e\u003c/a\u003e Update Python versions in setup.py classifiers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/fc2c9a9001415ebf7b7221eb89db4cb7d2f65fc8\"\u003e\u003ccode\u003efc2c9a9\u003c/code\u003e\u003c/a\u003e Fix list of tested Python versions in README \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1355\"\u003e#1355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff65d4c92b648bf306e3e782e481258b6c6d\"\u003e\u003ccode\u003e07a5ff6\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251230 to 20260107\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ec96f7256dde1ccad940c19bf9eb97ddb98cfae6\"\u003e\u003ccode\u003eec96f72\u003c/code\u003e\u003c/a\u003e Update Makefile\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jsvine/pdfplumber/compare/v0.11.9...v0.11.10\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.32.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/{...\n\n_Description has been truncated_","html_url":"https://github.com/skin306152-star/pearnly-app/pull/80","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/skin306152-star%2Fpearnly-app/issues/80","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/80/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-14T18:47:23.000Z","version_change":"4.15.0 → 4.16.0","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":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-06T08:08:49.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4817205032","node_id":"PR_kwDOLs4Ev87uPrXS","number":244,"state":"open","title":"deps(deps-dev): bump the python-development group with 2 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-06T08:08:49.000Z","updated_at":"2026-07-06T08:10:28.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(deps-dev): bump","group_name":"python-development","update_count":2,"packages":[{"name":"responses","old_version":"0.26.1","new_version":"0.26.2","repository_url":"https://github.com/getsentry/responses"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-development group with 2 updates: [responses](https://github.com/getsentry/responses) and [typing-extensions](https://github.com/python/typing_extensions).\n\nUpdates `responses` from 0.26.1 to 0.26.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/responses/releases\"\u003eresponses's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.26.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault headers (such as \u003ccode\u003eContent-Type\u003c/code\u003e, \u003ccode\u003eDate\u003c/code\u003e and \u003ccode\u003eServer\u003c/code\u003e) are now stripped\nfrom recorded files regardless of header name case. Previously, responses recorded from\nservers that send lowercase header names (for example over HTTP/2) kept these redundant\nheaders in the generated file.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003equery_param_matcher\u003c/code\u003e mutating the caller's params dict when numeric\nvalues are provided. See \u003ca href=\"https://redirect.github.com/getsentry/responses/issues/801\"\u003e#801\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/getsentry/responses/blob/master/CHANGES\"\u003eresponses's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.26.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault headers (such as \u003ccode\u003eContent-Type\u003c/code\u003e, \u003ccode\u003eDate\u003c/code\u003e and \u003ccode\u003eServer\u003c/code\u003e) are now stripped\nfrom recorded files regardless of header name case. Previously, responses recorded from\nservers that send lowercase header names (for example over HTTP/2) kept these redundant\nheaders in the generated file.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003equery_param_matcher\u003c/code\u003e mutating the caller's params dict when numeric\nvalues are provided. See \u003ca href=\"https://redirect.github.com/getsentry/responses/issues/801\"\u003e#801\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/getsentry/responses/commit/31d28eb21745379bd1ad2154838187e23aa92a3e\"\u003e\u003ccode\u003e31d28eb\u003c/code\u003e\u003c/a\u003e release: 0.26.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/6fb610d1ca8f4bf35af8bfa5d0ac4a97fd53a99c\"\u003e\u003ccode\u003e6fb610d\u003c/code\u003e\u003c/a\u003e Fix CHANGES (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/802\"\u003e#802\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/aae1d471f3ef5c120c99a178a621e8276c164ab6\"\u003e\u003ccode\u003eaae1d47\u003c/code\u003e\u003c/a\u003e Set license format to SPDX identifier in setup.py (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/803\"\u003e#803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/a19add7777d7d0c64eeb364f6cc9de624c33f4f8\"\u003e\u003ccode\u003ea19add7\u003c/code\u003e\u003c/a\u003e fix: query_param_matcher no longer mutates the caller's params dict (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/801\"\u003e#801\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/88e15db329b8731d27210fe73e11056210309829\"\u003e\u003ccode\u003e88e15db\u003c/code\u003e\u003c/a\u003e Strip default headers from recorded files case-insensitively (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/798\"\u003e#798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/1d48f2f202a5a9cdbb008aa9de2e255cbe897c81\"\u003e\u003ccode\u003e1d48f2f\u003c/code\u003e\u003c/a\u003e docs: fix typos (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/800\"\u003e#800\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/853e7d2ddde86315d2dd936185de427b595499bc\"\u003e\u003ccode\u003e853e7d2\u003c/code\u003e\u003c/a\u003e docs: update tox Python version examples (\u003ca href=\"https://redirect.github.com/getsentry/responses/issues/797\"\u003e#797\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/responses/commit/705067bccc9bffbe0a2a69aff6e12e812fe36a7a\"\u003e\u003ccode\u003e705067b\u003c/code\u003e\u003c/a\u003e Merge branch 'release/0.26.1'\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/getsentry/responses/compare/0.26.1...0.26.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.15.0 to 4.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.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/softwareone-platform/swo-marketplace-cli/pull/244","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwareone-platform%2Fswo-marketplace-cli/issues/244","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/244/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-05T23:06:42.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4814778822","node_id":"PR_kwDOOHh4U87uIDjT","number":166,"state":"open","title":"chore(deps): Bump the python-minor-and-patch group across 1 directory with 12 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-05T23:06:42.000Z","updated_at":"2026-07-05T23:08:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","group_name":"python-minor-and-patch","update_count":12,"packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"pytest","old_version":"9.0.2","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"nox","old_version":"2026.2.9","new_version":"2026.4.10","repository_url":"https://github.com/wntrblm/nox"},{"name":"ruff","old_version":"0.15.9","new_version":"0.15.20","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pre-commit","old_version":"4.5.1","new_version":"4.6.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"argcomplete","old_version":"3.6.3","new_version":"3.7.0","repository_url":"https://github.com/kislyuk/argcomplete"},{"name":"distlib","old_version":"0.4.0","new_version":"0.4.3","repository_url":"https://github.com/pypa/distlib"},{"name":"filelock","old_version":"3.25.2","new_version":"3.29.5","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"humanize","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"identify","old_version":"2.6.18","new_version":"2.6.19","repository_url":"https://github.com/pre-commit/identify"},{"name":"packaging","old_version":"26.0","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"platformdirs","old_version":"4.9.4","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-and-patch group with 12 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.1.1` |\n| [nox](https://github.com/wntrblm/nox) | `2026.2.9` | `2026.4.10` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.9` | `0.15.20` |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.6.0` |\n| [argcomplete](https://github.com/kislyuk/argcomplete) | `3.6.3` | `3.7.0` |\n| [distlib](https://github.com/pypa/distlib) | `0.4.0` | `0.4.3` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.25.2` | `3.29.5` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.15.0` | `4.16.0` |\n| [identify](https://github.com/pre-commit/identify) | `2.6.18` | `2.6.19` |\n| [packaging](https://github.com/pypa/packaging) | `26.0` | `26.2` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.4` | `4.10.0` |\n\n\nUpdates `typing-extensions` from 4.15.0 to 4.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.0.2 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e9.1.0\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.0 (2026-06-13)\u003c/h1\u003e\n\u003ch2\u003eRemovals and backward incompatible breaking changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14533\"\u003e#14533\u003c/a\u003e: When using \u003ccode\u003e--doctest-modules\u003c/code\u003e, autouse fixtures with \u003ccode\u003emodule\u003c/code\u003e, \u003ccode\u003epackage\u003c/code\u003e or \u003ccode\u003esession\u003c/code\u003e scope that are defined inline in Python test modules (not plugins or conftests) will now possibly execute twice.\u003c/p\u003e\n\u003cp\u003eIf this is undesirable, move the fixture definition to a \u003ccode\u003econftest.py\u003c/code\u003e file if possible.\u003c/p\u003e\n\u003cp\u003eTechnical explanation for those interested:\nWhen using \u003c!-- raw HTML omitted --\u003e--doctest-modules\u003c!-- raw HTML omitted --\u003e, pytest possibly collects Python modules twice, once as \u003ccode\u003epytest.Module\u003c/code\u003e and once as a \u003ccode\u003eDoctestModule\u003c/code\u003e (depending on the configuration).\nDue to improvements in pytest's fixture implementation, if e.g. the \u003ccode\u003eDoctestModule\u003c/code\u003e collects a fixture, it is now visible to it only, and not to the \u003ccode\u003eModule\u003c/code\u003e.\nThis means that both need to register the fixtures independently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations (removal in next major release)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/10819\"\u003e#10819\u003c/a\u003e: Added a deprecation warning for class-scoped fixtures defined as instance methods (without \u003ccode\u003e@classmethod\u003c/code\u003e). Such fixtures set attributes on a different instance than the test methods use, leading to unexpected behavior. Use \u003ccode\u003e@classmethod\u003c/code\u003e decorator instead -- by \u003ccode\u003eyastcher\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003e10819\u003c/code\u003e and \u003ccode\u003e14011\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12882\"\u003e#12882\u003c/a\u003e: Calling \u003ccode\u003erequest.getfixturevalue() \u0026lt;pytest.FixtureRequest.getfixturevalue\u0026gt;\u003c/code\u003e during teardown to request a fixture that was not already requested is now deprecated and will become an error in pytest 10.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003edynamic-fixture-request-during-teardown\u003c/code\u003e for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13409\"\u003e#13409\u003c/a\u003e: Using non-\u003ccode\u003e~collections.abc.Collection\u003c/code\u003e iterables (such as generators, iterators, or custom iterable objects) for the \u003ccode\u003eargvalues\u003c/code\u003e parameter in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e and \u003ccode\u003emetafunc.parametrize \u0026lt;pytest.Metafunc.parametrize\u0026gt;\u003c/code\u003e is now deprecated.\u003c/p\u003e\n\u003cp\u003eThese iterables get exhausted after the first iteration,\nleading to tests getting unexpectedly skipped in cases such as running \u003ccode\u003epytest.main()\u003c/code\u003e multiple times,\nusing class-level parametrize decorators,\nor collecting tests multiple times.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eparametrize-iterators\u003c/code\u003e for details and suggestions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13946\"\u003e#13946\u003c/a\u003e: The private \u003ccode\u003econfig.inicfg\u003c/code\u003e attribute is now deprecated.\nUse \u003ccode\u003econfig.getini() \u0026lt;pytest.Config.getini\u0026gt;\u003c/code\u003e to access configuration values instead.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003econfig-inicfg\u003c/code\u003e for more details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14004\"\u003e#14004\u003c/a\u003e: Passing \u003ccode\u003ebaseid\u003c/code\u003e to \u003ccode\u003e~pytest.FixtureDef\u003c/code\u003e or \u003ccode\u003enodeid\u003c/code\u003e strings to fixture registration APIs is now deprecated. These are internal pytest APIs that are used by some plugins.\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/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.2...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `nox` from 2026.2.9 to 2026.4.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/wntrblm/nox/releases\"\u003enox's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2026.04.10 🧹\u003c/h2\u003e\n\u003cp\u003eThis release drops Python 3.8 and adds a \u003ccode\u003e--usage\u003c/code\u003e command for full docstrings. Our \u003ccode\u003e.nox\u003c/code\u003e dir is now ignored by default, virtualenvs are recreated if symlinks are broken (such as after a Python upgrade), and \u003ccode\u003e-t\u003c/code\u003e now selects from all available sessions.\u003c/p\u003e\n\u003cp\u003eWe'd like to thank the following folks who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/scop\"\u003e\u003ccode\u003e@​scop\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Python 3.8 (reapply \u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1004\"\u003e#1004\u003c/a\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/wntrblm/nox/pull/1062\"\u003ewntrblm/nox#1062\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003enox --usage \u0026lt;session\u0026gt;\u003c/code\u003e command to print full docstrings for provided sessions by \u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1064\"\u003ewntrblm/nox#1064\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWrite out \u003ccode\u003e.gitignore\u003c/code\u003e/\u003ccode\u003eCACHEDIR.TAG\u003c/code\u003e to \u003ccode\u003e.nox\u003c/code\u003e dir by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1072\"\u003ewntrblm/nox#1072\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRecreate venv if broken symlinks are present by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1078\"\u003ewntrblm/nox#1078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore default selection for tags and keywords by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1057\"\u003ewntrblm/nox#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMore uv variables set by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1056\"\u003ewntrblm/nox#1056\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore forcecolor falsy by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1073\"\u003ewntrblm/nox#1073\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFully pin actions in composite action by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1080\"\u003ewntrblm/nox#1080\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePin CI to working conda version by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1079\"\u003ewntrblm/nox#1079\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse prek by \u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1065\"\u003ewntrblm/nox#1065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSwitch artifact attestations to actions/attest by \u003ca href=\"https://github.com/scop\"\u003e\u003ccode\u003e@​scop\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1070\"\u003ewntrblm/nox#1070\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse 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/wntrblm/nox/pull/1082\"\u003ewntrblm/nox#1082\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/wntrblm/nox/compare/2026.02.09...2026.04.10\"\u003ehttps://github.com/wntrblm/nox/compare/2026.02.09...2026.04.10\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/wntrblm/nox/blob/main/CHANGELOG.md\"\u003enox's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003e2026.04.10\u003c/h2\u003e\n\u003cp\u003eThis release drops Python 3.8 and adds a \u003ccode\u003e--usage\u003c/code\u003e command for full docstrings.\nOur \u003ccode\u003e.nox\u003c/code\u003e dir is now ignored by default, virtualenvs are recreated if symlinks\nare broken (such as after a Python upgrade), and \u003ccode\u003e-t\u003c/code\u003e now selects from all\navailable sessions.\u003c/p\u003e\n\u003cp\u003eWe'd like to thank the following folks who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/scop\"\u003e\u003ccode\u003e@​scop\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFeatures:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Python 3.8 (reapply \u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1004\"\u003e#1004\u003c/a\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/wntrblm/nox/pull/1062\"\u003ewntrblm/nox#1062\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003enox --usage \u0026lt;session\u0026gt;\u003c/code\u003e command to print full docstrings for provided sessions by \u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1064\"\u003ewntrblm/nox#1064\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWrite out \u003ccode\u003e.gitignore\u003c/code\u003e/\u003ccode\u003eCACHEDIR.TAG\u003c/code\u003e to \u003ccode\u003e.nox\u003c/code\u003e dir by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1072\"\u003ewntrblm/nox#1072\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRecreate venv if broken symlinks are present by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1078\"\u003ewntrblm/nox#1078\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore default selection for tags and keywords by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1057\"\u003ewntrblm/nox#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMore uv variables set by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1056\"\u003ewntrblm/nox#1056\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore forcecolor falsy by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1073\"\u003ewntrblm/nox#1073\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFully pin actions in composite action by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1080\"\u003ewntrblm/nox#1080\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInternal changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePin CI to working conda version by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1079\"\u003ewntrblm/nox#1079\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse prek by \u003ca href=\"https://github.com/agriyakhetarpal\"\u003e\u003ccode\u003e@​agriyakhetarpal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1065\"\u003ewntrblm/nox#1065\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSwitch artifact attestations to actions/attest by \u003ca href=\"https://github.com/scop\"\u003e\u003ccode\u003e@​scop\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/wntrblm/nox/pull/1070\"\u003ewntrblm/nox#1070\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse 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/wntrblm/nox/pull/1082\"\u003ewntrblm/nox#1082\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2026.02.09\u003c/h2\u003e\n\u003cp\u003eThis small release supports uv 0.10's new requirement that \u003ccode\u003e--clear\u003c/code\u003e be passed\nto clear an environment. Python 3.8 support was temporarily re-added since uv\n0.10 still supports 3.8, so nox on 3.8 was affected.\u003c/p\u003e\n\u003cp\u003eWe'd like to thank the following folks who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kai687\"\u003e\u003ccode\u003e@​kai687\u003c/code\u003e\u003c/a\u003e (first contribution)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wu-zhao-min\"\u003e\u003ccode\u003e@​wu-zhao-min\u003c/code\u003e\u003c/a\u003e (first contribution)\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/wntrblm/nox/commit/97e345e6a26bb2c5aacff9cc4327bd4ac1b00ce6\"\u003e\u003ccode\u003e97e345e\u003c/code\u003e\u003c/a\u003e docs: add thanks section (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1083\"\u003e#1083\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/8d5c759d5d3f1f2c80ada8f05cd994c673905898\"\u003e\u003ccode\u003e8d5c759\u003c/code\u003e\u003c/a\u003e chore: prepare for 2026.04.10 (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1081\"\u003e#1081\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/2577f31eb4d6d94f18157c444464fdd1e4a7e3df\"\u003e\u003ccode\u003e2577f31\u003c/code\u003e\u003c/a\u003e ci: add zizmor (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1082\"\u003e#1082\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/b6a61563737b2e42790f8ea509fe1ddd76fa464f\"\u003e\u003ccode\u003eb6a6156\u003c/code\u003e\u003c/a\u003e fix: fully pin actions in composite action (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1080\"\u003e#1080\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/4c7a2151c538b739337dbbd759aaf440fa1991ac\"\u003e\u003ccode\u003e4c7a215\u003c/code\u003e\u003c/a\u003e fix: write out .gitignore/CACHEDIR.TAG to our dir (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1072\"\u003e#1072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/47cb9c300e07c3a8ca4d5b240dad1a178a65dcdb\"\u003e\u003ccode\u003e47cb9c3\u003c/code\u003e\u003c/a\u003e fix: ignore default selection for tags and keywords (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1057\"\u003e#1057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/63dcab98ecd4f784537a3c1fa1319bac6cbf2436\"\u003e\u003ccode\u003e63dcab9\u003c/code\u003e\u003c/a\u003e fix: more uv variables set (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1056\"\u003e#1056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/e0f64e6c3cb24e3f870f4df8dd38830e03546dce\"\u003e\u003ccode\u003ee0f64e6\u003c/code\u003e\u003c/a\u003e fix: recreate if broken symlinks are present (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/bf9095287afacc1f5b94e5da54f4dbed4ccce875\"\u003e\u003ccode\u003ebf90952\u003c/code\u003e\u003c/a\u003e tests: pin to working conda version (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1079\"\u003e#1079\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wntrblm/nox/commit/4ff681f169c4043ce3b3d19cba1eadd66720bf1d\"\u003e\u003ccode\u003e4ff681f\u003c/code\u003e\u003c/a\u003e fix: ignore forcecolor falsy (\u003ca href=\"https://redirect.github.com/wntrblm/nox/issues/1073\"\u003e#1073\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/wntrblm/nox/compare/2026.02.09...2026.04.10\"\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.9 to 0.15.20\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.20\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-25.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning instead of an error for unknown rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26113\"\u003e#26113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch \u003ccode\u003enoqa\u003c/code\u003e shebang handling in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26286\"\u003e#26286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26240\"\u003e#26240\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd versioning sections to custom crate READMEs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26317\"\u003e#26317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eruff_python_parser\u003c/code\u003e README for crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26315\"\u003e#26315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Clarify that \u003ccode\u003ePERF402\u003c/code\u003e applies to any iterable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26242\"\u003e#26242\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/dhruvmanila\"\u003e\u003ccode\u003e@​dhruvmanila\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/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.20\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.15.20\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFile\u003c/th\u003e\n\u003cth\u003ePlatform\u003c/th\u003e\n\u003cth\u003eChecksum\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz\"\u003eruff-aarch64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eApple Silicon macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz\"\u003eruff-x86_64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eIntel macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip\"\u003eruff-aarch64-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eARM64 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip\"\u003eruff-i686-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex86 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip\"\u003eruff-x86_64-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex64 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz\"\u003eruff-aarch64-unknown-linux-gnu.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eARM64 Linux\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz\"\u003eruff-i686-unknown-linux-gnu.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex86 Linux\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\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.20\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-25.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning instead of an error for unknown rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26113\"\u003e#26113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch \u003ccode\u003enoqa\u003c/code\u003e shebang handling in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26286\"\u003e#26286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26240\"\u003e#26240\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd versioning sections to custom crate READMEs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26317\"\u003e#26317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eruff_python_parser\u003c/code\u003e README for crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26315\"\u003e#26315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Clarify that \u003ccode\u003ePERF402\u003c/code\u003e applies to any iterable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26242\"\u003e#26242\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/dhruvmanila\"\u003e\u003ccode\u003e@​dhruvmanila\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/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.19\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-23.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport human-readable names when hovering suppression comments and in code actions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26114\"\u003e#26114\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFall back to default settings when editor-only settings are invalid (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26244\"\u003e#26244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix panic when inserting text at a notebook cell boundary (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26111\"\u003e#26111\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] Update fix suggestions for \u003ccode\u003e__floor__\u003c/code\u003e, \u003ccode\u003e__trunc__\u003c/code\u003e, \u003ccode\u003e__length_hint__\u003c/code\u003e, and \u003ccode\u003e__matmul__\u003c/code\u003e variants (\u003ccode\u003ePLC2801\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26239\"\u003e#26239\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid allocating when parsing single string literals (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26200\"\u003e#26200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid reallocating singleton call arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26223\"\u003e#26223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create source files for lint diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26226\"\u003e#26226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eOptimize formatter text width and indentation (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26236\"\u003e#26236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReserve capacity for builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26229\"\u003e#26229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip repeated-key checks for singleton dictionaries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26228\"\u003e#26228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ArrayVec for qualified name segments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26224\"\u003e#26224\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/f82a36b6baf8c0547a17bbde6c0d927ccd45d938\"\u003e\u003ccode\u003ef82a36b\u003c/code\u003e\u003c/a\u003e Bump 0.15.20 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26376\"\u003e#26376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/af329438b55d5aa8ca28725f17abbae63b5c815d\"\u003e\u003ccode\u003eaf32943\u003c/code\u003e\u003c/a\u003e Improve the summarise-ecosystem-results skill (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26378\"\u003e#26378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/485ebab5de692aad34720898cd80245b6092ba86\"\u003e\u003ccode\u003e485ebab\u003c/code\u003e\u003c/a\u003e Remove \u003ccode\u003eRUF076\u003c/code\u003e name from schema (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ef81835ce3da615346584dc446de0fe26bfc154b\"\u003e\u003ccode\u003eef81835\u003c/code\u003e\u003c/a\u003e [ty] Implement rust-analyzer's \u0026quot;Click for full compiler diagnostic\u0026quot; feature (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/572b31e2377a701a7365f069f6ef87002962cb2b\"\u003e\u003ccode\u003e572b31e\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26240\"\u003e#26240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f703f219d7fddd1a4abba9fa81e34773c185a4b9\"\u003e\u003ccode\u003ef703f21\u003c/code\u003e\u003c/a\u003e Allow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0d726b28ee35413926145ffef4ac1143cae9ea1e\"\u003e\u003ccode\u003e0d726b2\u003c/code\u003e\u003c/a\u003e [ty] Reuse equality semantics for membership compatibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25955\"\u003e#25955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/dbe6e9848c3f78fdaf543cfc000939ebc73b5f00\"\u003e\u003ccode\u003edbe6e98\u003c/code\u003e\u003c/a\u003e [ty] Infer definite equality comparison results (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26337\"\u003e#26337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e700ea357a2196d76b58eb89b2031ddb5ca896e0\"\u003e\u003ccode\u003ee700ea3\u003c/code\u003e\u003c/a\u003e [ty] Prove TypedDict structural patterns exhaustive (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26285\"\u003e#26285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6a0d2ec93959d966430b8c39d4de5c3e8a88e911\"\u003e\u003ccode\u003e6a0d2ec\u003c/code\u003e\u003c/a\u003e [ty] Widen inferred class-valued instance attributes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26338\"\u003e#26338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.9...0.15.20\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` from 4.5.1 to 4.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier usage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.0 - 2026-04-21\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier\nusage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/commit/f35134b05028ec938ac605ae500fdf95462655d3\"\u003e\u003ccode\u003ef35134b\u003c/code\u003e\u003c/a\u003e v4.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2a51ffcb81f6c8ed2e6467913c3343a8800f3ab9\"\u003e\u003ccode\u003e2a51ffc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e from pre-commit/hook-impl-optional-hook-dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/d7dee322abfc765b042f2e3b872aab3c3a867610\"\u003e\u003ccode\u003ed7dee32\u003c/code\u003e\u003c/a\u003e make --hook-dir optional for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/965aeb1c680e8b526342153547f0ec014484c63d\"\u003e\u003ccode\u003e965aeb1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e from pre-commit/hook-impl-required\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2eacc064aa9b5bb33d3a0d84a234b475e34f3096\"\u003e\u003ccode\u003e2eacc06\u003c/code\u003e\u003c/a\u003e --hook-type is required for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f5678bf4ac35cffc0ff7174ad85f7fdc2a5c977e\"\u003e\u003ccode\u003ef5678bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3657\"\u003e#3657\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/054cc5bd6bb1b20faa1eefe09f0de3b68fceee94\"\u003e\u003ccode\u003e054cc5b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/5c0f3024d2524f6e029a4c333392fd9be9fb27f6\"\u003e\u003ccode\u003e5c0f302\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3652\"\u003e#3652\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/a5d91142676630f8130020b35e166e0c0e92b8f4\"\u003e\u003ccode\u003ea5d9114\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/129a1f5ca1eaee0c952a5e7a07faae305c5e15bc\"\u003e\u003ccode\u003e129a1f5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3641\"\u003e#3641\u003c/a\u003e from pre-commit/mxr-patch-1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.5.1...v4.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `argcomplete` from 3.6.3 to 3.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kislyuk/argcomplete/releases\"\u003eargcomplete's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.7.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEscape glob and brace metacharacters in quote_completions (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eQuote prefix passed to compgen in FilesCompleter (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated easy_install script detection\u003c/li\u003e\n\u003cli\u003eType hinting improvements\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/kislyuk/argcomplete/blob/main/Changes.rst\"\u003eargcomplete's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChanges for v3.7.0 (2026-06-30)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eEscape glob and brace metacharacters in quote_completions (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eQuote prefix passed to compgen in FilesCompleter (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove deprecated easy_install script detection\u003c/li\u003e\n\u003cli\u003eType hinting improvements\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/kislyuk/argcomplete/commit/6b4528d801bc38e4be7f374ffda416fd82785529\"\u003e\u003ccode\u003e6b4528d\u003c/code\u003e\u003c/a\u003e v3.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/81608a8891885dcc60adc06c45baf2dcb2e8b61b\"\u003e\u003ccode\u003e81608a8\u003c/code\u003e\u003c/a\u003e Use Python 3.15 in test matrix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/a59f151dda6a42d721410a165f62972f50391e5a\"\u003e\u003ccode\u003ea59f151\u003c/code\u003e\u003c/a\u003e Update Python classifiers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/598c77951c259b8a1b1b2c9769298c3a93e2bb5d\"\u003e\u003ccode\u003e598c779\u003c/code\u003e\u003c/a\u003e Add test for \u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/552\"\u003e#552\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/d543c6fea9f24713995d153e48642566e4a80c21\"\u003e\u003ccode\u003ed543c6f\u003c/code\u003e\u003c/a\u003e escape glob and brace metacharacters in quote_completions (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/24ea0e3ba5f11c72e9debece9aa1685584f52ac1\"\u003e\u003ccode\u003e24ea0e3\u003c/code\u003e\u003c/a\u003e Upgrade GHA to latest supported runners and actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/8e6423bed6c79c86f0dd54d9d15a2f485902bb89\"\u003e\u003ccode\u003e8e6423b\u003c/code\u003e\u003c/a\u003e type hinting fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/93eab006915f94a0e31af2b115c4680b69592ae5\"\u003e\u003ccode\u003e93eab00\u003c/code\u003e\u003c/a\u003e Add test for \u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/551\"\u003e#551\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/5fefb4597387eada27b1e312436298931f0439ed\"\u003e\u003ccode\u003e5fefb45\u003c/code\u003e\u003c/a\u003e quote prefix passed to compgen in FilesCompleter (\u003ca href=\"https://redirect.github.com/kislyuk/argcomplete/issues/551\"\u003e#551\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kislyuk/argcomplete/commit/8e5ad6a5a702e5529f61ae9a63f720beda68ffaf\"\u003e\u003ccode\u003e8e5ad6a\u003c/code\u003e\u003c/a\u003e Remove easy_install script detection\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/kislyuk/argcomplete/compare/v3.6.3...v3.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `distlib` from 0.4.0 to 0.4.3\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/distlib/blob/master/CHANGES.rst\"\u003edistlib's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.4.3\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\nReleased: 2026-06-12\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eresources\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved too-restrictive check for escaping resources.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e0.4.2\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eReleased: 2026-06-08\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003elocators\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix URL percent-encoding using space-padding instead of zero-padding. Thanks to\nKadir Can Ozden for the patch.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHarden decompression against malicious input. Thanks to tonghuaroot for the patch,\nwhich was adapted slightly.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003emanifest\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse os.lstat in findall to correctly detect symlinked directories. Thanks to\nKadir Can Ozden for the patch.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003emetadata\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eImprove logic to incorporate newer metadata versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eresources\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure that constructed resource paths don't escape the package. Thanks to\ntonghuaroot for the patch.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eutil\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ca href=\"https://redirect.github.com/pypa/distlib/issues/255\"\u003e#255\u003c/a\u003e: Update cache_from_source() for Python 3.15. Thanks to Victor Stinner\nfor the patch.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCheck during unarchiving that the destination directory isn't escaped via symlinks.\nThanks to tonghuaroot for the patch.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved performance of normalize_name using dual replace. Thanks to\nHugo van Kemenade for the patch.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ewheel\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/pypa/distlib/commit/3f4a377c8b164ba1c22a2a61de560f6f80ca7394\"\u003e\u003ccode\u003e3f4a377\u003c/code\u003e\u003c/a\u003e Changes for 0.4.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/5ee19e6bac8248d7d5246d498d79abe96faa89a5\"\u003e\u003ccode\u003e5ee19e6\u003c/code\u003e\u003c/a\u003e Relax too-strict escaping check for resources.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/f0e3d1ae3e694045b44a5b0e0a50177429ca1b06\"\u003e\u003ccode\u003ef0e3d1a\u003c/code\u003e\u003c/a\u003e Bump version.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/06e010db2ddc9497d5bbd886747ff4990ac528a9\"\u003e\u003ccode\u003e06e010d\u003c/code\u003e\u003c/a\u003e Add upper version limit for setuptools for build, to keep metadata version to...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/8b5aa55adf617bd3e81da716d44d034d7938f503\"\u003e\u003ccode\u003e8b5aa55\u003c/code\u003e\u003c/a\u003e Added tag 0.4.2 for changeset 5295c0ceb419\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/8183ea60e83bf021bf7d6903f4a6b3c8df0905a6\"\u003e\u003ccode\u003e8183ea6\u003c/code\u003e\u003c/a\u003e Update change log.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/55ca016b2d597ac5eecb10b6c43b4d9652b73462\"\u003e\u003ccode\u003e55ca016\u003c/code\u003e\u003c/a\u003e Changes for 0.4.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/7e282abde14bebec2c0e5342faa5a420e70799ca\"\u003e\u003ccode\u003e7e282ab\u003c/code\u003e\u003c/a\u003e Update metadata logic to incorporate newer versions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/fa4ea501acb14baa31df6b823006da4fd1f8e0dd\"\u003e\u003ccode\u003efa4ea50\u003c/code\u003e\u003c/a\u003e Remove non-portable portion of test.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/distlib/commit/e06a1d5fb237cff35c0bd58fe917ef44c84e41cf\"\u003e\u003ccode\u003ee06a1d5\u003c/code\u003e\u003c/a\u003e Further refine tests.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/distlib/compare/0.4.0...0.4.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.25.2 to 3.29.5\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.5\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eserialise read/write release rollback against a concurrent acquire 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/563\"\u003etox-dev/filelock#563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft_rw): refresh held marker through the verified fd 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/565\"\u003etox-dev/filelock#565\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eonly unlink the writer marker on release if it is still ours 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/566\"\u003etox-dev/filelock#566\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edon't follow symlinks in raise_on_not_writable_file 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/567\"\u003etox-dev/filelock#567\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edon't complete a writer acquire on a peer's reclaimed marker 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/571\"\u003etox-dev/filelock#571\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003euse a private break name in break_lock_file 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/576\"\u003etox-dev/filelock#576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eKeep Unix lock files after release by \u003ca href=\"https://github.com/itscloud0\"\u003e\u003ccode\u003e@​itscloud0\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/577\"\u003etox-dev/filelock#577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: fix Windows type check broken by \u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/577\"\u003e#577\u003c/a\u003e 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/580\"\u003etox-dev/filelock#580\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eroll back a read acquire's open transaction when its SELECT fails 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/575\"\u003etox-dev/filelock#575\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003elifetime: reject negative, non-numeric, and bool values at the setter 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/573\"\u003etox-dev/filelock#573\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/itscloud0\"\u003e\u003ccode\u003e@​itscloud0\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/577\"\u003etox-dev/filelock#577\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/573\"\u003etox-dev/filelock#573\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.4...3.29.5\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.4...3.29.5\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.4\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock 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/561\"\u003etox-dev/filelock#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error 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/562\"\u003etox-dev/filelock#562\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.3...3.29.4\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.3...3.29.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push 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/557\"\u003etox-dev/filelock#557\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder 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/556\"\u003etox-dev/filelock#556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job 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/559\"\u003etox-dev/filelock#559\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(ci): publish from release.yaml on tag push 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/560\"\u003etox-dev/filelock#560\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.2...3.29.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.2...3.29.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo 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/549\"\u003etox-dev/filelock#549\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed 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/551\"\u003etox-dev/filelock#551\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us 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/553\"\u003etox-dev/filelock#553\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/tox-dev/filelock/commit/be562277636140c26578a98a2a487fdb6f446ee6\"\u003e\u003ccode\u003ebe56227\u003c/code\u003e\u003c/a\u003e lifetime: reject negative, non-numeric, and bool values at the setter (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/573\"\u003e#573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1f6cde4ab93d30dfe9867d462e3e1055aaba01c5\"\u003e\u003ccode\u003e1f6cde4\u003c/code\u003e\u003c/a\u003e roll back a read acquire's open transaction when its SELECT fails (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/575\"\u003e#575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/c76dee6674011e8ba28a5b2e3285af4a738e4109\"\u003e\u003ccode\u003ec76dee6\u003c/code\u003e\u003c/a\u003e test: fix Windows type check broken by \u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/577\"\u003e#577\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/580\"\u003e#580\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/ea594a5cbca43cec92d62f740a8e510a7db0ceed\"\u003e\u003ccode\u003eea594a5\u003c/code\u003e\u003c/a\u003e Keep Unix lock files after release (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/577\"\u003e#577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7595a7b48738642ace65a8fbe54bc03ae4317708\"\u003e\u003ccode\u003e7595a7b\u003c/code\u003e\u003c/a\u003e use a private break name in break_lock_file (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/576\"\u003e#576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0b707fe1a7edf5f5e421d2e0c63acd82017011d4\"\u003e\u003ccode\u003e0b707fe\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/572\"\u003e#572\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/22ecd6a51dacfad30a96d62f291d2707dccf4efb\"\u003e\u003ccode\u003e22ecd6a\u003c/code\u003e\u003c/a\u003e don't complete a writer acquire on a peer's reclaimed marker (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/571\"\u003e#571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/70ecdb27fedb590ffdb44722c71355d99644148d\"\u003e\u003ccode\u003e70ecdb2\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/570\"\u003e#570\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/dbcc83a38bab6435e3809594b9de01aa037f2b39\"\u003e\u003ccode\u003edbcc83a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/568\"\u003e#568\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/022394c34bb61271a813c038cf11b7e886b8123c\"\u003e\u003ccode\u003e022394c\u003c/code\u003e\u003c/a\u003e don't follow symlinks in raise_on_not_writable_file (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/567\"\u003e#567\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.25.2...3.29.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `humanize` from 4.15.0 to 4.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-humanize/humanize/releases\"\u003ehumanize's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Latvian language localization (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/301\"\u003e#301\u003c/a\u003e) \u003ca href=\"https://github.com/EPoikans\"\u003e\u003ccode\u003e@​EPoikans\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd i18n support for \u003ccode\u003enaturalsize()\u003c/code\u003e and French translation (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/294\"\u003e#294\u003c/a\u003e) \u003ca href=\"https://github.com/Yibomao\"\u003e\u003ccode\u003e@​Yibomao\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePerformance improvements: 1.07x - 8.4x (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/315\"\u003e#315\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLazy imports for Python 3.15+ (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/335\"\u003e#335\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop experimental Python 3.13 free-threaded (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/336\"\u003e#336\u003c/a\u003e) \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRefactor: simplify \u003ccode\u003escientific()\u003c/code\u003e and extract \u003ccode\u003e_SUPERSCRIPT_MAP\u003c/code\u003e constant (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/313\"\u003e#313\u003c/a\u003e) \u003ca href=\"https://github.com/maayanmatsliah-tech\"\u003e\u003ccode\u003e@​maayanmatsliah-tech\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003enaturalsize()\u003c/code\u003e rounding rollover at unit boundaries (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/329\"\u003e#329\u003c/a\u003e) \u003ca href=\"https://github.com/patchwright\"\u003e\u003ccode\u003e@​patchwright\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCarry \u003ccode\u003emetric()\u003c/code\u003e to the next SI prefix when rounding reaches 1000 (\u003ca href=\"https://redirect.github.com/python-humanize/humanize/issues/328\"\u003e#328\u003c/a\u003e) \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eStop printing two minus signs in fractional for a negative mixed number (\u003ca href=\"https://redirect.githu...\n\n_Description has been truncated_","html_url":"https://github.com/de-odex/whoosh-novo/pull/166","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/de-odex%2Fwhoosh-novo/issues/166","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/166/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-05T14:51:49.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4813279223","node_id":"PR_kwDORDrEC87uDnE5","number":220,"state":"closed","title":"chore(deps): bump the python-deps group across 1 directory with 24 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-06T00:22:01.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-05T14:51:49.000Z","updated_at":"2026-07-06T00:22:02.000Z","time_to_close":34212,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-deps","update_count":24,"packages":[{"name":"aiohappyeyeballs","old_version":"2.6.2","new_version":"2.7.1","repository_url":"https://github.com/aio-libs/aiohappyeyeballs"},{"name":"anyio","old_version":"4.14.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"boto3","old_version":"1.43.30","new_version":"1.43.40","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.30","new_version":"1.43.40","repository_url":"https://github.com/boto/botocore"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"croniter","old_version":"6.0.0","new_version":"6.2.3","repository_url":"https://github.com/pallets-eco/croniter"},{"name":"google-auth","old_version":"2.55.0","new_version":"2.55.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-cloud-resource-manager","old_version":"1.17.0","new_version":"1.18.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"langchain","old_version":"1.3.9","new_version":"1.3.11","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-core","old_version":"1.4.7","new_version":"1.4.8","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-google-genai","old_version":"4.2.5","new_version":"4.2.6","repository_url":"https://github.com/langchain-ai/langchain-google"},{"name":"langgraph","old_version":"1.2.5","new_version":"1.2.7","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.8.16","new_version":"0.9.7","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"msgpack","old_version":"1.2.0","new_version":"1.2.1","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"redis","old_version":"8.0.0","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"s3transfer","old_version":"0.18.0","new_version":"0.19.0","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.63.0","new_version":"2.64.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"tzlocal","old_version":"5.4","new_version":"5.4.4","repository_url":"https://github.com/regebro/tzlocal"},{"name":"uuid-utils","old_version":"0.16.1","new_version":"0.16.2","repository_url":"https://github.com/aminalaee/uuid-utils"},{"name":"uvicorn","old_version":"0.49.0","new_version":"0.50.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"wcwidth","old_version":"0.8.1","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"xxhash","old_version":"3.7.0","new_version":"3.8.0","repository_url":"https://github.com/ifduyue/python-xxhash"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-deps group with 24 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [aiohappyeyeballs](https://github.com/aio-libs/aiohappyeyeballs) | `2.6.2` | `2.7.1` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.0` | `4.14.1` |\n| [boto3](https://github.com/boto/boto3) | `1.43.30` | `1.43.40` |\n| [botocore](https://github.com/boto/botocore) | `1.43.30` | `1.43.40` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.6.17` |\n| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [croniter](https://github.com/pallets-eco/croniter) | `6.0.0` | `6.2.3` |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.55.0` | `2.55.1` |\n| [google-cloud-resource-manager](https://github.com/googleapis/google-cloud-python) | `1.17.0` | `1.18.0` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.3.9` | `1.3.11` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.4.7` | `1.4.8` |\n| [langchain-google-genai](https://github.com/langchain-ai/langchain-google) | `4.2.5` | `4.2.6` |\n| [langgraph](https://github.com/langchain-ai/langgraph) | `1.2.5` | `1.2.7` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.8.16` | `0.9.7` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.2.0` | `1.2.1` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.0.1` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.18.0` | `0.19.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.63.0` | `2.64.0` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [tzlocal](https://github.com/regebro/tzlocal) | `5.4` | `5.4.4` |\n| [uuid-utils](https://github.com/aminalaee/uuid-utils) | `0.16.1` | `0.16.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.49.0` | `0.50.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.8.1` | `0.8.2` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.7.0` | `3.8.0` |\n\n\nUpdates `aiohappyeyeballs` from 2.6.2 to 2.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/releases\"\u003eaiohappyeyeballs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1 (2026-07-01)\u003c/h2\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse defaultdict to help with performance (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/239\"\u003e#239\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactoring\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCollapse collect-then-remove pattern in utils helpers (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/227\"\u003e#227\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/0dd3fd16fe394eb8493000dc9b9894fad3ca3190\"\u003e\u003ccode\u003e0dd3fd1\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMerge identical except blocks in _connect_sock cleanup (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/229\"\u003e#229\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/b7c186e3242eb4d6eaf0918857a99c263b3186fb\"\u003e\u003ccode\u003eb7c186e\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSimplify _interleave_addrinfos family grouping (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/226\"\u003e#226\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/fdf6548a5f8b38e45ad7cee8add3c3a7e34e2805\"\u003e\u003ccode\u003efdf6548\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eDetailed Changes\u003c/strong\u003e: \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.7.0...v2.7.1\"\u003ev2.7.0...v2.7.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.7.0 (2026-05-20)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Python 3.14 support (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/224\"\u003e#224\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/10e7d4341666605de295dd00da716e30002e78c2\"\u003e\u003ccode\u003e10e7d43\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eDetailed Changes\u003c/strong\u003e: \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.6.2...v2.7.0\"\u003ev2.6.2...v2.7.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/aio-libs/aiohappyeyeballs/blob/main/CHANGELOG.md\"\u003eaiohappyeyeballs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1 (2026-07-01)\u003c/h2\u003e\n\u003ch3\u003ePerformance improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse defaultdict to help with performance (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactoring\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify _interleave_addrinfos family grouping (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/fdf6548a5f8b38e45ad7cee8add3c3a7e34e2805\"\u003e\u003ccode\u003efdf6548\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCollapse collect-then-remove pattern in utils helpers (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/0dd3fd16fe394eb8493000dc9b9894fad3ca3190\"\u003e\u003ccode\u003e0dd3fd1\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMerge identical except blocks in _connect_sock cleanup (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/b7c186e3242eb4d6eaf0918857a99c263b3186fb\"\u003e\u003ccode\u003eb7c186e\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0 (2026-05-20)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd python 3.14 support (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/10e7d4341666605de295dd00da716e30002e78c2\"\u003e\u003ccode\u003e10e7d43\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/aio-libs/aiohappyeyeballs/commit/4dfc926e30eea8d24c1a71602d73c0e9a895c191\"\u003e\u003ccode\u003e4dfc926\u003c/code\u003e\u003c/a\u003e 2.7.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e perf: use defaultdict to help with performance (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/239\"\u003e#239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/338277badfb25fc38759ce38ab9ea2c20ec1bfff\"\u003e\u003ccode\u003e338277b\u003c/code\u003e\u003c/a\u003e chore: stop tracking .DS_Store files (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/251\"\u003e#251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/16978694944ed7fb5e7b49a173160144ccac45bc\"\u003e\u003ccode\u003e1697869\u003c/code\u003e\u003c/a\u003e ci: add codspeed benchmark suite for addrinfo reordering hot paths (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/250\"\u003e#250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/d40a848cd2262b435242646fa8e220300bcd6952\"\u003e\u003ccode\u003ed40a848\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump starlette from 1.0.1 to 1.3.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/242\"\u003e#242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/51d42669b2b94a78c6d4bd059e449b8ef51c6646\"\u003e\u003ccode\u003e51d4266\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump cryptography from 46.0.7 to 48.0.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/243\"\u003e#243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/2df44b3987d3c887a8493ba19259c63588226d6c\"\u003e\u003ccode\u003e2df44b3\u003c/code\u003e\u003c/a\u003e chore(pre-commit.ci): pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/241\"\u003e#241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/3e3cb615f00bfb4d29c30e0c86c897f4de8fb02d\"\u003e\u003ccode\u003e3e3cb61\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.3 to 9.1.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/922dcd79a66d67fdd98a5f9b7587c4f8cda44653\"\u003e\u003ccode\u003e922dcd7\u003c/code\u003e\u003c/a\u003e chore(deps-ci): bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/245\"\u003e#245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/70461c583a8cf3c6fa85b8c48b8e4b576cee8083\"\u003e\u003ccode\u003e70461c5\u003c/code\u003e\u003c/a\u003e ci: drop .github/FUNDING.yml to inherit org-wide config (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/247\"\u003e#247\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.6.2...v2.7.1\"\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.0 to 4.14.1\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.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed teardown of higher-scoped async fixtures failing on asyncio with \u003ccode\u003eRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\u003c/code\u003e when an async test raise an outcome exception (e.g., \u003ccode\u003epytest.skip()\u003c/code\u003e, \u003ccode\u003epytest.xfail()\u003c/code\u003e, or \u003ccode\u003epytest.fail()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1179\"\u003e#1179\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting a value of \u003ccode\u003e0\u003c/code\u003e when the limiter was instantiated outside of an event loop, contradicting the documented behavior of allowing 0 total tokens (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1183\"\u003e#1183\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\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/agronholm/anyio/commit/149b9e907618fadf6840a4d3cebad533b0c7d033\"\u003e\u003ccode\u003e149b9e9\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/377518cd1160314f2fdf74f356ae9e848c94a065\"\u003e\u003ccode\u003e377518c\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6 to 7 in the github-actions group (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b42a2f5e8e9910d0c57b970f9a747427a9da26f0\"\u003e\u003ccode\u003eb42a2f5\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1185\"\u003e#1185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/3ceb6ffbfa89be715f444550883356fbfbc13154\"\u003e\u003ccode\u003e3ceb6ff\u003c/code\u003e\u003c/a\u003e Allow 0 tokens in a CapacityLimiter instantiated outside an event loop (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1183\"\u003e#1183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/e10d1db74f7a59cb283a1e4b3b22227da11c6f07\"\u003e\u003ccode\u003ee10d1db\u003c/code\u003e\u003c/a\u003e Add missing await to open_file() in file I/O concurrency example (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1182\"\u003e#1182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1dbc3b62256e5877bcf610aca98ba6e450d14c20\"\u003e\u003ccode\u003e1dbc3b6\u003c/code\u003e\u003c/a\u003e OutcomeException should not discard test runner_task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.0...4.14.1\"\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.30 to 1.43.40\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/dd59a59bbd400538f20d03782991907321f3cac7\"\u003e\u003ccode\u003edd59a59\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.40'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b416ca0ee262545bc14dad610825800d0e1afdfe\"\u003e\u003ccode\u003eb416ca0\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.40\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b228d052a91bd2a2b6af120e80877ecffd413ad0\"\u003e\u003ccode\u003eb228d05\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/121db7a5a3e37a6d76a1356bf93646616bd04c5b\"\u003e\u003ccode\u003e121db7a\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/00141f6a0d73fc19d7edb52cb054317a5c71fe43\"\u003e\u003ccode\u003e00141f6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/310317d679150d6c78c9af133dde716a0833bf0b\"\u003e\u003ccode\u003e310317d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/ff7c1cfdabd6fc5cc0869d521e25f6fa19a7582b\"\u003e\u003ccode\u003eff7c1cf\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/805c6837a36f52c0b35235bc12ed9243c91b6e9c\"\u003e\u003ccode\u003e805c683\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS to shared Python SDK and CLI team (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4809\"\u003e#4809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/efcfb6506ce686aa8a09908d835ba2b9731209a5\"\u003e\u003ccode\u003eefcfb65\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.38'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d7aa957044d50c107fcd2ba9049d1f3a9056c473\"\u003e\u003ccode\u003ed7aa957\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.38' into develop\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.30...1.43.40\"\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.30 to 1.43.40\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c1894c100916579eef4df96e2b330973b9d715f0\"\u003e\u003ccode\u003ec1894c1\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.40'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/fc560a48e6d6a2342a28e32f0f59668efa347179\"\u003e\u003ccode\u003efc560a4\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.40\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/420c5848eac57be3c4dcc5c9b1f36085de397695\"\u003e\u003ccode\u003e420c584\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e00fad7da41412453284c5db9da30283d581a8e7\"\u003e\u003ccode\u003ee00fad7\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/3f295440320638cc50db35e0f599e98555c80b7a\"\u003e\u003ccode\u003e3f29544\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/db6ca713163f4116d23573937389da352f9953b6\"\u003e\u003ccode\u003edb6ca71\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/97d313f018d34bbf38b68296352aec0bc2441745\"\u003e\u003ccode\u003e97d313f\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/bcfbd50cca39b6ed8cebf81ba3ad33eaa69bffc5\"\u003e\u003ccode\u003ebcfbd50\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/0813a0feec54b2f4048dcc163363f0a231272e3b\"\u003e\u003ccode\u003e0813a0f\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/ea9157a08919bdf3daceb2176fabbe83535849f5\"\u003e\u003ccode\u003eea9157a\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS to shared Python SDK and CLI team (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3740\"\u003e#3740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.30...1.43.40\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.5.20 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.05.20...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.1 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\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\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.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `croniter` from 6.0.0 to 6.2.3\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/croniter/blob/main/CHANGELOG.rst\"\u003ecroniter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.3 (2026-07-02)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Fix quadratic expansion of comma-separated range lists for a large speed-up on expressions with many ranges. [1d79fc6, [#231](https://github.com/pallets-eco/croniter/issues/231), @alhudz]\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Reject a zero step (e.g. ``5-5/0``) in equal and reversed cron ranges instead of silently accepting it. [ab27767, [#232](https://github.com/pallets-eco/croniter/issues/232), @alhudz]\n- Fix ``expand_from_start_time`` month low-bound off-by-one so stepped month ranges start on the correct month. [f329964, [#235](https://github.com/pallets-eco/croniter/issues/235), @alhudz]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eFix zizmor-reported security findings in GitHub Actions workflows. [ed19f94, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eBump pinned build and CI dependencies via dependabot.\u003c/li\u003e\n\u003cli\u003eUpgrade locked development and build dependencies (\u003ccode\u003euv lock --upgrade\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.2 (2026-03-15)\u003c/h2\u003e\n\u003cp\u003ePackaging\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Switch build backend from ``flit_core`` to ``hatchling`` with pinned dependencies. [4cce160]\n- Add PEP 639 license expression (``license = \u0026amp;quot;MIT\u0026amp;quot;``) to project metadata. [4cce160]\n- Pin all GitHub Actions to SHA hashes across CI workflows. [4cce160]\n- Add dependabot for automated dependency updates. [4cce160]\n- Add zizmor workflow for CI security scanning. [4cce160]\n\n\n6.2.1 (2026-03-15)\n------------------\n\nBugfixes\n~~~~~~~~\n- Fix ``get_prev`` skipping Feb 29 on leap years for day-of-month expressions. [441a0b5, [#203](https://github.com/pallets-eco/croniter/issues/203), @Souls-R]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eLicense :: OSI Approved :: MIT License\u003c/code\u003e classifier. [270cbbc, \u003ca href=\"https://github.com/cdheiser\"\u003e\u003ccode\u003e@​cdheiser\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2026-03-14)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eW\u003c/code\u003e (nearest weekday) in the day-of-month field. [c79d88a]\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eprecision_in_seconds\u003c/code\u003e parameter to \u003ccode\u003ematch()\u003c/code\u003e and \u003ccode\u003ematch_range()\u003c/code\u003e to allow overriding the default matching precision. [7415d1e, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/58\"\u003e#58\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/pallets-eco/croniter/commit/22b59e05f5ca485c45596b2a9b580fddffbf753f\"\u003e\u003ccode\u003e22b59e0\u003c/code\u003e\u003c/a\u003e Prepare for release 6.2.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/236\"\u003e#236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ab277671adc8e446e8dc7f1e939eabf024b6199e\"\u003e\u003ccode\u003eab27767\u003c/code\u003e\u003c/a\u003e reject zero step in equal and reversed cron ranges (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/232\"\u003e#232\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/f329964223eeb29e7788b1a9d615b525148fec96\"\u003e\u003ccode\u003ef329964\u003c/code\u003e\u003c/a\u003e fix expand_from_start_time month low bound off-by-one (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/235\"\u003e#235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/9810279c20030954e2f1ed2cf5f1d34b98c6b07f\"\u003e\u003ccode\u003e9810279\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/233\"\u003e#233\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/d051aaf6342fbe9c559b9fcd99e6fb6f3bb63cb7\"\u003e\u003ccode\u003ed051aaf\u003c/code\u003e\u003c/a\u003e Bump hatchling from 1.29.0 to 1.30.1 in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/1d79fc6555fb9208e290e0af10194eec638ae01c\"\u003e\u003ccode\u003e1d79fc6\u003c/code\u003e\u003c/a\u003e fix quadratic expansion of comma-separated range lists (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/231\"\u003e#231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ed19f94c472ef665598693a554e6a5555be41f7b\"\u003e\u003ccode\u003eed19f94\u003c/code\u003e\u003c/a\u003e Fix zizmor-reported security findings in GitHub Actions workflows (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/82657c37b873319570fee74c1864cb4d6153f543\"\u003e\u003ccode\u003e82657c3\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/229\"\u003e#229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/8e13827f77358beabf75245ad37d31a581cb6d1e\"\u003e\u003ccode\u003e8e13827\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/228\"\u003e#228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/e55d70bf2288e25c1ddf850fde703d56888772f2\"\u003e\u003ccode\u003ee55d70b\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group across 1 directory (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/225\"\u003e#225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/croniter/compare/6.0.0...6.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-auth` from 2.55.0 to 2.55.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-auth's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-auth: v2.55.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.55.0...google-auth-v2.55.1\"\u003e2.55.1\u003c/a\u003e (2026-06-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e lower regional access boundary logs from warning to debug. (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17571\"\u003e#17571\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/1ef418362c1a69e6bbe6f78741b53dc1f3e7b301\"\u003e1ef4183\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17515\"\u003e#17515\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/googleapis/google-cloud-python/commit/900d51fcc122464eb3611589f6f9a9c55a85598f\"\u003e\u003ccode\u003e900d51f\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17543\"\u003e#17543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/1ef418362c1a69e6bbe6f78741b53dc1f3e7b301\"\u003e\u003ccode\u003e1ef4183\u003c/code\u003e\u003c/a\u003e fix(auth): lower regional access boundary logs from warning to debug. (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17571\"\u003e#17571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/bd782cf279ae700f56d40702d4ef25ef89e2ff9b\"\u003e\u003ccode\u003ebd782cf\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-bigtable (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17575\"\u003e#17575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/57ebaa3c244a9fa97d3e6db206126c504f4b954f\"\u003e\u003ccode\u003e57ebaa3\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-firestore (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17577\"\u003e#17577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/140d86fe6181a4d6f831df8cdc7d86facf8ebe00\"\u003e\u003ccode\u003e140d86f\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-compute (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17576\"\u003e#17576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/39b252f4effe7e8915efa8796d90fd29f356bf96\"\u003e\u003ccode\u003e39b252f\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-spanner (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17578\"\u003e#17578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/421eebdb31d526a6d5ba27c433cf2803d7619be3\"\u003e\u003ccode\u003e421eebd\u003c/code\u003e\u003c/a\u003e feat: support interactive execution of deferred DataFrames in TableWidget (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/3619b29e10ae04623d101808cb98be5edbb483b4\"\u003e\u003ccode\u003e3619b29\u003c/code\u003e\u003c/a\u003e feat: support gemini-3.x models in loader and update default model to gemini-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/17bef417db646c0f9fcd91529cd06b2527ec5e3f\"\u003e\u003ccode\u003e17bef41\u003c/code\u003e\u003c/a\u003e test(bigquery-magics): make table_id parsing check version-agnostic (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17562\"\u003e#17562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/e68853162249b7a55f560f9a203d49984665c854\"\u003e\u003ccode\u003ee688531\u003c/code\u003e\u003c/a\u003e bigtable: add ValueBitmaskFilter for data client (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17567\"\u003e#17567\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.55.0...google-auth-v2.55.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-resource-manager` from 1.17.0 to 1.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-cloud-resource-manager's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-resource-manager: v1.18.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-resource-manager-v1.17.0...google-cloud-resource-manager-v1.18.0\"\u003e1.18.0\u003c/a\u003e (2026-06-22)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eregenerate google-cloud-[o-r] packages (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17075\"\u003e#17075\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f4bd0182d808ae73c3c6981e6ce3d565f78a6051\"\u003ef4bd018\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/googleapis/google-cloud-python/commit/a5ad18cbad0577b79917dfad2242a57dc21432e1\"\u003e\u003ccode\u003ea5ad18c\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17482\"\u003e#17482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f6937b33e31a4c3e884165b582442274a366a995\"\u003e\u003ccode\u003ef6937b3\u003c/code\u003e\u003c/a\u003e chore(main): release google-cloud-bigtable 2.39.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17497\"\u003e#17497\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/172302b809b0ff13267f18b5e7dd24be0dce2f70\"\u003e\u003ccode\u003e172302b\u003c/code\u003e\u003c/a\u003e ci(bigquery-storage): fix \u003ccode\u003ecore_deps_from_source\u003c/code\u003e and \u003ccode\u003eprerelease_deps\u003c/code\u003e by in...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/e7268785c6736c10c1337160b4d8606975062637\"\u003e\u003ccode\u003ee726878\u003c/code\u003e\u003c/a\u003e fix(bigframes): world-readable temp zip in create_cloud_function (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17522\"\u003e#17522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/2f893b1b53e7394655fd204d1f8a138212ad8227\"\u003e\u003ccode\u003e2f893b1\u003c/code\u003e\u003c/a\u003e fix: bump \u003ccode\u003e@​angular/common\u003c/code\u003e, \u003ccode\u003e@​angular/forms\u003c/code\u003e, \u003ccode\u003e@​angular/platform-browser\u003c/code\u003e and \u003ca href=\"https://github.com/ang\"\u003e\u003ccode\u003e@​ang\u003c/code\u003e\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f23063f9182cdec868c16afb80304892850fbe88\"\u003e\u003ccode\u003ef23063f\u003c/code\u003e\u003c/a\u003e fix: bump langsmith from 0.8.0 to 0.8.18 in /packages/bigframes (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17518\"\u003e#17518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/6fc45e3790c5a248dcec4b74799834c7b9219ef0\"\u003e\u003ccode\u003e6fc45e3\u003c/code\u003e\u003c/a\u003e fix: bump undici and \u003ccode\u003e@​angular/build\u003c/code\u003e in /packages/bigframes/bigframes/display/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/36b5b7ebb01030a2d0f10d49fe4827ddc79dde9a\"\u003e\u003ccode\u003e36b5b7e\u003c/code\u003e\u003c/a\u003e fix: bump msgpack from 1.1.1 to 1.2.1 in /packages/bigframes (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17520\"\u003e#17520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/11de93965831311445abacaec2d7baeef21f837d\"\u003e\u003ccode\u003e11de939\u003c/code\u003e\u003c/a\u003e tests: add Python 3.15 pre-release testing (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17517\"\u003e#17517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/025840544f5d4ab6a429d1cd9bdbb256c981aa0d\"\u003e\u003ccode\u003e0258405\u003c/code\u003e\u003c/a\u003e fix(bigquery): close GAPIC storage transport and auth sessions to prevent soc...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-resource-manager-v1.17.0...google-cloud-resource-manager-v1.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain` from 1.3.9 to 1.3.11\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain==1.3.11\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.3.10\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.3.11 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38377\"\u003e#38377\u003c/a\u003e)\nfix(langchain,openai): only set \u003ccode\u003estrict=True\u003c/code\u003e on tools for OpenAI-compatible models in \u003ccode\u003eProviderStrategy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38370\"\u003e#38370\u003c/a\u003e)\nchore: bump pydantic-settings from 2.12.0 to 2.14.2 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38279\"\u003e#38279\u003c/a\u003e)\nchore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38280\"\u003e#38280\u003c/a\u003e)\nchore: bump langsmith from 0.8.9 to 0.8.18 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38281\"\u003e#38281\u003c/a\u003e)\ndocs(langchain): document summarization prompt contract (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38256\"\u003e#38256\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain==1.3.10\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.3.9\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.3.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38255\"\u003e#38255\u003c/a\u003e)\nchore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38176\"\u003e#38176\u003c/a\u003e)\nchore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38179\"\u003e#38179\u003c/a\u003e)\nfix(langchain): switch summary format (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38171\"\u003e#38171\u003c/a\u003e)\nfix(langchain): detect provider strategy for dated \u003ccode\u003egpt-5.2\u003c/code\u003e/\u003ccode\u003egpt-5.4\u003c/code\u003e snapshots (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38222\"\u003e#38222\u003c/a\u003e)\nchore(langchain): improve typing in tests (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38163\"\u003e#38163\u003c/a\u003e)\nchore: bump pyjwt from 2.12.0 to 2.13.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38168\"\u003e#38168\u003c/a\u003e)\nrelease(openai): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38130\"\u003e#38130\u003c/a\u003e)\nhotfix(openai): switch version (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38123\"\u003e#38123\u003c/a\u003e)\nrelease(openai): 1.4.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38120\"\u003e#38120\u003c/a\u003e)\ndocs: refresh \u003ccode\u003eREADME\u003c/code\u003e installation and resources (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38119\"\u003e#38119\u003c/a\u003e)\ntest(core,langchain): update tests for explicit deserialization allowlists (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38118\"\u003e#38118\u003c/a\u003e)\nrelease(core): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38111\"\u003e#38111\u003c/a\u003e)\nrelease(anthropic): 1.4.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38105\"\u003e#38105\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/langchain-ai/langchain/commit/83e824922ac9bf3bf882347fecabd09614bccc37\"\u003e\u003ccode\u003e83e8249\u003c/code\u003e\u003c/a\u003e release(langchain): 1.3.11 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38377\"\u003e#38377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/6dd45c90f6c7e17dc9f1cd0c17035375fe655b1f\"\u003e\u003ccode\u003e6dd45c9\u003c/code\u003e\u003c/a\u003e hotfix(anthropic): regenerate cassette (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38376\"\u003e#38376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/4a837567c894363a729bae39a1b2bbe68cb89c41\"\u003e\u003ccode\u003e4a83756\u003c/code\u003e\u003c/a\u003e release(openai): 1.3.3 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38375\"\u003e#38375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/792c1a743e4471990e96e818957b3299517e7255\"\u003e\u003ccode\u003e792c1a7\u003c/code\u003e\u003c/a\u003e fix(openai): drop response item ids when \u003ccode\u003estore\u003c/code\u003e is false (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38372\"\u003e#38372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9f7e46fd7052960a402a059b2f78ec6248f78527\"\u003e\u003ccode\u003e9f7e46f\u003c/code\u003e\u003c/a\u003e release(anthropic): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38373\"\u003e#38373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9ef324c9abb534b4839bd2a42f4fb36b1ec3f3c3\"\u003e\u003ccode\u003e9ef324c\u003c/code\u003e\u003c/a\u003e fix(langchain,openai): only set \u003ccode\u003estrict=True\u003c/code\u003e on tools for OpenAI-compatible ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/05b5af17dca9a554b40e216554f5020ff05eb378\"\u003e\u003ccode\u003e05b5af1\u003c/code\u003e\u003c/a\u003e chore(infra): update workflow key name (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38367\"\u003e#38367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/8e8177487003026f25198068a137270fe369f2d4\"\u003e\u003ccode\u003e8e81774\u003c/code\u003e\u003c/a\u003e test(groq): xfail flaky tool choice test (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38365\"\u003e#38365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/946fbbbead849fc948e50ef726242c47013a43b7\"\u003e\u003ccode\u003e946fbbb\u003c/code\u003e\u003c/a\u003e fix(groq): replace deprecated Groq llama models (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38363\"\u003e#38363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/d11b1fc86369b970a8e6144fdcc4f5923f6e03cd\"\u003e\u003ccode\u003ed11b1fc\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38341\"\u003e#38341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain==1.3.9...langchain==1.3.11\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-core` from 1.4.7 to 1.4.8\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain-core's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-core==1.4.8\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.4.7\u003c/p\u003e\n\u003cp\u003echore: bump jupyter-server from 2.18.0 to 2.20.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38252\"\u003e#38252\u003c/a\u003e)\nchore: bump tornado from 6.5.6 to 6.5.7 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38184\"\u003e#38184\u003c/a\u003e)\nchore: bump bleach from 6.3.0 to 6.4.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38198\"\u003e#38198\u003c/a\u003e)\nrelease(core): 1.4.8 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38254\"\u003e#38254\u003c/a\u003e)\nrefactor(langchain-classic): remove code for Python \u0026lt; 3.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38194\"\u003e#38194\u003c/a\u003e)\nperf(core): memoize \u003ccode\u003eBaseTool.tool_call_schema\u003c/code\u003e subset model and cache \u003ccode\u003emodel_json_schema\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38073\"\u003e#38073\u003c/a\u003e)\nstyle(core): fix style in \u003ccode\u003elangchain_core\u003c/code\u003e/\u003ccode\u003e_security\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38189\"\u003e#38189\u003c/a\u003e)\nfix(core): preserve usage token details in v3 streaming events (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38021\"\u003e#38021\u003c/a\u003e)\nfix(core): \u003ccode\u003edisallow_any_generics\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38156\"\u003e#38156\u003c/a\u003e)\nchore(core): add mypy \u003ccode\u003ewarn_unreachable\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38109\"\u003e#38109\u003c/a\u003e)\ndocs: refresh \u003ccode\u003eREADME\u003c/code\u003e installation and resources (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38119\"\u003e#38119\u003c/a\u003e)\ntest(core,langchain): update tests for explicit deserialization allowlists (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38118\"\u003e#38118\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/langchain-ai/langchain/commit/15b0a4930b5306bb2174f16d92fe4b7837147d0a\"\u003e\u003ccode\u003e15b0a49\u003c/code\u003e\u003c/a\u003e chore: bump jupyter-server from 2.18.0 to 2.20.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38252\"\u003e#38252\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/612139f3af5f55b6311695fe6b139f0b6a6f68a2\"\u003e\u003ccode\u003e612139f\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38175\"\u003e#38175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/921e370a67af4254b948de94c4db4587f4716a84\"\u003e\u003ccode\u003e921e370\u003c/code\u003e\u003c/a\u003e chore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38176\"\u003e#38176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/1aabc26836e0c1220121a1f37e3a2691e20f2f19\"\u003e\u003ccode\u003e1aabc26\u003c/code\u003e\u003c/a\u003e chore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38179\"\u003e#38179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/8d51355f1f81825b72cb55303a39825ecbdc6b44\"\u003e\u003ccode\u003e8d51355\u003c/code\u003e\u003c/a\u003e chore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38180\"\u003e#38180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/0b1b7bb77a7e8cf98071e088da777ff52558f771\"\u003e\u003ccode\u003e0b1b7bb\u003c/code\u003e\u003c/a\u003e chore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38181\"\u003e#38181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/dfd062742271ad693c8bebe4ff1784cc4f408ade\"\u003e\u003ccode\u003edfd0627\u003c/code\u003e\u003c/a\u003e chore: bump starlette from 1.0.1 to 1.3.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38182\"\u003e#38182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/0269392514c41e44bfa0413c3f550c06e46d2e1e\"\u003e\u003ccode\u003e0269392\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38183\"\u003e#38183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/24d0b3791af52796b3fe5330f38e99b89afda4b1\"\u003e\u003ccode\u003e24d0b37\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38184\"\u003e#38184\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/f368854ec388f0a8e98b9e77aa8da83ebad1b978\"\u003e\u003ccode\u003ef368854\u003c/code\u003e\u003c/a\u003e chore: bump bleach from 6.2.0 to 6.4.0 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38195\"\u003e#38195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-core==1.4.7...langchain-core==1.4.8\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-google-genai` from 4.2.5 to 4.2.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain-google/releases\"\u003elangchain-google-genai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-google-genai==4.2.6\u003c/h2\u003e\n\u003cp\u003eChanges since libs/genai/v4.2.5\u003c/p\u003e\n\u003cp\u003erelease(genai): 4.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1871\"\u003e#1871\u003c/a\u003e)\nfix(genai): propagate generation config fields (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1870\"\u003e#1870\u003c/a\u003e)\nfix(genai): support constructor thinking config (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1869\"\u003e#1869\u003c/a\u003e)\nchore: bump langsmith from 0.8.0 to 0.8.18 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1860\"\u003e#1860\u003c/a\u003e)\ntest(genai,vertexai,community): refresh Gemini model references (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1856\"\u003e#1856\u003c/a\u003e)\nchore: bump types-google-cloud-ndb from 2.4.0.20260402 to 2.4.0.20260518 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1778\"\u003e#1778\u003c/a\u003e)\nchore: bump cryptography from 46.0.7 to 48.0.1 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1851\"\u003e#1851\u003c/a\u003e)\nchore: bump the major group across 1 directory with 3 updates (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1810\"\u003e#1810\u003c/a\u003e)\nfeat(genai,vertexai): add package version metadata (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1841\"\u003e#1841\u003c/a\u003e)\nfix(genai): stop docstring cross-refs resolving to wrong class (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1839\"\u003e#1839\u003c/a\u003e)\nchore(genai,vertexai): bump min version of \u003ccode\u003elangchain-core\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1835\"\u003e#1835\u003c/a\u003e)\ntest(genai): make tool-calling integration tests deterministic (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1833\"\u003e#1833\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/langchain-ai/langchain-google/commit/29780eac5b87e436f38ff11222b4ca37853fbacd\"\u003e\u003ccode\u003e29780ea\u003c/code\u003e\u003c/a\u003e release(genai): 4.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1871\"\u003e#1871\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/d2fb18c811f82cd86fc6b570e7b2b9ee67671ce8\"\u003e\u003ccode\u003ed2fb18c\u003c/code\u003e\u003c/a\u003e fix(genai): propagate generation config fields (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1870\"\u003e#1870\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/3086854c8e88dfc9f7d60d7dfabb9c8a7bc82297\"\u003e\u003ccode\u003e3086854\u003c/code\u003e\u003c/a\u003e fix(genai): support constructor thinking config (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1869\"\u003e#1869\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/32b18c6273749b7c9ece2c49b0ee13c13c659948\"\u003e\u003ccode\u003e32b18c6\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1858\"\u003e#1858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/f7d45305b825d08b72a9c42d9914d2fb53af1269\"\u003e\u003ccode\u003ef7d4530\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1860\"\u003e#1860\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/985efce66c0080da9ce6ae37d4c130873f301158\"\u003e\u003ccode\u003e985efce\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/community (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1859\"\u003e#1859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/eeb409fa0bd0ed86f0c885a7a9eae368c77af5d9\"\u003e\u003ccode\u003eeeb409f\u003c/code\u003e\u003c/a\u003e chore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1861\"\u003e#1861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/146a0168e5b75d62eb53db63262a18434b3fbc56\"\u003e\u003ccode\u003e146a016\u003c/code\u003e\u003c/a\u003e fix(vertexai): route labels to request envelope instead of \u003ccode\u003eGenerationConfig\u003c/code\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/bab2961434f405ab9efe64bdcc9065c85f95016f\"\u003e\u003ccode\u003ebab2961\u003c/code\u003e\u003c/a\u003e fix(vertexai): replace removed bison integration test models (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1863\"\u003e#1863\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/643f77297ad0d913bcc586d9c09c1a51f2c7805d\"\u003e\u003ccode\u003e643f772\u003c/code\u003e\u003c/a\u003e test(genai,vertexai,community): refresh Gemini model references (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1856\"\u003e#1856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain-google/compare/libs/genai/v4.2.5...libs/genai/v4.2.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langgraph` from 1.2.5 to 1.2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langgraph/releases\"\u003elanggraph's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elanggraph==1.2.7\u003c/h2\u003e\n\u003cp\u003eChanges since 1.2.6\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003erelease(langgraph): 1.2.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8223\"\u003e#8223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): snapshot \u003ccode\u003eDeltaChannel\u003c/code\u003e overwrite supersteps (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8125\"\u003e#8125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): Make \u003ccode\u003eOverwrite\u003c/code\u003e survive JSON roundtrips (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8127\"\u003e#8127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump redis in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7976\"\u003e#7976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8176\"\u003e#8176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump jupyterlab from 4.5.7 to 4.5.9 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8164\"\u003e#8164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): emit valid UUIDs for exit-mode delta task_ids for langgraph-api (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8165\"\u003e#8165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump bleach from 6.3.0 to 6.4.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8107\"\u003e#8107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump cryptography from 46.0.7 to 48.0.1 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8106\"\u003e#8106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump jupyter-server from 2.18.0 to 2.20.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8134\"\u003e#8134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump tornado from 6.5.6 to 6.5.7 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump pyjwt from 2.12.0 to 2.13.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8092\"\u003e#8092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003elanggraph==1.2.6\u003c/h2\u003e\n\u003cp\u003eChanges since 1.2.5\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003erelease(langgraph): 1.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8139\"\u003e#8139\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: nested subgraph inherits parent checkpoint_ns (regression in 1.2.3) (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8053\"\u003e#8053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: cancel running subgraphs on v3 stream abort [closes \u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8029\"\u003e#8029\u003c/a\u003e] (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8057\"\u003e#8057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erelease(cli): 0.4.30 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8101\"\u003e#8101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edocs: standardize package \u003ccode\u003eREADME.md\u003c/code\u003e structure (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8064\"\u003e#8064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump tornado from 6.5.5 to 6.5.6 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8063\"\u003e#8063\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/langchain-ai/langgraph/commit/5931a5f0b313feff24e2516a586c55601b868ac1\"\u003e\u003ccode\u003e5931a5f\u003c/code\u003e\u003c/a\u003e release(langgraph): 1.2.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8223\"\u003e#8223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/9a27693c64d3a0d6847dfe1c3d57e301cbf15bbf\"\u003e\u003ccode\u003e9a27693\u003c/code\u003e\u003c/a\u003e fix(langgraph): snapshot \u003ccode\u003eDeltaChannel\u003c/code\u003e overwrite supersteps (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8125\"\u003e#8125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/1b5ca0a1b1e1889879e43536fc5efd0739a3c479\"\u003e\u003ccode\u003e1b5ca0a\u003c/code\u003e\u003c/a\u003e fix(langgraph): Make \u003ccode\u003eOverwrite\u003c/code\u003e survive JSON roundtrips (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8127\"\u003e#8127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/d2f97191abc457954dff23ee1d9342516128ec01\"\u003e\u003ccode\u003ed2f9719\u003c/code\u003e\u003c/a\u003e chore(deps): bump redis in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7976\"\u003e#7976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/c1aad8b46053303c34151e4d05bad1ac0fd17ef5\"\u003e\u003ccode\u003ec1aad8b\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump starlette from 1.0.1 to 1.3.1 in /libs/sdk-py (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8104\"\u003e#8104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/d5dfeaf033227776efdd21e91e5dd200125d623a\"\u003e\u003ccode\u003ed5dfeaf\u003c/code\u003e\u003c/a\u003e chore(deps): bump starlette from 1.0.1 to 1.3.1 in /libs/cli (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8105\"\u003e#8105\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/bdb323efbbecdf9e417f8928471db4d9877bf332\"\u003e\u003ccode\u003ebdb323e\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/checkpoint-sqlite (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/31f69551b7b7f4c30b5ff7f5849e681a6c023be2\"\u003e\u003ccode\u003e31f6955\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/checkpoint-postgres...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/6b767dea5f61acb08a2f0248510201d35991c647\"\u003e\u003ccode\u003e6b767de\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.2 to 0.8.18 in /libs/checkpoint-conforma...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/e6574a854fcb60bb47e9f2ee463e01662a6d1a91\"\u003e\u003ccode\u003ee6574a8\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/cli (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8172\"\u003e#8172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langgraph/compare/1.2.5...1.2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langsmith` from 0.8.16 to 0.9.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langsmith-sdk/releases\"\u003elangsmith's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.9.7\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(integrations): add Google ADK Live voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3115\"\u003elangchain-ai/langsmith-sdk#3115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): attribute voice traces via ls_integration metadata by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3144\"\u003elangchain-ai/langsmith-sdk#3144\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): set ls_provider/ls_model_name on voice llm runs for cost by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3145\"\u003elangchain-ai/langsmith-sdk#3145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(release): bump version to 0.9.7 by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3153\"\u003elangchain-ai/langsmith-sdk#3153\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/langchain-ai/langsmith-sdk/compare/v0.9.6...v0.9.7\"\u003ehttps://github.com/langchain-ai/langsmith-sdk/compare/v0.9.6...v0.9.7\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev0.9.6\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(integrations): add Pipecat voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3112\"\u003elangchain-ai/langsmith-sdk#3112\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): add LiveKit voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3113\"\u003elangchain-ai/langsmith-sdk#3113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): add OpenAI Realtime voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3114\"\u003elangchain-ai/langsmith-sdk#3114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(js,python): Adds thread_id to metadata for Claude Agent SDK by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3141\"\u003elangchain-ai/langsmith-sdk#3141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(py): serialize tuple-keyed trace dictionaries by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3116\"\u003elangchain-ai/langsmith-sdk#3116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(py): guard OTEL span cleanup [closes \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3080\"\u003e#3080\u003c/a\u003e] by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3118\"\u003elangchain-ai/langsmith-sdk#3118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the npm_and_yarn group across 3 directories with 2 updates 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/langchain-ai/langsmith-sdk/pull/3123\"\u003elangchain-ai/langsmith-sdk#3123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump pnpm/action-setup from 6.0.8 to 6.0.9 in the actions-minor-and-patch group 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/langchain-ai/langsmith-sdk/pull/3131\"\u003elangchain-ai/langsmith-sdk#3131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the actions-major group with 4 updates 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/langchain-ai/langsmith-sdk/pull/3133\"\u003elangchain-ai/langsmith-sdk#3133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump the js-minor-and-patch group in /js with 14 updates 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/langchain-ai/langsmith-sdk/pull/3132\"\u003elangchain-ai/langsmith-sdk#3132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the py-major group across 1 directory with 3 updates 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/langchain-ai/langsmith-sdk/pull/3138\"\u003elangchain-ai/langsmith-sdk#3138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the py-minor-and-patch group across 1 directory with 21 updates 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/langchain-ai/langsmith-sdk/pull/3140\"\u003elangchain-ai/langsmith-sdk#3140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the npm_and_yarn group across 4 directories with 1 update 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/langchain-ai/langsmith-sdk/pull/3148\"\u003elangchain-ai/langsmith-sdk#3148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): update pydata-sphinx-theme requirement from \u0026gt;=0.18.0 to \u0026gt;=0.19.0 in /python 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/langchain-ai/langsmith-sdk/pull/3137\"\u003elangchain-ai/langsmith-sdk#3137\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump the js-major group across 1 directory with 7 updates 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/langchain-ai/langsmith-sdk/pull/3134\"\u003e...\n\n_Description has been truncated_","html_url":"https://github.com/SMSLYCLOUD/smsly-hosting/pull/220","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/SMSLYCLOUD%2Fsmsly-hosting/issues/220","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/220/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-04T21:38:27.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4810631020","node_id":"PR_kwDORk-6487t7zSi","number":10,"state":"closed","title":"chore(deps): bump the python-deps group across 1 directory with 12 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-05T23:23:33.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-04T21:38:27.000Z","updated_at":"2026-07-05T23:23:35.000Z","time_to_close":92706,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-deps","update_count":12,"packages":[{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"ruff","old_version":"0.15.17","new_version":"0.15.20","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"1.20.2","new_version":"2.1.0","repository_url":"https://github.com/python/mypy"},{"name":"pytest","old_version":"9.1.0","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"ast-serialize","old_version":"0.5.0","new_version":"0.6.0","repository_url":"https://github.com/mypyc/ast_serialize"},{"name":"coverage","old_version":"7.14.1","new_version":"7.15.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"librt","old_version":"0.11.0","new_version":"0.12.0","repository_url":"https://github.com/mypyc/librt"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [click](https://github.com/pallets/click), [docker](https://github.com/docker/docker-py), [nvidia-ml-py](https://forums.developer.nvidia.com), [ruff](https://github.com/astral-sh/ruff), [mypy](https://github.com/python/mypy), [pytest](https://github.com/pytest-dev/pytest), [pre-commit](https://github.com/pre-commit/pre-commit), [setuptools](https://github.com/pypa/setuptools), [ast-serialize](https://github.com/mypyc/ast_serialize), [coverage](https://github.com/coveragepy/coveragepy), [librt](https://github.com/mypyc/librt) and [typing-extensions](https://github.com/python/typing_extensions) to permit the latest version.\nUpdates `click` from 8.4.1 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\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\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.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `docker` to 7.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/docker/docker-py/releases\"\u003edocker's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003ch2\u003eUpgrade Notes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBumped minimum engine API version to 1.24\u003c/li\u003e\n\u003cli\u003eBumped default engine API version to 1.44 (Moby 25.0)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed issue with tag parsing when the registry address includes ports that resulted in \u003ccode\u003einvalid tag format\u003c/code\u003e errors\u003c/li\u003e\n\u003cli\u003eFixed issue preventing creating new configs (\u003ccode\u003eConfigCollection\u003c/code\u003e), which failed with a \u003ccode\u003eKeyError\u003c/code\u003e due to the \u003ccode\u003ename\u003c/code\u003e field\u003c/li\u003e\n\u003cli\u003eFixed an issue due to an update in the \u003ca href=\"https://github.com/psf/requests\"\u003erequests\u003c/a\u003e package breaking \u003ccode\u003edocker-py\u003c/code\u003e by applying the \u003ca href=\"https://redirect.github.com/psf/requests/pull/6710\"\u003esuggested fix\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMiscellaneous\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumentation improvements\u003c/li\u003e\n\u003cli\u003eUpdated Ruff (linter) and fixed minor linting issues\u003c/li\u003e\n\u003cli\u003ePackaging/CI updates\n\u003cul\u003e\n\u003cli\u003eStarted using hatch for packaging (\u003ca href=\"https://github.com/pypa/hatch\"\u003ehttps://github.com/pypa/hatch\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003esetup-python\u003c/code\u003e github action\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpdated tests\n\u003cul\u003e\n\u003cli\u003eStopped checking for deprecated container and image related fields (\u003ccode\u003eContainer\u003c/code\u003e and \u003ccode\u003eContainerConfig\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated tests that check \u003ccode\u003eNetworkSettings.Networks.\u0026lt;network\u0026gt;.Aliases\u003c/code\u003e due to engine changes\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump default API version to 1.43 (Moby 24.0) by \u003ca href=\"https://github.com/vvoland\"\u003e\u003ccode\u003e@​vvoland\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3199\"\u003edocker/docker-py#3199\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eintegration/commit: Don't check for deprecated fields by \u003ca href=\"https://github.com/vvoland\"\u003e\u003ccode\u003e@​vvoland\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3203\"\u003edocker/docker-py#3203\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: tag regex should allow ports by \u003ca href=\"https://github.com/artificial-intelligence\"\u003e\u003ccode\u003e@​artificial-intelligence\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3196\"\u003edocker/docker-py#3196\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eutils: Fix datetime_to_timestamp by \u003ca href=\"https://github.com/vvoland\"\u003e\u003ccode\u003e@​vvoland\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3208\"\u003edocker/docker-py#3208\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: keyerror when creating new config(\u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3110\"\u003e#3110\u003c/a\u003e) by \u003ca href=\"https://github.com/Khushiyant\"\u003e\u003ccode\u003e@​Khushiyant\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3200\"\u003edocker/docker-py#3200\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate Ruff, fix some minor issues by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3206\"\u003edocker/docker-py#3206\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: change image.history() return type to list (\u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3076\"\u003e#3076\u003c/a\u003e) by \u003ca href=\"https://github.com/Khushiyant\"\u003e\u003ccode\u003e@​Khushiyant\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3202\"\u003edocker/docker-py#3202\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003elint: fix string formatting by \u003ca href=\"https://github.com/milas\"\u003e\u003ccode\u003e@​milas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3211\"\u003edocker/docker-py#3211\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop \u003ccode\u003epackaging\u003c/code\u003e dependency by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3205\"\u003edocker/docker-py#3205\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump default API version to 1.44 (Moby 25.0) by \u003ca href=\"https://github.com/vvoland\"\u003e\u003ccode\u003e@​vvoland\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3231\"\u003edocker/docker-py#3231\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eModernize build to use \u003ccode\u003ehatchling\u003c/code\u003e and \u003ccode\u003ehatch-vcs\u003c/code\u003e by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3207\"\u003edocker/docker-py#3207\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnable Ruff I (import sort), autofix by \u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3212\"\u003edocker/docker-py#3212\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(ci): fix-ups across Make / Docker / GitHub Actions by \u003ca href=\"https://github.com/milas\"\u003e\u003ccode\u003e@​milas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3241\"\u003edocker/docker-py#3241\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: fix return type docs for \u003ccode\u003econtainer.logs()\u003c/code\u003e by \u003ca href=\"https://github.com/BobDu\"\u003e\u003ccode\u003e@​BobDu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/2240\"\u003edocker/docker-py#2240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCI fix  by \u003ca href=\"https://github.com/krissetto\"\u003e\u003ccode\u003e@​krissetto\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3260\"\u003edocker/docker-py#3260\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix for requests 2.32 by \u003ca href=\"https://github.com/felixfontein\"\u003e\u003ccode\u003e@​felixfontein\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3257\"\u003edocker/docker-py#3257\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded 7.1.0 changelog by \u003ca href=\"https://github.com/krissetto\"\u003e\u003ccode\u003e@​krissetto\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3262\"\u003edocker/docker-py#3262\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env var name in release pipeline by \u003ca href=\"https://github.com/krissetto\"\u003e\u003ccode\u003e@​krissetto\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3263\"\u003edocker/docker-py#3263\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange env var name in release pipeline to match hatch expectations by \u003ca href=\"https://github.com/krissetto\"\u003e\u003ccode\u003e@​krissetto\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3264\"\u003edocker/docker-py#3264\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/vvoland\"\u003e\u003ccode\u003e@​vvoland\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3199\"\u003edocker/docker-py#3199\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/artificial-intelligence\"\u003e\u003ccode\u003e@​artificial-intelligence\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3196\"\u003edocker/docker-py#3196\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Khushiyant\"\u003e\u003ccode\u003e@​Khushiyant\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3200\"\u003edocker/docker-py#3200\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BobDu\"\u003e\u003ccode\u003e@​BobDu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/2240\"\u003edocker/docker-py#2240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/krissetto\"\u003e\u003ccode\u003e@​krissetto\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/docker/docker-py/pull/3260\"\u003edocker/docker-py#3260\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/docker/docker-py/compare/7.0.0...7.1.0\"\u003ehttps://github.com/docker/docker-py/compare/7.0.0...7.1.0\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/docker/docker-py/commit/a3652028b1ead708bd9191efb286f909ba6c2a49\"\u003e\u003ccode\u003ea365202\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3264\"\u003e#3264\u003c/a\u003e from krissetto/rename-env-var-in-release-pipeline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/1ab40c8e926c0b892b3ef47ae8acc274fc13f250\"\u003e\u003ccode\u003e1ab40c8\u003c/code\u003e\u003c/a\u003e Fix env var name in release pipeline to match hatch expectations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/b33088e0ca1bd40e45ad759a61cf084e9628043e\"\u003e\u003ccode\u003eb33088e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3263\"\u003e#3263\u003c/a\u003e from krissetto/fix-release-pipeline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/45488acfc1851c5b5358ec7d8030a754c5f23783\"\u003e\u003ccode\u003e45488ac\u003c/code\u003e\u003c/a\u003e Fix env var name in release pipeline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/20879eca6ae19ef406e918baa1e220aa37ba29a2\"\u003e\u003ccode\u003e20879ec\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3262\"\u003e#3262\u003c/a\u003e from krissetto/changelog-7.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/4f2a26d21e81774cbb8e025b01de001a3ac3a545\"\u003e\u003ccode\u003e4f2a26d\u003c/code\u003e\u003c/a\u003e Added 7.1.0 changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/7785ad913ddf2d86478f08278bb2c488d05a29ff\"\u003e\u003ccode\u003e7785ad9\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/docker/docker-py/issues/3257\"\u003e#3257\u003c/a\u003e from felixfontein/requests-hotfix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/d8e9bcb2780607faf388f8832bff3865eb24dce0\"\u003e\u003ccode\u003ed8e9bcb\u003c/code\u003e\u003c/a\u003e requests 2.32.0 and 2.32.1 have been yanked.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/2a059a9f19c7b37c6c71c233754c6845e325d1ec\"\u003e\u003ccode\u003e2a059a9\u003c/code\u003e\u003c/a\u003e Extend fix to requests 2.32.2+.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/docker/docker-py/commit/e33e0a437ecd895158c8cb4322a0cdad79312636\"\u003e\u003ccode\u003ee33e0a4\u003c/code\u003e\u003c/a\u003e Hotfix for requests 2.32.0.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/docker/docker-py/compare/6.0.0...7.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `nvidia-ml-py` to 13.610.43\n\nUpdates `ruff` from 0.15.17 to 0.15.20\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.20\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-25.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning instead of an error for unknown rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26113\"\u003e#26113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch \u003ccode\u003enoqa\u003c/code\u003e shebang handling in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26286\"\u003e#26286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26240\"\u003e#26240\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd versioning sections to custom crate READMEs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26317\"\u003e#26317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eruff_python_parser\u003c/code\u003e README for crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26315\"\u003e#26315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Clarify that \u003ccode\u003ePERF402\u003c/code\u003e applies to any iterable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26242\"\u003e#26242\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/dhruvmanila\"\u003e\u003ccode\u003e@​dhruvmanila\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/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.20\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload ruff 0.15.20\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFile\u003c/th\u003e\n\u003cth\u003ePlatform\u003c/th\u003e\n\u003cth\u003eChecksum\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz\"\u003eruff-aarch64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eApple Silicon macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz\"\u003eruff-x86_64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eIntel macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip\"\u003eruff-aarch64-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eARM64 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip\"\u003eruff-i686-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex86 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip\"\u003eruff-x86_64-pc-windows-msvc.zip\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex64 Windows\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz\"\u003eruff-aarch64-unknown-linux-gnu.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eARM64 Linux\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz\"\u003eruff-i686-unknown-linux-gnu.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ex86 Linux\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\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.20\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-25.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEmit a warning instead of an error for unknown rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26113\"\u003e#26113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch \u003ccode\u003enoqa\u003c/code\u003e shebang handling in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26286\"\u003e#26286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26240\"\u003e#26240\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd versioning sections to custom crate READMEs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26317\"\u003e#26317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003eruff_python_parser\u003c/code\u003e README for crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26315\"\u003e#26315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eperflint\u003c/code\u003e] Clarify that \u003ccode\u003ePERF402\u003c/code\u003e applies to any iterable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26242\"\u003e#26242\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/dhruvmanila\"\u003e\u003ccode\u003e@​dhruvmanila\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/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.19\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-23.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport human-readable names when hovering suppression comments and in code actions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26114\"\u003e#26114\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFall back to default settings when editor-only settings are invalid (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26244\"\u003e#26244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix panic when inserting text at a notebook cell boundary (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26111\"\u003e#26111\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] Update fix suggestions for \u003ccode\u003e__floor__\u003c/code\u003e, \u003ccode\u003e__trunc__\u003c/code\u003e, \u003ccode\u003e__length_hint__\u003c/code\u003e, and \u003ccode\u003e__matmul__\u003c/code\u003e variants (\u003ccode\u003ePLC2801\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26239\"\u003e#26239\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid allocating when parsing single string literals (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26200\"\u003e#26200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid reallocating singleton call arguments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26223\"\u003e#26223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create source files for lint diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26226\"\u003e#26226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eOptimize formatter text width and indentation (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26236\"\u003e#26236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReserve capacity for builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26229\"\u003e#26229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip repeated-key checks for singleton dictionaries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26228\"\u003e#26228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ArrayVec for qualified name segments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26224\"\u003e#26224\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/f82a36b6baf8c0547a17bbde6c0d927ccd45d938\"\u003e\u003ccode\u003ef82a36b\u003c/code\u003e\u003c/a\u003e Bump 0.15.20 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26376\"\u003e#26376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/af329438b55d5aa8ca28725f17abbae63b5c815d\"\u003e\u003ccode\u003eaf32943\u003c/code\u003e\u003c/a\u003e Improve the summarise-ecosystem-results skill (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26378\"\u003e#26378\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/485ebab5de692aad34720898cd80245b6092ba86\"\u003e\u003ccode\u003e485ebab\u003c/code\u003e\u003c/a\u003e Remove \u003ccode\u003eRUF076\u003c/code\u003e name from schema (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26371\"\u003e#26371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ef81835ce3da615346584dc446de0fe26bfc154b\"\u003e\u003ccode\u003eef81835\u003c/code\u003e\u003c/a\u003e [ty] Implement rust-analyzer's \u0026quot;Click for full compiler diagnostic\u0026quot; feature (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/572b31e2377a701a7365f069f6ef87002962cb2b\"\u003e\u003ccode\u003e572b31e\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Remove \u003ccode\u003epytest-fixture-autouse\u003c/code\u003e (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26240\"\u003e#26240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f703f219d7fddd1a4abba9fa81e34773c185a4b9\"\u003e\u003ccode\u003ef703f21\u003c/code\u003e\u003c/a\u003e Allow human-readable names in rule selectors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25887\"\u003e#25887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0d726b28ee35413926145ffef4ac1143cae9ea1e\"\u003e\u003ccode\u003e0d726b2\u003c/code\u003e\u003c/a\u003e [ty] Reuse equality semantics for membership compatibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25955\"\u003e#25955\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/dbe6e9848c3f78fdaf543cfc000939ebc73b5f00\"\u003e\u003ccode\u003edbe6e98\u003c/code\u003e\u003c/a\u003e [ty] Infer definite equality comparison results (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26337\"\u003e#26337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e700ea357a2196d76b58eb89b2031ddb5ca896e0\"\u003e\u003ccode\u003ee700ea3\u003c/code\u003e\u003c/a\u003e [ty] Prove TypedDict structural patterns exhaustive (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26285\"\u003e#26285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6a0d2ec93959d966430b8c39d4de5c3e8a88e911\"\u003e\u003ccode\u003e6a0d2ec\u003c/code\u003e\u003c/a\u003e [ty] Widen inferred class-valued instance attributes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26338\"\u003e#26338\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.20\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 1.20.2 to 2.1.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.1\u003c/h2\u003e\n\u003cp\u003eWe’ve just uploaded mypy 2.1.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\u003elibrt.vecs: Fast Growable Array Type for Mypyc\u003c/h3\u003e\n\u003cp\u003eThe new \u003ccode\u003elibrt.vecs\u003c/code\u003e module provides an efficient growable array type \u003ccode\u003evec\u003c/code\u003e that is\noptimized for mypyc use. It provides fast, packed arrays with integer and floating point\nvalue types, which can be \u003cstrong\u003eseveral times faster\u003c/strong\u003e than \u003ccode\u003elist\u003c/code\u003e, and tens of times faster\nthan \u003ccode\u003earray.array\u003c/code\u003e in code compiled using mypyc. It also supports nested \u003ccode\u003evec\u003c/code\u003e objects and\nnon-value-type items, such as \u003ccode\u003evec[vec[str]]\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eRefer to the \u003ca href=\"https://mypyc.readthedocs.io/en/latest/librt_vecs.html\"\u003edocumentation\u003c/a\u003e for\nthe details.\u003c/p\u003e\n\u003cp\u003eContributed by Jukka Lehtosalo.\u003c/p\u003e\n\u003ch3\u003elibrt.random: Fast Pseudo-Random Number Generation\u003c/h3\u003e\n\u003cp\u003eThe new \u003ccode\u003elibrt.random\u003c/code\u003e module provides fast pseudo-random number generation that is\noptimized for code compiled using mypyc. It can be 3x to 10x faster than the stdlib\n\u003ccode\u003erandom\u003c/code\u003e module in compiled code.\u003c/p\u003e\n\u003cp\u003eRefer to the \u003ca href=\"https://mypyc.readthedocs.io/en/latest/librt_random.html\"\u003edocumentation\u003c/a\u003e for\nthe details.\u003c/p\u003e\n\u003cp\u003eContributed by Jukka Lehtosalo (PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21433\"\u003e21433\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMypyc Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnable incremental self-compilation (Vaggelis Danias, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21369\"\u003e21369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake compilation order with multiple files consistent (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21419\"\u003e21419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash on accessing \u003ccode\u003eStopAsyncIteration\u003c/code\u003e (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21406\"\u003e21406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix incremental compilation with \u003ccode\u003eseparate\u003c/code\u003e flag (Vaggelis Danias, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21299\"\u003e21299\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes to Crashes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix crash on partial type with \u003ccode\u003e--allow-redefinition\u003c/code\u003e and \u003ccode\u003eglobal\u003c/code\u003e declaration (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21428\"\u003e21428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix broken awaitable generator patching (Ivan Levkivskyi, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21435\"\u003e21435\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/c1c336d7e34eb313080c79b156518c58d27c7234\"\u003e\u003ccode\u003ec1c336d\u003c/code\u003e\u003c/a\u003e Remove +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/74df14b7cbf08140236aa45bbb7f42219b0b1df7\"\u003e\u003ccode\u003e74df14b\u003c/code\u003e\u003c/a\u003e Add changelog for mypy 2.1 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21464\"\u003e#21464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/022d9bc96f86c40f338a5cf150f1806cc8f300ff\"\u003e\u003ccode\u003e022d9bc\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;TypeForm: Enable by default (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21262\"\u003e#21262\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8826288214f1cb31496e610667481221e025359c\"\u003e\u003ccode\u003e8826288\u003c/code\u003e\u003c/a\u003e [mypyc] Document librt.random (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21463\"\u003e#21463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3f4067b699dbe52d08e42ef3b3ebfdebdc06bd96\"\u003e\u003ccode\u003e3f4067b\u003c/code\u003e\u003c/a\u003e Bump librt version to 0.11.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21458\"\u003e#21458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2b1eb58a250c5f1eb4ef5fb1f312ff528c5a1d4e\"\u003e\u003ccode\u003e2b1eb58\u003c/code\u003e\u003c/a\u003e [mypyc] Enable incremental self-compilation (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21369\"\u003e#21369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8152f4af3f6c03beaf2660026240f0fdce7feecc\"\u003e\u003ccode\u003e8152f4a\u003c/code\u003e\u003c/a\u003e Respect file config comments for stale modules (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21444\"\u003e#21444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/116d60bdd3fdfe8d97c6afe99370910db56f1b92\"\u003e\u003ccode\u003e116d60b\u003c/code\u003e\u003c/a\u003e Fix nondeterminism from nonassociativity of overload joins (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21455\"\u003e#21455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/6c4af8e42110cea3f84bc02add2ca7b89c268210\"\u003e\u003ccode\u003e6c4af8e\u003c/code\u003e\u003c/a\u003e Fix function call message change for small number of args (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21432\"\u003e#21432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4b8fdcaf24032592510e8f15421fb32d82a71800\"\u003e\u003ccode\u003e4b8fdca\u003c/code\u003e\u003c/a\u003e [mypyc] Add librt.random module (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21433\"\u003e#21433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v1.20.2...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.1.0 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\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/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.1.0...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pre-commit` to 4.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier usage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.0 - 2026-04-21\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier\nusage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.1 - 2025-12-16\u003c/h1\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003elanguage: python\u003c/code\u003e with \u003ccode\u003erepo: local\u003c/code\u003e without \u003ccode\u003eadditional_dependencies\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3597\"\u003e#3597\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.5.0 - 2025-11-22\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epre-commit hazmat\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3585\"\u003e#3585\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e4.4.0 - 2025-11-08\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--fail-fast\u003c/code\u003e option to \u003ccode\u003epre-commit run\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3528\"\u003e#3528\u003c/a\u003e PR by \u003ca href=\"https://github.com/JulianMaurin\"\u003e\u003ccode\u003e@​JulianMaurin\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003eruby-build\u003c/code\u003e / \u003ccode\u003erbenv\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3566\"\u003e#3566\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3565\"\u003e#3565\u003c/a\u003e issue by \u003ca href=\"https://github.com/MRigal\"\u003e\u003ccode\u003e@​MRigal\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003elanguage: unsupported\u003c/code\u003e / \u003ccode\u003elanguage: unsupported_script\u003c/code\u003e as aliases\nfor \u003ccode\u003elanguage: system\u003c/code\u003e / \u003ccode\u003elanguage: script\u003c/code\u003e (which will eventually be\ndeprecated).\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3577\"\u003e#3577\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd support docker-in-docker detection for cgroups v2.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3535\"\u003e#3535\u003c/a\u003e PR by \u003ca href=\"https://github.com/br-rhrbacek\"\u003e\u003ccode\u003e@​br-rhrbacek\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3360\"\u003e#3360\u003c/a\u003e issue by \u003ca href=\"https://github.com/JasonAlt\"\u003e\u003ccode\u003e@​JasonAlt\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle when docker gives \u003ccode\u003eSecurityOptions: null\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3537\"\u003e#3537\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3514\"\u003e#3514\u003c/a\u003e issue by \u003ca href=\"https://github.com/jenstroeger\"\u003e\u003ccode\u003e@​jenstroeger\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix error context for invalid \u003ccode\u003estages\u003c/code\u003e in \u003ccode\u003e.pre-commit-config.yaml\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3576\"\u003e#3576\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\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/pre-commit/pre-commit/commit/f35134b05028ec938ac605ae500fdf95462655d3\"\u003e\u003ccode\u003ef35134b\u003c/code\u003e\u003c/a\u003e v4.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2a51ffcb81f6c8ed2e6467913c3343a8800f3ab9\"\u003e\u003ccode\u003e2a51ffc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e from pre-commit/hook-impl-optional-hook-dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/d7dee322abfc765b042f2e3b872aab3c3a867610\"\u003e\u003ccode\u003ed7dee32\u003c/code\u003e\u003c/a\u003e make --hook-dir optional for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/965aeb1c680e8b526342153547f0ec014484c63d\"\u003e\u003ccode\u003e965aeb1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e from pre-commit/hook-impl-required\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2eacc064aa9b5bb33d3a0d84a234b475e34f3096\"\u003e\u003ccode\u003e2eacc06\u003c/code\u003e\u003c/a\u003e --hook-type is required for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f5678bf4ac35cffc0ff7174ad85f7fdc2a5c977e\"\u003e\u003ccode\u003ef5678bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3657\"\u003e#3657\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/054cc5bd6bb1b20faa1eefe09f0de3b68fceee94\"\u003e\u003ccode\u003e054cc5b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/5c0f3024d2524f6e029a4c333392fd9be9fb27f6\"\u003e\u003ccode\u003e5c0f302\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3652\"\u003e#3652\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/a5d91142676630f8130020b35e166e0c0e92b8f4\"\u003e\u003ccode\u003ea5d9114\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/129a1f5ca1eaee0c952a5e7a07faae305c5e15bc\"\u003e\u003ccode\u003e129a1f5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3641\"\u003e#3641\u003c/a\u003e from pre-commit/mxr-patch-1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v3.7.0...v4.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `setuptools` to 83.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/setuptools/blob/main/NEWS.rst\"\u003esetuptools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev83.0.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRequire Python 3.10 or later.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eMANIFEST.in\u003c/code\u003e matching (via \u003ccode\u003eFileList\u003c/code\u003e) is now insensitive to Unicode\nnormalization form. A pattern authored in one form (e.g. NFC, as typically\nsaved by editors) now matches a file whose name is stored on disk in another\n(e.g. NFD, as produced by macOS APFS/HFS+). Previously an \u003ccode\u003eexclude\u003c/code\u003e,\n\u003ccode\u003eglobal-exclude\u003c/code\u003e, \u003ccode\u003erecursive-exclude\u003c/code\u003e, or \u003ccode\u003eprune\u003c/code\u003e rule could silently\nfail to drop a non-ASCII-named file from the source distribution, publishing\nit despite the exclusion -- see GHSA-h35f-9h28-mq5c.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epypa/distutils#334\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev82.0.1\u003c/h1\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the loading of \u003ccode\u003elauncher manifest.xml\u003c/code\u003e file. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5047\"\u003e#5047\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplaced deprecated \u003ccode\u003ejson.__version__\u003c/code\u003e with fixture in tests. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5186\"\u003e#5186\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd advice about how to improve predictability when installing sdists. (\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5168\"\u003e#5168\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/4941\"\u003e#4941\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5157\"\u003e#5157\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5169\"\u003e#5169\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5175\"\u003e#5175\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003ev82.0.0\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/setuptools/commit/6519f728c6f23c992df81a5691ef7655184a20eb\"\u003e\u003ccode\u003e6519f72\u003c/code\u003e\u003c/a\u003e Bump version: 82.0.1 → 83.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/d1151b125b29a6ee1c7db860f7ee6c365d525b5f\"\u003e\u003ccode\u003ed1151b1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5250\"\u003e#5250\u003c/a\u003e from pypa/feature/distutils-d7633fbed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a2df31e6a741b0fe775969618fe6a3a3d032e900\"\u003e\u003ccode\u003ea2df31e\u003c/code\u003e\u003c/a\u003e Capture removal of dry_run parameter in changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/00144dc3fb6d023fd81cdc26c380a012b084df9b\"\u003e\u003ccode\u003e00144dc\u003c/code\u003e\u003c/a\u003e Moved newsfragment to the release where it occurred.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a4a5a2b160357be77626aa077ddd1d8ee53be50f\"\u003e\u003ccode\u003ea4a5a2b\u003c/code\u003e\u003c/a\u003e Add news fragment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/77470c23c35031c9e37d7512694ac5ca52bfcaac\"\u003e\u003ccode\u003e77470c2\u003c/code\u003e\u003c/a\u003e Merge \u003ca href=\"https://github.com/pypa/distutils\"\u003ehttps://github.com/pypa/distutils\u003c/a\u003e into feature/distutils-d7633fbed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/3c43897420f25a1be1afe6eaa905d056009cc736\"\u003e\u003ccode\u003e3c43897\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/setuptools/issues/5247\"\u003e#5247\u003c/a\u003e from pypa/copilot/fix-pypy-version-issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/bb6ea66b4bd01cb35d7c68a1bc61b96d59190269\"\u003e\u003ccode\u003ebb6ea66\u003c/code\u003e\u003c/a\u003e Bump PyPy from 3.10 to 3.11 in CI workflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/a2bc3aca2f55eb9b93ea633e58ba68170ce14451\"\u003e\u003ccode\u003ea2bc3ac\u003c/code\u003e\u003c/a\u003e Fix broken intersphinx reference to build's installation docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/setuptools/commit/2d6a739c64cfedc65e1f635af7b52340aac8d99b\"\u003e\u003ccode\u003e2d6a739\u003c/code\u003e\u003c/a\u003e Use stacked parametrize decorators instead of itertools.product\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/setuptools/compare/v64.0.0...v83.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ast-serialize` from 0.5.0 to 0.6.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/ast_serialize/commit/ecf7e987c73454fb2ed5b099103a8bfba75c9dfa\"\u003e\u003ccode\u003eecf7e98\u003c/code\u003e\u003c/a\u003e Bump version to 0.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/ast_serialize/commit/af13fa7f5f068023786f7b67ba852894a913e24b\"\u003e\u003ccode\u003eaf13fa7\u003c/code\u003e\u003c/a\u003e Add experimental WASM wheels (\u003ca href=\"https://redirect.github.com/mypyc/ast_serialize/issues/69\"\u003e#69\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mypyc/ast_serialize/compare/v0.5.0...v0.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.14.1 to 7.15.0\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.0 — 2026-07-02\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSince 7.14.0, reporting commands implicitly combine parallel data files. Now\nthose commands have a new option \u003ccode\u003e--keep-combined\u003c/code\u003e to retain the data files\nafter combining them instead of the default, which is to delete them.\nFinishes \u003ccode\u003eissue 2198\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the LCOV report would incorrectly count excluded functions as uncovered,\nas described in \u003ccode\u003eissue 2205\u003c/code\u003e\u003cem\u003e. This is now fixed thanks to \u003ccode\u003eMartin Kuntz Jacobsen \u0026lt;pull 2206_\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen running your program, coverage now correctly sets\n\u003ccode\u003eyourmodule.__spec__.loader\u003c/code\u003e as \u003ccode\u003estrongly recommended \u0026lt;--loader--_\u0026gt;\u003c/code\u003e\u003cem\u003e,\navoiding the deprecation warning described in \u003ccode\u003eissue 2208\u003c/code\u003e\u003c/em\u003e. Thanks, \u003ccode\u003eA5rocks \u0026lt;pull 2209_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: with Python 3.10, running with the \u003ccode\u003e-I\u003c/code\u003e (isolated mode) option didn't\ncorrectly omit the current directory from the module search path, as\ndescribed in \u003ccode\u003eissue 2103\u003c/code\u003e\u003cem\u003e. That is now fixed thanks to \u003ccode\u003eIlia Sorokin \u0026lt;pull 2211_\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. \u003cem\u003e--loader--: \u003ca href=\"https://docs.python.org/3/reference/datamodel.html#module.__loader\"\u003ehttps://docs.python.org/3/reference/datamodel.html#module.__loader\u003c/a\u003e\u003c/em\u003e_\n.. _issue 2103:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2103\"\u003ecoveragepy/coveragepy#2103\u003c/a\u003e\n.. _issue 2198:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2198\"\u003ecoveragepy/coveragepy#2198\u003c/a\u003e\n.. _issue 2205:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2205\"\u003ecoveragepy/coveragepy#2205\u003c/a\u003e\n.. _pull 2206: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2206\"\u003ecoveragepy/coveragepy#2206\u003c/a\u003e\n.. _issue 2208:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2208\"\u003ecoveragepy/coveragepy#2208\u003c/a\u003e\n.. _pull 2209: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2209\"\u003ecoveragepy/coveragepy#2209\u003c/a\u003e\n.. _pull 2211: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2211\"\u003ecoveragepy/coveragepy#2211\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-3:\u003c/p\u003e\n\u003ch2\u003eVersion 7.14.3 — 2026-06-22\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the default \u003ccode\u003e...\u003c/code\u003e exclusion rule now also matches function bodies\nwhose closing return-type bracket is on its own line (for example, after a\nlong \u003ccode\u003e-\u0026gt; dict[ ... ]\u003c/code\u003e annotation that a formatter has split over multiple\nlines). Closes \u003ccode\u003eissue 2185\u003c/code\u003e\u003cem\u003e, thanks \u003ccode\u003eMengjia Shang \u0026lt;pull 2196_\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: On 3.13t, we incorrectly issued \u003ccode\u003eCouldn't import C tracer\u003c/code\u003e errors.\nWe can't import the C tracer because in 7.14.2 we stopped shipping compiled\nwheels for 3.13t. Thanks, \u003ccode\u003eHugo van Kemenade \u0026lt;pull 2203_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2185: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2185\"\u003ecoveragepy/coveragepy#2185\u003c/a\u003e\n.. _pull 2196: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2196\"\u003ecoveragepy/coveragepy#2196\u003c/a\u003e\n.. _pull 2203: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2203\"\u003ecoveragepy/coveragepy#2203\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/coveragepy/coveragepy/commit/c8c8020e26394526ad24184879f5867bb46b0785\"\u003e\u003ccode\u003ec8c8020\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ae19db1fb3880f2b2bb0c03e3d76855cb71ce5f7\"\u003e\u003ccode\u003eae19db1\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/17b45a14119cb52bdf8170d1aa01f84a42b580e6\"\u003e\u003ccode\u003e17b45a1\u003c/code\u003e\u003c/a\u003e docs: --keep-combined in the man page\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/6f9fa1e1e8a89f62c69dbf3b38e0adb744d6d4b2\"\u003e\u003ccode\u003e6f9fa1e\u003c/code\u003e\u003c/a\u003e fix: preserve isolated sys.path on Python 3.10 (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2211\"\u003e#2211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/787af5ff90e8a73bfd8cba7d5661b4930cc53ce5\"\u003e\u003ccode\u003e787af5f\u003c/code\u003e\u003c/a\u003e chore: bump actions/checkout in the action-dependencies group (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2210\"\u003e#2210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1ed39982fe550fc542a9ed3d5561dec29737b0dc\"\u003e\u003ccode\u003e1ed3998\u003c/code\u003e\u003c/a\u003e fix: start attaching the loader on \u003ccode\u003e__spec__\u003c/code\u003e \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2208\"\u003e#2208\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2209\"\u003e#2209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1ab11229351f522d309f8cc54a542e4b97c78113\"\u003e\u003ccode\u003e1ab1122\u003c/code\u003e\u003c/a\u003e docs: remove stray comma\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f24a91f6d00b888c1d3d7c438cfe70294ad0c6ea\"\u003e\u003ccode\u003ef24a91f\u003c/code\u003e\u003c/a\u003e feat: --keep-combined for reporting commands. \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2198\"\u003e#2198\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/5e70751905386500e35d1382061178da3ce5519e\"\u003e\u003ccode\u003e5e70751\u003c/code\u003e\u003c/a\u003e test: canonicalize mock calls in test_cmdline to reduce diff noise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/65979cc05b7f6b10c3e27c84408867fd9bc30846\"\u003e\u003ccode\u003e65979cc\u003c/code\u003e\u003c/a\u003e fix: skip excluded functions in LCOV function totals (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2206\"\u003e#2206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.1...7.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `librt` from 0.11.0 to 0.12.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/3254e8804aab61ff44ded318210aa0a77491f9d2\"\u003e\u003ccode\u003e3254e88\u003c/code\u003e\u003c/a\u003e Sync mypy and bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/99fee49c6bae585a371f0b68b6437f8697cb1236\"\u003e\u003ccode\u003e99fee49\u003c/code\u003e\u003c/a\u003e Publish Pyodide wheels to PyPI (\u003ca href=\"https://redirect.github.com/mypyc/librt/issues/42\"\u003e#42\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/de95e59d8dff40b4ee07e9d57b1ebd0e49ca92f2\"\u003e\u003ccode\u003ede95e59\u003c/code\u003e\u003c/a\u003e Add readme links to librt docs under mypyc docs (\u003ca href=\"https://redirect.github.com/mypyc/librt/issues/41\"\u003e#41\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mypyc/librt/compare/v0.11.0...v0.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.15.0 to 4.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is ap...\n\n_Description has been truncated_","html_url":"https://github.com/Kavyvachhani/SysDock/pull/10","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kavyvachhani%2FSysDock/issues/10","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/10/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-04T08:48:00.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4808318492","node_id":"PR_kwDOTJNVh87t0zyq","number":6,"state":"closed","title":"chore(deps): bump the python-dependencies group across 1 directory with 6 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-06T03:12:22.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-04T08:48:00.000Z","updated_at":"2026-07-06T03:12:24.000Z","time_to_close":152662,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-dependencies","update_count":6,"packages":[{"name":"narwhals","old_version":"2.22.1","new_version":"2.23.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"pydeck","old_version":"0.9.2","new_version":"0.9.3","repository_url":"https://github.com/visgl/deck.gl"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"uvicorn","old_version":"0.49.0","new_version":"0.50.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pytest","old_version":"7.4.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-dependencies group with 6 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.22.1` | `2.23.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [pydeck](https://github.com/visgl/deck.gl) | `0.9.2` | `0.9.3` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.49.0` | `0.50.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `7.4.3` | `9.1.1` |\n\n\nUpdates `narwhals` from 2.22.1 to 2.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/narwhals-dev/narwhals/releases\"\u003enarwhals's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eNarwhals v2.23.0\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003ch2\u003e✨ Enhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: Add \u003ccode\u003eselectors.enum\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3729\"\u003e#3729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: Add support for \u003ccode\u003eFloat16\u003c/code\u003e datatype (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3725\"\u003e#3725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat: add top-level covariance expression (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3684\"\u003e#3684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(ibis): support y/q/mo/d units in dt.offset_by (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3683\"\u003e#3683\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🐞 Bug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: Explicitely pass \u003ccode\u003eorient=\u0026quot;row\u0026quot;\u003c/code\u003e in \u003ccode\u003epl.from_numpy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3732\"\u003e#3732\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: Allow to select polars Categorical with fixed categories (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3727\"\u003e#3727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: Lift \u003ccode\u003esample\u003c/code\u003e arguments validation, bump pyright and numpy deps (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3724\"\u003e#3724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(typing): Preserve stable \u003ccode\u003eExpr\u003c/code\u003e subclass through when/then/otherwise chains (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3708\"\u003e#3708\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(pyarrow): correct \u003ccode\u003ecorr\u003c/code\u003e null handling and expose \u003ccode\u003ecorr\u003c/code\u003e/\u003ccode\u003ecov\u003c/code\u003e in stable.v1 (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3687\"\u003e#3687\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(tests): Parametrize CSV conflicting-separator tests (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3686\"\u003e#3686\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e📖 Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eci: Add \u003ccode\u003elightgbm\u003c/code\u003e downstream test (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3699\"\u003e#3699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edocs: Add pandera to the ecosystem page (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3692\"\u003e#3692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edocs: Add warning when adding Narwhals with extras (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3658\"\u003e#3658\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🛠️ Other improvements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: address polars deprecation of \u003ccode\u003ehow='horizontal'\u003c/code\u003e in \u003ccode\u003econcat\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3731\"\u003e#3731\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore: Address various CI failures (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3712\"\u003e#3712\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eci: Add \u003ccode\u003escikit-learn\u003c/code\u003e to downstream tests (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3609\"\u003e#3609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eci: Run workflows only if changes involves them (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3680\"\u003e#3680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eci: Fix fairlearn installation (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3695\"\u003e#3695\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThank you to all our contributors for making this release possible!\n\u003ca href=\"https://github.com/FBruzzesi\"\u003e\u003ccode\u003e@​FBruzzesi\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/MarcoGorelli\"\u003e\u003ccode\u003e@​MarcoGorelli\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cosmicBboy\"\u003e\u003ccode\u003e@​cosmicBboy\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/e10v\"\u003e\u003ccode\u003e@​e10v\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/renovate\"\u003e\u003ccode\u003e@​renovate\u003c/code\u003e\u003c/a\u003e[bot], \u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e and \u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\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/narwhals-dev/narwhals/commit/5a22ee6838c20594600122ddab90028268424f5e\"\u003e\u003ccode\u003e5a22ee6\u003c/code\u003e\u003c/a\u003e release: Bump version to 2.23.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/140e8ddc8f62f31ac19be10623e64f52ea22fead\"\u003e\u003ccode\u003e140e8dd\u003c/code\u003e\u003c/a\u003e fix: Explicitely pass \u003ccode\u003eorient=\u0026quot;row\u0026quot;\u003c/code\u003e in \u003ccode\u003epl.from_numpy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3732\"\u003e#3732\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/aae89b475121fb4bacd11f1e04b85735231e4ef4\"\u003e\u003ccode\u003eaae89b4\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3735\"\u003e#3735\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/18940effb2094f03ec095e6c14f45035c218f986\"\u003e\u003ccode\u003e18940ef\u003c/code\u003e\u003c/a\u003e fix: address polars deprecation of \u003ccode\u003ehow='horizontal'\u003c/code\u003e in \u003ccode\u003econcat\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3731\"\u003e#3731\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/e52d3822fc9ccc9edc473e2f746919acb893d58b\"\u003e\u003ccode\u003ee52d382\u003c/code\u003e\u003c/a\u003e feat: Add \u003ccode\u003eselectors.enum\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3729\"\u003e#3729\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/579ee38440df16765792fe0f23dc8a81f16bc067\"\u003e\u003ccode\u003e579ee38\u003c/code\u003e\u003c/a\u003e feat: Add support for \u003ccode\u003eFloat16\u003c/code\u003e datatype (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3725\"\u003e#3725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/d5259994487809d4fba31e47deed3fab76231bda\"\u003e\u003ccode\u003ed525999\u003c/code\u003e\u003c/a\u003e fix: Allow to select polars Categorical with fixed categories (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3727\"\u003e#3727\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/dc6a66bee868ae4a7208db5b33d83398fcc1b5bb\"\u003e\u003ccode\u003edc6a66b\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3728\"\u003e#3728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/35e16811ec683542c9468cd1f34d311829f7fb17\"\u003e\u003ccode\u003e35e1681\u003c/code\u003e\u003c/a\u003e chore(deps): lock file maintenance (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3711\"\u003e#3711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/6d40bf7f5620edf4e483d60837fdd1792d903770\"\u003e\u003ccode\u003e6d40bf7\u003c/code\u003e\u003c/a\u003e fix: Lift \u003ccode\u003esample\u003c/code\u003e arguments validation, bump pyright and numpy deps (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3724\"\u003e#3724\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/narwhals-dev/narwhals/compare/v2.22.1...v2.23.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 12.2.0 to 12.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-pillow/Pillow/releases\"\u003epillow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e12.3.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.3.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRemovals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove non-image ImageCms modes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9697\"\u003e#9697\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release notes for SBOM and performance improvements \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd security release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9741\"\u003e#9741\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd release notes for Python 3.15 beta wheels \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9696\"\u003e#9696\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eImageFont can also be used with ImageText \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9597\"\u003e#9597\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdditional guidelines for security reports \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9659\"\u003e#9659\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFixed typo \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9636\"\u003e#9636\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdded CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9591\"\u003e#9591\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRevise development support information in README \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9583\"\u003e#9583\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd INCIDENT_RESPONSE.md \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9555\"\u003e#9555\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd STRIDE threat model to security docs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9562\"\u003e#9562\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd CVEs to 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9556\"\u003e#9556\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate README with revised security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9553\"\u003e#9553\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate security policy \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9552\"\u003e#9552\u003c/a\u003e [\u003ca href=\"https://github.com/aclark4life\"\u003e\u003ccode\u003e@​aclark4life\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9534\"\u003e#9534\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependencies\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9720\"\u003e#9720\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9653\"\u003e#9653\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v4 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9665\"\u003e#9665\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9655\"\u003e#9655\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libavif to v1.4.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9652\"\u003e#9652\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9651\"\u003e#9651\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency check-jsonschema to v0.37.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9650\"\u003e#9650\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate google/oss-fuzz digest to d872252 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9614\"\u003e#9614\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency lcms2 to v2.19 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9609\"\u003e#9609\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency libpng to v1.6.58 - autoclosed \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9608\"\u003e#9608\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency harfbuzz to v14 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9610\"\u003e#9610\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency mypy to v1.20.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9599\"\u003e#9599\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate github-actions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9611\"\u003e#9611\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9607\"\u003e#9607\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove dependency versions to single JSON and enable Renovate \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9559\"\u003e#9559\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated raqm to 0.10.5 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9557\"\u003e#9557\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate dependency cibuildwheel to v3.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9532\"\u003e#9532\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove matrix.os from benchmark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9735\"\u003e#9735\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRemove references to libavif patch \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9734\"\u003e#9734\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd benchmark tests \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9654\"\u003e#9654\u003c/a\u003e [\u003ca href=\"https://github.com/akx\"\u003e\u003ccode\u003e@​akx\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUse reshape() instead of setting NumPy array shape directly \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9728\"\u003e#9728\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\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/python-pillow/Pillow/commit/bb1d8e8ab8d29048624d96e3ee53cecf7c13d13d\"\u003e\u003ccode\u003ebb1d8e8\u003c/code\u003e\u003c/a\u003e 12.3.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/e63fc481dc2e07e21d5403deafb8f1ed98a513af\"\u003e\u003ccode\u003ee63fc48\u003c/code\u003e\u003c/a\u003e Add release notes for SBOM and performance improvements (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9747\"\u003e#9747\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/13b701bbab291eec4bc87ea17ba06c94e5fe3054\"\u003e\u003ccode\u003e13b701b\u003c/code\u003e\u003c/a\u003e Add release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9679\"\u003e#9679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5564ca72fcd59d040e270af5dcf17a0d7161c364\"\u003e\u003ccode\u003e5564ca7\u003c/code\u003e\u003c/a\u003e List methods\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a0920fd384f800b5d0ba3dd29ecdeae4f1d4043b\"\u003e\u003ccode\u003ea0920fd\u003c/code\u003e\u003c/a\u003e Speed up ImageChops operations (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9738\"\u003e#9738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/07e9a6cd5336dc6cf8cae9165cd70cdd2b3e42fc\"\u003e\u003ccode\u003e07e9a6c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.filter()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9736\"\u003e#9736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/a94578cf9649ea13e426cf7fb2b71b39ffc0dd50\"\u003e\u003ccode\u003ea94578c\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.getchannel()\u003c/code\u003e, \u003ccode\u003eImage.merge()\u003c/code\u003e, \u003ccode\u003eImage.putalpha()\u003c/code\u003e and `Image...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/53e02c43c919d149b2a154a5180079f9df18fbbb\"\u003e\u003ccode\u003e53e02c4\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.fill()\u003c/code\u003e, \u003ccode\u003eImage.linear_gradient()\u003c/code\u003e and `Image.radial_gradient...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/af037475be8634ba739744243164ba9e2c8346a6\"\u003e\u003ccode\u003eaf03747\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003eImage.resample()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9739\"\u003e#9739\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/5c9ca56c3e5fba52b647809fbb0986c87e73a571\"\u003e\u003ccode\u003e5c9ca56\u003c/code\u003e\u003c/a\u003e Speed up \u003ccode\u003ealpha_composite\u003c/code\u003e, \u003ccode\u003ematrix\u003c/code\u003e, \u003ccode\u003enegative\u003c/code\u003e, \u003ccode\u003equantize\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9740\"\u003e#9740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/12.2.0...12.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydeck` from 0.9.2 to 0.9.3\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/visgl/deck.gl/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.15.0 to 4.16.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.49.0 to 0.50.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.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\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.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\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/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\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/6c42e8d63bc41e7b721d30b33ff97c7e2fc27ce4\"\u003e\u003ccode\u003e6c42e8d\u003c/code\u003e\u003c/a\u003e Skip the eager app import in the parent when spawning workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/56a4631c98bdfa8f4712214e3910add5e5e7d7ba\"\u003e\u003ccode\u003e56a4631\u003c/code\u003e\u003c/a\u003e Exit with a dedicated code on startup failure and stop the supervisor when a ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3314dfcc18835a4d4afbac4b0c4b8f0ee0d5095d\"\u003e\u003ccode\u003e3314dfc\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3007\"\u003e#3007\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e8a31bca03254b8457c4c89596e310282cc33edc\"\u003e\u003ccode\u003ee8a31bc\u003c/code\u003e\u003c/a\u003e chore(deps): bump the python-packages group across 1 directory with 9 updates...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8d088b18f1ead0d75a0603d983300717079f9025\"\u003e\u003ccode\u003e8d088b1\u003c/code\u003e\u003c/a\u003e Deprecate the legacy websockets implementation and default \u003ccode\u003eauto\u003c/code\u003e to websocke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/5b08cf6374430ce47de74ff2e594b277d09db17e\"\u003e\u003ccode\u003e5b08cf6\u003c/code\u003e\u003c/a\u003e Avoid copying single-frame WebSocket payloads in websockets-sansio (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2983\"\u003e#2983\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/bf3f60c28e92178878ecf043b858ab55cd97c223\"\u003e\u003ccode\u003ebf3f60c\u003c/code\u003e\u003c/a\u003e Replace click.style 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\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/eea1bcc895349d0f3c5e2fe8229d6484f801a1c4\"\u003e\u003ccode\u003eeea1bcc\u003c/code\u003e\u003c/a\u003e Build 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\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/afed2116795358dee707dbfc890b9eb5106d4720\"\u003e\u003ccode\u003eafed211\u003c/code\u003e\u003c/a\u003e Cache 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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 7.4.3 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e9.1.0\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.0 (2026-06-13)\u003c/h1\u003e\n\u003ch2\u003eRemovals and backward incompatible breaking changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14533\"\u003e#14533\u003c/a\u003e: When using \u003ccode\u003e--doctest-modules\u003c/code\u003e, autouse fixtures with \u003ccode\u003emodule\u003c/code\u003e, \u003ccode\u003epackage\u003c/code\u003e or \u003ccode\u003esession\u003c/code\u003e scope that are defined inline in Python test modules (not plugins or conftests) will now possibly execute twice.\u003c/p\u003e\n\u003cp\u003eIf this is undesirable, move the fixture definition to a \u003ccode\u003econftest.py\u003c/code\u003e file if possible.\u003c/p\u003e\n\u003cp\u003eTechnical explanation for those interested:\nWhen using \u003c!-- raw HTML omitted --\u003e--doctest-modules\u003c!-- raw HTML omitted --\u003e, pytest possibly collects Python modules twice, once as \u003ccode\u003epytest.Module\u003c/code\u003e and once as a \u003ccode\u003eDoctestModule\u003c/code\u003e (depending on the configuration).\nDue to improvements in pytest's fixture implementation, if e.g. the \u003ccode\u003eDoctestModule\u003c/code\u003e collects a fixture, it is now visible to it only, and not to the \u003ccode\u003eModule\u003c/code\u003e.\nThis means that both need to register the fixtures independently.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations (removal in next major release)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/10819\"\u003e#10819\u003c/a\u003e: Added a deprecation warning for class-scoped fixtures defined as instance methods (without \u003ccode\u003e@classmethod\u003c/code\u003e). Such fixtures set attributes on a different instance than the test methods use, leading to unexpected behavior. Use \u003ccode\u003e@classmethod\u003c/code\u003e decorator instead -- by \u003ccode\u003eyastcher\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003e10819\u003c/code\u003e and \u003ccode\u003e14011\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/12882\"\u003e#12882\u003c/a\u003e: Calling \u003ccode\u003erequest.getfixturevalue() \u0026lt;pytest.FixtureRequest.getfixturevalue\u0026gt;\u003c/code\u003e during teardown to request a fixture that was not already requested is now deprecated and will become an error in pytest 10.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003edynamic-fixture-request-during-teardown\u003c/code\u003e for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13409\"\u003e#13409\u003c/a\u003e: Using non-\u003ccode\u003e~collections.abc.Collection\u003c/code\u003e iterables (such as generators, iterators, or custom iterable objects) for the \u003ccode\u003eargvalues\u003c/code\u003e parameter in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e and \u003ccode\u003emetafunc.parametrize \u0026lt;pytest.Metafunc.parametrize\u0026gt;\u003c/code\u003e is now deprecated.\u003c/p\u003e\n\u003cp\u003eThese iterables get exhausted after the first iteration,\nleading to tests getting unexpectedly skipped in cases such as running \u003ccode\u003epytest.main()\u003c/code\u003e multiple times,\nusing class-level parametrize decorators,\nor collecting tests multiple times.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eparametrize-iterators\u003c/code\u003e for details and suggestions.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/13946\"\u003e#13946\u003c/a\u003e: The private \u003ccode\u003econfig.inicfg\u003c/code\u003e attribute is now deprecated.\nUse \u003ccode\u003econfig.getini() \u0026lt;pytest.Config.getini\u0026gt;\u003c/code\u003e to access configuration values instead.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003econfig-inicfg\u003c/code\u003e for more details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14004\"\u003e#14004\u003c/a\u003e: Passing \u003ccode\u003ebaseid\u003c/code\u003e to \u003ccode\u003e~pytest.FixtureDef\u003c/code\u003e or \u003ccode\u003enodeid\u003c/code\u003e strings to fixture registration APIs is now deprecated. These are internal pytest APIs that are used by some plugins.\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/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/7.4.3...9.1.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/james75x2-design/AGAD/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/james75x2-design%2FAGAD/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":"/api/python_api","pr_created_at":"2026-07-03T13:40:58.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4803933738","node_id":"PR_kwDOBbRFcs7tm9tJ","number":3693,"state":"closed","title":"chore(deps): bump typing-extensions from 4.15.0 to 4.16.0 in /api/python_api","user":"dependabot[bot]","labels":["size/XS","dependencies","python"],"assignees":[],"locked":false,"comments_count":5,"pull_request":true,"closed_at":"2026-07-18T00:27:23.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-03T13:40:58.000Z","updated_at":"2026-07-18T00:27:32.000Z","time_to_close":1248385,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":"/api/python_api","ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=pip\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/kubeflow/trainer/pull/3693","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/kubeflow%2Ftrainer/issues/3693","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/3693/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-03T08:47:45.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4801945536","node_id":"PR_kwDOR335Os7tgbcc","number":59,"state":"closed","title":"Bump the pip-minor-patch group across 1 directory with 37 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-03T10:38:41.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-03T08:47:45.000Z","updated_at":"2026-07-03T10:38:43.000Z","time_to_close":6656,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip-minor-patch","update_count":37,"packages":[{"name":"alembic","old_version":"1.14.1","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"anyio","old_version":"4.13.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"click","old_version":"8.3.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"croniter","old_version":"6.2.2","new_version":"6.2.3","repository_url":"https://github.com/pallets-eco/croniter"},{"name":"fastapi","old_version":"0.135.3","new_version":"0.139.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"fastapi-cli","old_version":"0.0.24","new_version":"0.0.27","repository_url":"https://github.com/fastapi/fastapi-cli"},{"name":"fastapi-cloud-cli","old_version":"0.15.1","new_version":"0.22.1","repository_url":"https://github.com/fastapilabs/fastapi-cloud-cli"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.5.3","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"griffelib","old_version":"2.0.2","new_version":"2.1.0"},{"name":"httptools","old_version":"0.7.1","new_version":"0.8.0","repository_url":"https://github.com/MagicStack/httptools"},{"name":"idna","old_version":"3.11","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"jiter","old_version":"0.14.0","new_version":"0.16.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"mako","old_version":"1.3.10","new_version":"1.3.12","repository_url":"https://github.com/sqlalchemy/mako"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"mcp","old_version":"1.27.1","new_version":"1.28.1","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"openai","old_version":"2.36.0","new_version":"2.44.0","repository_url":"https://github.com/openai/openai-python"},{"name":"openai-agents","old_version":"0.17.4","new_version":"0.17.7","repository_url":"https://github.com/openai/openai-agents-python"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.1","new_version":"2.14.2","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pydantic-core","old_version":"2.41.5","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pyotp","old_version":"2.9.0","new_version":"2.10.0","repository_url":"https://github.com/pyauth/pyotp"},{"name":"python-multipart","old_version":"0.0.22","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"redis","old_version":"8.0.0","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"rich-toolkit","old_version":"0.20.0","new_version":"0.20.1"},{"name":"rpds-py","old_version":"2026.5.1","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"rq","old_version":"2.9.0","new_version":"2.10.0","repository_url":"https://github.com/rq/rq"},{"name":"sentry-sdk","old_version":"2.57.0","new_version":"2.64.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"sqlalchemy","old_version":"2.0.48","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"sse-starlette","old_version":"3.4.4","new_version":"3.4.5","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"starlette","old_version":"1.0.0","new_version":"1.3.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.68.3","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typer","old_version":"0.26.7","new_version":"0.26.8","repository_url":"https://github.com/fastapi/typer"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.42.0","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"watchfiles","old_version":"1.1.1","new_version":"1.2.0","repository_url":"https://github.com/samuelcolvin/watchfiles"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-minor-patch group with 37 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.14.1` | `1.18.5` |\n| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.1` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.4.2` |\n| [croniter](https://github.com/pallets-eco/croniter) | `6.2.2` | `6.2.3` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.135.3` | `0.139.0` |\n| [fastapi-cli](https://github.com/fastapi/fastapi-cli) | `0.0.24` | `0.0.27` |\n| [fastapi-cloud-cli](https://github.com/fastapilabs/fastapi-cloud-cli) | `0.15.1` | `0.22.1` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.5.3` |\n| griffelib | `2.0.2` | `2.1.0` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.7.1` | `0.8.0` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.18` |\n| [jiter](https://github.com/pydantic/jiter) | `0.14.0` | `0.16.0` |\n| [mako](https://github.com/sqlalchemy/mako) | `1.3.10` | `1.3.12` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.27.1` | `1.28.1` |\n| [openai](https://github.com/openai/openai-python) | `2.36.0` | `2.44.0` |\n| [openai-agents](https://github.com/openai/openai-agents-python) | `0.17.4` | `0.17.7` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.4` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.1` | `2.14.2` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.41.5` | `2.47.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [pyotp](https://github.com/pyauth/pyotp) | `2.9.0` | `2.10.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.22` | `0.0.32` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.0.1` |\n| rich-toolkit | `0.20.0` | `0.20.1` |\n| [rpds-py](https://github.com/crate-py/rpds) | `2026.5.1` | `2026.6.3` |\n| [rq](https://github.com/rq/rq) | `2.9.0` | `2.10.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.57.0` | `2.64.0` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.48` | `2.0.51` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.4.4` | `3.4.5` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.0` | `1.3.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.3` |\n| [typer](https://github.com/fastapi/typer) | `0.26.7` | `0.26.8` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.42.0` | `0.49.0` |\n| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.1.1` | `1.2.0` |\n\n\nUpdates `alembic` from 1.14.1 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 `anyio` from 4.13.0 to 4.14.1\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.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed teardown of higher-scoped async fixtures failing on asyncio with \u003ccode\u003eRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\u003c/code\u003e when an async test raise an outcome exception (e.g., \u003ccode\u003epytest.skip()\u003c/code\u003e, \u003ccode\u003epytest.xfail()\u003c/code\u003e, or \u003ccode\u003epytest.fail()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1179\"\u003e#1179\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting a value of \u003ccode\u003e0\u003c/code\u003e when the limiter was instantiated outside of an event loop, contradicting the documented behavior of allowing 0 total tokens (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1183\"\u003e#1183\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.14.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for Python 3.15\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded an asynchronous implementation of the \u003ccode\u003eitertools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/998\"\u003e#998\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003elocal_port\u003c/code\u003e parameter to \u003ccode\u003econnect_tcp()\u003c/code\u003e to allow binding to a specific local port before connecting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1067\"\u003e#1067\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nullwiz\"\u003e\u003ccode\u003e@​nullwiz\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded support for custom capacity limiters in async path and file I/O functions and classes\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003ecreate_task()\u003c/code\u003e task group method for easier asyncio migration (returns a \u003ccode\u003eTaskHandle\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1098\"\u003e#1098\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged \u003ccode\u003eTaskGroup.start_soon()\u003c/code\u003e to return a \u003ccode\u003eTaskHandle\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded an option for \u003ccode\u003eTaskGroup.start()\u003c/code\u003e to return a \u003ccode\u003eTaskHandle\u003c/code\u003e (which then contains the start value in the \u003ccode\u003estart_value\u003c/code\u003e property)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded the \u003ccode\u003ecancel()\u003c/code\u003e convenience method to \u003ccode\u003eTaskGroup\u003c/code\u003e as a shortcut for cancelling the task group's cancel scope\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved the error message when a known backend is not installed to suggest the install command (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1115\"\u003e#1115\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImproved \u003ccode\u003eanyio.Path\u003c/code\u003e to preserve subclass types by returning \u003ccode\u003eSelf\u003c/code\u003e in methods that return path objects (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1130\"\u003e#1130\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged the parameter type annotation in \u003ccode\u003eanyio.Path.write_bytes()\u003c/code\u003e to accept any \u003ccode\u003eReadableBuffer\u003c/code\u003e, thus allowing it to accept \u003ccode\u003ebytearray\u003c/code\u003e and \u003ccode\u003ememoryview\u003c/code\u003e to match \u003ccode\u003epathlib.Path.write_bytes()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1135\"\u003e#1135\u003c/a\u003e; PR by \u003ca href=\"https://github.com/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged several type annotations to only accept callables returning coroutine-like objects instead of arbitrary awaitables:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eTaskGroup.start_soon()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eTaskGroup.start()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis reverts an earlier change from v3.7.0 which was made in error. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1153\"\u003e#1153\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged \u003ccode\u003eanyio.run\u003c/code\u003e to support callables returning arbitrary awaitables at runtime on all backends. Previously, this only worked on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1171\"\u003e#1171\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eChanged several classes (and their subclasses) to have \u003ccode\u003e__slots__\u003c/code\u003e (with \u003ccode\u003e__weakref__\u003c/code\u003e):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eanyio.CancelScope\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.CapacityLimiter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.Condition\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.Event\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.Lock\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.ResourceGuard\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eanyio.Semaphore\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed cancellation exception escaping a cancel scope when triggered via \u003ccode\u003echeck_cancelled()\u003c/code\u003e in a worker thread (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1113\"\u003e#1113\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eTaskGroup\u003c/code\u003e raising \u003ccode\u003eAttributeError\u003c/code\u003e instead of a clear error when entered more than once (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1109\"\u003e#1109\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bahtya\"\u003e\u003ccode\u003e@​bahtya\u003c/code\u003e\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\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/149b9e907618fadf6840a4d3cebad533b0c7d033\"\u003e\u003ccode\u003e149b9e9\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/377518cd1160314f2fdf74f356ae9e848c94a065\"\u003e\u003ccode\u003e377518c\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6 to 7 in the github-actions group (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b42a2f5e8e9910d0c57b970f9a747427a9da26f0\"\u003e\u003ccode\u003eb42a2f5\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1185\"\u003e#1185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/3ceb6ffbfa89be715f444550883356fbfbc13154\"\u003e\u003ccode\u003e3ceb6ff\u003c/code\u003e\u003c/a\u003e Allow 0 tokens in a CapacityLimiter instantiated outside an event loop (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1183\"\u003e#1183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/e10d1db74f7a59cb283a1e4b3b22227da11c6f07\"\u003e\u003ccode\u003ee10d1db\u003c/code\u003e\u003c/a\u003e Add missing await to open_file() in file I/O concurrency example (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1182\"\u003e#1182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1dbc3b62256e5877bcf610aca98ba6e450d14c20\"\u003e\u003ccode\u003e1dbc3b6\u003c/code\u003e\u003c/a\u003e OutcomeException should not discard test runner_task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/ffe91331adb912c5d150f5d373f7cd28a0e96a62\"\u003e\u003ccode\u003effe9133\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f8b9f011e548c2c1c3e9abb0287bb1048ab3dca8\"\u003e\u003ccode\u003ef8b9f01\u003c/code\u003e\u003c/a\u003e Fixed asyncio lock waiter deadlocks after cancellation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1145\"\u003e#1145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d517ee1d41080073cc244d8adebf822a08b762de\"\u003e\u003ccode\u003ed517ee1\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1176\"\u003e#1176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/550b68e1acaf82b1503b0e99fbc7f964cd07fe49\"\u003e\u003ccode\u003e550b68e\u003c/code\u003e\u003c/a\u003e Make \u003ccode\u003eanyio.run\u003c/code\u003e support \u003ccode\u003eAwaitable\u003c/code\u003e at runtime on all backends (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1171\"\u003e#1171\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.13.0...4.14.1\"\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.1 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.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `croniter` from 6.2.2 to 6.2.3\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/croniter/blob/main/CHANGELOG.rst\"\u003ecroniter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.3 (2026-07-02)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Fix quadratic expansion of comma-separated range lists for a large speed-up on expressions with many ranges. [1d79fc6, [#231](https://github.com/pallets-eco/croniter/issues/231), @alhudz]\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Reject a zero step (e.g. ``5-5/0``) in equal and reversed cron ranges instead of silently accepting it. [ab27767, [#232](https://github.com/pallets-eco/croniter/issues/232), @alhudz]\n- Fix ``expand_from_start_time`` month low-bound off-by-one so stepped month ranges start on the correct month. [f329964, [#235](https://github.com/pallets-eco/croniter/issues/235), @alhudz]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eFix zizmor-reported security findings in GitHub Actions workflows. [ed19f94, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eBump pinned build and CI dependencies via dependabot.\u003c/li\u003e\n\u003cli\u003eUpgrade locked development and build dependencies (\u003ccode\u003euv lock --upgrade\u003c/code\u003e).\n\u003c/code\u003e\u003c/pre\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-eco/croniter/commit/22b59e05f5ca485c45596b2a9b580fddffbf753f\"\u003e\u003ccode\u003e22b59e0\u003c/code\u003e\u003c/a\u003e Prepare for release 6.2.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/236\"\u003e#236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ab277671adc8e446e8dc7f1e939eabf024b6199e\"\u003e\u003ccode\u003eab27767\u003c/code\u003e\u003c/a\u003e reject zero step in equal and reversed cron ranges (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/232\"\u003e#232\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/f329964223eeb29e7788b1a9d615b525148fec96\"\u003e\u003ccode\u003ef329964\u003c/code\u003e\u003c/a\u003e fix expand_from_start_time month low bound off-by-one (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/235\"\u003e#235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/9810279c20030954e2f1ed2cf5f1d34b98c6b07f\"\u003e\u003ccode\u003e9810279\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/233\"\u003e#233\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/d051aaf6342fbe9c559b9fcd99e6fb6f3bb63cb7\"\u003e\u003ccode\u003ed051aaf\u003c/code\u003e\u003c/a\u003e Bump hatchling from 1.29.0 to 1.30.1 in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/1d79fc6555fb9208e290e0af10194eec638ae01c\"\u003e\u003ccode\u003e1d79fc6\u003c/code\u003e\u003c/a\u003e fix quadratic expansion of comma-separated range lists (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/231\"\u003e#231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ed19f94c472ef665598693a554e6a5555be41f7b\"\u003e\u003ccode\u003eed19f94\u003c/code\u003e\u003c/a\u003e Fix zizmor-reported security findings in GitHub Actions workflows (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/82657c37b873319570fee74c1864cb4d6153f543\"\u003e\u003ccode\u003e82657c3\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/229\"\u003e#229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/8e13827f77358beabf75245ad37d31a581cb6d1e\"\u003e\u003ccode\u003e8e13827\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/228\"\u003e#228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/e55d70bf2288e25c1ddf850fde703d56888772f2\"\u003e\u003ccode\u003ee55d70b\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group across 1 directory (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/225\"\u003e#225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/croniter/compare/6.2.2...6.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi` from 0.135.3 to 0.139.0\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.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Support dependencies in \u003ccode\u003eapp.frontend()\u003c/code\u003e, e.g. for automatic cookie authentication for the frontend. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15908\"\u003e#15908\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\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15897\"\u003e#15897\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/15895\"\u003e#15895\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/15896\"\u003e#15896\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/15899\"\u003e#15899\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/15892\"\u003e#15892\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 tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15891\"\u003e#15891\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/15893\"\u003e#15893\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/15898\"\u003e#15898\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/15900\"\u003e#15900\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/15890\"\u003e#15890\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/15894\"\u003e#15894\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15888\"\u003e#15888\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15880\"\u003e#15880\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15889\"\u003e#15889\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15883\"\u003e#15883\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15885\"\u003e#15885\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15882\"\u003e#15882\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 tr (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15887\"\u003e#15887\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15886\"\u003e#15886\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15881\"\u003e#15881\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15884\"\u003e#15884\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 (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15879\"\u003e#15879\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\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👥 Update FastAPI People - Experts. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15909\"\u003e#15909\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 FastAPI GitHub topic repositories. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15906\"\u003e#15906\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 FastAPI People - Contributors and Translators. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15878\"\u003e#15878\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👷 Remove not needed \u003ccode\u003eallow-unsafe-pr-checkout: true\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15876\"\u003e#15876\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 with 5 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15872\"\u003e#15872\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 10 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15870\"\u003e#15870\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 CodSpeedHQ/action from 4.17.0 to 4.17.5 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15826\"\u003e#15826\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\u003ch2\u003e0.138.1\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Refactor Library Skills, make info easier to find for agents. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15841\"\u003e#15841\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\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👷 Simplify pull request workflow triggers. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15836\"\u003e#15836\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.7.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15833\"\u003e#15833\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.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15831\"\u003e#15831\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!-- 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/fastapi/fastapi/commit/cecd96d9c6c318e0df1c40cedbc2e953381ddfd3\"\u003e\u003ccode\u003ececd96d\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15910\"\u003e#15910\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/aea660936b55fdbd84270d24f892839388922dd6\"\u003e\u003ccode\u003eaea6609\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/319be508ce7db9ee5f52c3b9baa68c6cc1037c10\"\u003e\u003ccode\u003e319be50\u003c/code\u003e\u003c/a\u003e ✨ Support dependencies in \u003ccode\u003eapp.frontend()\u003c/code\u003e, e.g. for automatic cookie authent...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/66a90f6ee9c0cf58ec61b14f8925344d6f16eae5\"\u003e\u003ccode\u003e66a90f6\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d30a3ebfc7d7fd7851ba4243677266c53cb9f154\"\u003e\u003ccode\u003ed30a3eb\u003c/code\u003e\u003c/a\u003e 👥 Update FastAPI People - Experts (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15909\"\u003e#15909\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/122f1b58f4e0fabfefef3710a8c8247bb2bd820b\"\u003e\u003ccode\u003e122f1b5\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/fd6ece32eeb27c9ce164bd9170f9d8e1db1dacff\"\u003e\u003ccode\u003efd6ece3\u003c/code\u003e\u003c/a\u003e 👥 Update FastAPI GitHub topic repositories (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15906\"\u003e#15906\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/ec2a6adaf14c440bdcd0fd3f4ca203daa8c3ba6a\"\u003e\u003ccode\u003eec2a6ad\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9d7d7febd3a66844f948254c1ba4745b6cc16f40\"\u003e\u003ccode\u003e9d7d7fe\u003c/code\u003e\u003c/a\u003e 🌐 Update translations for fr (update-outdated) (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15897\"\u003e#15897\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/8dc852df4713efa998d126c5194302e9f06e7675\"\u003e\u003ccode\u003e8dc852d\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.135.3...0.139.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi-cli` from 0.0.24 to 0.0.27\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi-cli/releases\"\u003efastapi-cli's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.27\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003eFASTAPI_PUBLIC_URL\u003c/code\u003e env var to configure app's public URL that is shown on startup. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/381\"\u003e#381\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\u003ch2\u003e0.0.26\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show tip on how to configure \u003ccode\u003eentrypoint\u003c/code\u003e in \u003ccode\u003epyproject.toml\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/389\"\u003e#389\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\u003ch2\u003e0.0.25\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show import string source. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/388\"\u003e#388\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✨ Include the version of \u003ccode\u003efastapi-cloud-cli\u003c/code\u003e to the output of \u003ccode\u003e--version\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/341\"\u003e#341\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\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Update docs about contributing. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/410\"\u003e#410\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 security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/408\"\u003e#408\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\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👷 Add pre-commit hook to catch typos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/418\"\u003e#418\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 typer from 0.26.2 to 0.26.7. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/427\"\u003e#427\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 fastapi-cloud-cli from 0.17.1 to 0.19.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/429\"\u003e#429\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 rich-toolkit from 0.19.9 to 0.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/428\"\u003e#428\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 with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/430\"\u003e#430\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 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/426\"\u003e#426\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 eps1lon/actions-label-merge-conflict from 3.0.3 to 3.1.0 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/425\"\u003e#425\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 typer from 0.25.1 to 0.26.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/424\"\u003e#424\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👷 Automate release preparation. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/420\"\u003e#420\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🔥 Remove old package stub slim, not user nor needed. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/419\"\u003e#419\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 zizmorcore/zizmor-action from 0.5.3 to 0.5.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/414\"\u003e#414\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👷 Configure Dependabot to group updates and update weekly. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/407\"\u003e#407\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🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/413\"\u003e#413\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 branch name in \u003ccode\u003eguard-dependencies.yml\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/404\"\u003e#404\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/403\"\u003e#403\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump uvicorn from 0.44.0 to 0.46.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/400\"\u003e#400\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 rich-toolkit from 0.19.7 to 0.19.9. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/399\"\u003e#399\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 mypy from 2.0.0 to 2.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/397\"\u003e#397\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🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/373\"\u003e#373\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 ty from 0.0.34 to 0.0.35. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/396\"\u003e#396\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 actions/add-to-project from 1.0.2 to 2.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/392\"\u003e#392\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 actions/labeler from 6.0.1 to 6.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/393\"\u003e#393\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 prek from 0.3.11 to 0.3.13. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/394\"\u003e#394\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 mypy from 1.20.2 to 2.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/395\"\u003e#395\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 from 0.0.33 to 0.0.34. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/391\"\u003e#391\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 typer from 0.25.0 to 0.25.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/390\"\u003e#390\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 from 0.0.32 to 0.0.33. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/387\"\u003e#387\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!-- 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/fastapi/fastapi-cli/blob/main/release-notes.md\"\u003efastapi-cli's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.27 (2026-06-18)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003eFASTAPI_PUBLIC_URL\u003c/code\u003e env var to configure app's public URL that is shown on startup. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/381\"\u003e#381\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\u003ch2\u003e0.0.26 (2026-06-18)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show tip on how to configure \u003ccode\u003eentrypoint\u003c/code\u003e in \u003ccode\u003epyproject.toml\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/389\"\u003e#389\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\u003ch2\u003e0.0.25 (2026-06-18)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show import string source. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/388\"\u003e#388\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✨ Include the version of \u003ccode\u003efastapi-cloud-cli\u003c/code\u003e to the output of \u003ccode\u003e--version\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/341\"\u003e#341\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\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Update docs about contributing. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/410\"\u003e#410\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 security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/408\"\u003e#408\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\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e👷 Add pre-commit hook to catch typos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/418\"\u003e#418\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 typer from 0.26.2 to 0.26.7. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/427\"\u003e#427\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 fastapi-cloud-cli from 0.17.1 to 0.19.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/429\"\u003e#429\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 rich-toolkit from 0.19.9 to 0.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/428\"\u003e#428\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 with 3 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/430\"\u003e#430\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 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/426\"\u003e#426\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 eps1lon/actions-label-merge-conflict from 3.0.3 to 3.1.0 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/425\"\u003e#425\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 typer from 0.25.1 to 0.26.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/424\"\u003e#424\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👷 Automate release preparation. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/420\"\u003e#420\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🔥 Remove old package stub slim, not user nor needed. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/419\"\u003e#419\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 zizmorcore/zizmor-action from 0.5.3 to 0.5.6. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/414\"\u003e#414\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👷 Configure Dependabot to group updates and update weekly. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/407\"\u003e#407\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🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/413\"\u003e#413\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 branch name in \u003ccode\u003eguard-dependencies.yml\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/404\"\u003e#404\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/403\"\u003e#403\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump uvicorn from 0.44.0 to 0.46.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/400\"\u003e#400\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 rich-toolkit from 0.19.7 to 0.19.9. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/399\"\u003e#399\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 mypy from 2.0.0 to 2.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/397\"\u003e#397\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🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/373\"\u003e#373\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 ty from 0.0.34 to 0.0.35. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/396\"\u003e#396\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 actions/add-to-project from 1.0.2 to 2.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/392\"\u003e#392\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 actions/labeler from 6.0.1 to 6.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/393\"\u003e#393\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 prek from 0.3.11 to 0.3.13. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/394\"\u003e#394\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 mypy from 1.20.2 to 2.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/pull/395\"\u003e#395\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!-- 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/fastapi/fastapi-cli/commit/760451b3fbd3814902a36696959b5e49f6c80dad\"\u003e\u003ccode\u003e760451b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.0.27 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/issues/435\"\u003e#435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/e3893efbeb9d50a000ef997b7f54bc08a0f27fa2\"\u003e\u003ccode\u003ee3893ef\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/46aca093b0835b00476c7b45d408e7cbaf960980\"\u003e\u003ccode\u003e46aca09\u003c/code\u003e\u003c/a\u003e ✨ Add \u003ccode\u003eFASTAPI_PUBLIC_URL\u003c/code\u003e env var to configure app's public URL that is show...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/04c12c244febb6b3939df6011b5a4bd5a7bca89c\"\u003e\u003ccode\u003e04c12c2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.0.26 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/issues/434\"\u003e#434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/96bd5ab16b7ae16bb3746c2eff2fed31e3a7bd5d\"\u003e\u003ccode\u003e96bd5ab\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/cd37a8e50f9b37a9f4571a8e6938f274a56297c9\"\u003e\u003ccode\u003ecd37a8e\u003c/code\u003e\u003c/a\u003e 🚸 Show tip on how to configure \u003ccode\u003eentrypoint\u003c/code\u003e in \u003ccode\u003epyproject.toml\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/issues/389\"\u003e#389\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/8c4ab6663187c5fcdb68fe523c70ff265a9c50da\"\u003e\u003ccode\u003e8c4ab66\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.0.25 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/issues/433\"\u003e#433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/b6bf5b53d87f64cad2e56541008b6f3a62305b1c\"\u003e\u003ccode\u003eb6bf5b5\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/572ea4c0f286c5f70d407b30d2f444e69e4c1f65\"\u003e\u003ccode\u003e572ea4c\u003c/code\u003e\u003c/a\u003e 👷 Add pre-commit hook to catch typos (\u003ca href=\"https://redirect.github.com/fastapi/fastapi-cli/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi-cli/commit/1428d40976c1bb2585941d9961898ce6b9d0f448\"\u003e\u003ccode\u003e1428d40\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-cli/compare/0.0.24...0.0.27\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi-cloud-cli` from 0.15.1 to 0.22.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/releases\"\u003efastapi-cloud-cli's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.22.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Validate app logs tail limit before request. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/287\"\u003e#287\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.22.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add cloud apps update command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/280\"\u003e#280\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Remove \u003ccode\u003esrc\u003c/code\u003e from \u003ccode\u003edirectory\u003c/code\u003e option description and error message. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/279\"\u003e#279\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\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/276\"\u003e#276\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 sentry-sdk from 2.62.0 to 2.63.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/277\"\u003e#277\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\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump actions/checkout from 6.0.3 to 7.0.0 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/275\"\u003e#275\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👷 Simplify pull request workflow triggers. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/278\"\u003e#278\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.21.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add --json support for logout command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/269\"\u003e#269\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add cloud ci setup command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/268\"\u003e#268\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add cloud ci print-workflow command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/267\"\u003e#267\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens delete command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/264\"\u003e#264\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens create command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/263\"\u003e#263\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens list command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/262\"\u003e#262\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Handle invalid apps create --directory input. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/265\"\u003e#265\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Use new deployment route to fetch deployment. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/266\"\u003e#266\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e♻️ Update deployment data when triggering upload complete. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/250\"\u003e#250\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e♻️ Improve error messages for logs. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/249\"\u003e#249\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\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📝 Update docs badges: remove Publish badge, it doesn't give extra information. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/260\"\u003e#260\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\u003eInternal\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/fastapilabs/fastapi-cloud-cli/blob/main/release-notes.md\"\u003efastapi-cloud-cli's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.22.1 (2026-07-01)\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Validate app logs tail limit before request. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/287\"\u003e#287\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.22.0 (2026-06-30)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add cloud apps update command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/280\"\u003e#280\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Remove \u003ccode\u003esrc\u003c/code\u003e from \u003ccode\u003edirectory\u003c/code\u003e option description and error message. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/279\"\u003e#279\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\u003eUpgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/276\"\u003e#276\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 sentry-sdk from 2.62.0 to 2.63.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/277\"\u003e#277\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\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump actions/checkout from 6.0.3 to 7.0.0 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/275\"\u003e#275\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👷 Simplify pull request workflow triggers. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/278\"\u003e#278\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.21.0 (2026-06-24)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add --json support for logout command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/269\"\u003e#269\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add cloud ci setup command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/268\"\u003e#268\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add cloud ci print-workflow command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/267\"\u003e#267\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens delete command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/264\"\u003e#264\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens create command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/263\"\u003e#263\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✨ Add tokens list command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/262\"\u003e#262\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Handle invalid apps create --directory input. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/265\"\u003e#265\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Use new deployment route to fetch deployment. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/266\"\u003e#266\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e♻️ Update deployment data when triggering upload complete. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/250\"\u003e#250\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e♻️ Improve error messages for logs. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/249\"\u003e#249\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\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📝 Update docs badges: remove Publish badge, it doesn't give extra information. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/260\"\u003e#260\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!-- 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/fastapilabs/fastapi-cloud-cli/commit/20f9fe34e1b95fb925e168f9d030b9d52cee5f8a\"\u003e\u003ccode\u003e20f9fe3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.22.1 (\u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/issues/288\"\u003e#288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/e2b4722fc22b3c3e6c0babafa5ad21862372ff52\"\u003e\u003ccode\u003ee2b4722\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/5...\n\n_Description has been truncated_","html_url":"https://github.com/manasijatech/ananta-market-stack/pull/59","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/manasijatech%2Fananta-market-stack/issues/59","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/59/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-03T05:13:50.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4800559976","node_id":"PR_kwDOPmi_-c7tb4Ul","number":11,"state":"open","title":"Bump typing-extensions from 4.15.0 to 4.16.0","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-03T05:13:50.000Z","updated_at":"2026-07-03T05:14:12.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=pip\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/SarahRogue81/Pelican-Website/pull/11","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/SarahRogue81%2FPelican-Website/issues/11","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/11/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-03T03:04:07.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4799930532","node_id":"PR_kwDOIwh-5s7tZ0e_","number":763,"state":"closed","title":"Bump typing-extensions from 4.15.0 to 4.16.0","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":["uriyyo"],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-03T03:05:02.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-03T03:04:07.000Z","updated_at":"2026-07-03T03:05:11.000Z","time_to_close":55,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=uv\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/uriyyo/fastapi-filters/pull/763","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/uriyyo%2Ffastapi-filters/issues/763","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/763/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-02T19:44:53.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4797698351","node_id":"PR_kwDORuOgZM7tSi6d","number":146,"state":"closed","title":"Bump typing-extensions from 4.15.0 to 4.16.0","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-02T19:45:04.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-02T19:44:53.000Z","updated_at":"2026-07-02T19:45:12.000Z","time_to_close":11,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=pip\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/nmurrell07/aiohttp/pull/146","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmurrell07%2Faiohttp/issues/146","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/146/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-02T13:47:04.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4795019805","node_id":"PR_kwDOSXyk6s7tJvm4","number":174,"state":"open","title":"Build(deps-dev): Bump typing-extensions from 4.15.0 to 4.16.0","user":"dependabot[bot]","labels":["dependencies","minor"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-02T13:47:04.000Z","updated_at":"2026-07-02T13:53:52.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Build(deps-dev): Bump","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=pip\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/MohsenHNSJ/Telegram-Bot/pull/174","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/MohsenHNSJ%2FTelegram-Bot/issues/174","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/174/packages"}},{"old_version":"4.15.0","new_version":"4.16.0","update_type":"minor","path":null,"pr_created_at":"2026-07-02T13:43:35.000Z","version_change":"4.15.0 → 4.16.0","issue":{"uuid":"4794989066","node_id":"PR_kwDODUIXOs7tJpH-","number":1107,"state":"open","title":"Bump typing-extensions from 4.15.0 to 4.16.0","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-02T13:43:35.000Z","updated_at":"2026-07-02T14:14:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"}],"path":null,"ecosystem":"pip"},"body":"Bumps [typing-extensions](https://github.com/python/typing_extensions) from 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that calling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or \u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different result in some situations depending on whether or not a profiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the \u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15. \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same name.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e is applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e's \u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and \u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e, \u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant that\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with \u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could have a different\nresult in some situations depending on whether or not a profiling function had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and PyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of multiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca href=\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass \u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on Python 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e, \u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to \u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated alias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or deep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or \u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX = sentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than \u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e Prepare relase 4.16.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e Bump version to 4.16.0rc2.dev (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc2 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e Remove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e Improve \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e Post-release followups for 3.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e Prepare release 4.16.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e Type variable tuple variance (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e Pin SQLAlchemy third-party tests to pytest==9.0.3 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e docs: add version compatibility table (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\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=typing-extensions\u0026package-manager=uv\u0026previous-version=4.15.0\u0026new-version=4.16.0)](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/alpha-unito/streamflow/pull/1107","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/alpha-unito%2Fstreamflow/issues/1107","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1107/packages"}},{"old_version":"4.14.1","new_version":"4.15.0","update_type":"minor","path":null,"pr_created_at":"2026-05-26T00:23:31.000Z","version_change":"4.14.1 → 4.15.0","issue":{"uuid":"4520310526","node_id":"PR_kwDOSKFNzM7fNcsi","number":38,"state":"open","title":"chore(deps): bump the python-minor-patch group across 1 directory with 28 updates","user":"dependabot[bot]","labels":["ignore-for-release"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-26T00:23:31.000Z","updated_at":"2026-05-26T00:23:40.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor-patch","update_count":28,"packages":[{"name":"ruff","old_version":"0.15.11","new_version":"0.15.14","repository_url":"https://github.com/astral-sh/ruff"},{"name":"authlib","old_version":"1.7.0","new_version":"1.7.2","repository_url":"https://github.com/authlib/authlib"},{"name":"google-auth","old_version":"2.47.0","new_version":"2.53.0","repository_url":"https://github.com/googleapis/google-auth-library-python"},{"name":"pydantic","old_version":"2.12.5","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"typing-extensions","old_version":"4.14.1","new_version":"4.15.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"anyio","old_version":"4.10.0","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"typer","old_version":"0.16.0","new_version":"0.25.1","repository_url":"https://github.com/fastapi/typer"},{"name":"uvicorn","old_version":"0.35.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"openai","old_version":"2.14.0","new_version":"2.38.0","repository_url":"https://github.com/openai/openai-python"},{"name":"mcp","old_version":"1.25.0","new_version":"1.27.1","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"fastapi","old_version":"0.129.0","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"filelock","old_version":"3.20.3","new_version":"3.29.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"python-multipart","old_version":"0.0.22","new_version":"0.0.29","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"boto3","old_version":"1.42.28","new_version":"1.43.14","repository_url":"https://github.com/boto/boto3"},{"name":"ollama","old_version":"0.6.1","new_version":"0.6.2","repository_url":"https://github.com/ollama/ollama-python"},{"name":"psutil","old_version":"7.0.0","new_version":"7.2.2","repository_url":"https://github.com/giampaolo/psutil"},{"name":"opentelemetry-instrumentation-openai","old_version":"0.52.5","new_version":"0.60.0","repository_url":"https://github.com/traceloop/openllmetry"},{"name":"langgraph","old_version":"1.0.6","new_version":"1.2.1","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"openai-agents","old_version":"0.6.5","new_version":"0.17.3","repository_url":"https://github.com/openai/openai-agents-python"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"langchain-openai","old_version":"1.1.7","new_version":"1.2.2","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langgraph-checkpoint-sqlite","old_version":"3.0.3","new_version":"3.1.0","repository_url":"https://github.com/langchain-ai/langgraph"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 23 updates in the /python directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.11` | `0.15.14` |\n| [authlib](https://github.com/authlib/authlib) | `1.7.0` | `1.7.2` |\n| [google-auth](https://github.com/googleapis/google-auth-library-python) | `2.47.0` | `2.53.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.4` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.14.1` | `4.15.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.10.0` | `4.13.0` |\n| [typer](https://github.com/fastapi/typer) | `0.16.0` | `0.25.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.35.0` | `0.48.0` |\n| [openai](https://github.com/openai/openai-python) | `2.14.0` | `2.38.0` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.25.0` | `1.27.1` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.129.0` | `0.136.3` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.20.3` | `3.29.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.22` | `0.0.29` |\n| [boto3](https://github.com/boto/boto3) | `1.42.28` | `1.43.14` |\n| [ollama](https://github.com/ollama/ollama-python) | `0.6.1` | `0.6.2` |\n| [psutil](https://github.com/giampaolo/psutil) | `7.0.0` | `7.2.2` |\n| [opentelemetry-instrumentation-openai](https://github.com/traceloop/openllmetry) | `0.52.5` | `0.60.0` |\n| [langgraph](https://github.com/langchain-ai/langgraph) | `1.0.6` | `1.2.1` |\n| [openai-agents](https://github.com/openai/openai-agents-python) | `0.6.5` | `0.17.3` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.1.7` | `1.2.2` |\n| [langgraph-checkpoint-sqlite](https://github.com/langchain-ai/langgraph) | `3.0.3` | `3.1.0` |\n\n\nUpdates `ruff` from 0.15.11 to 0.15.14\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.14\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003eairflow-task-implicit-multiple-outputs\u003c/code\u003e (\u003ccode\u003eAIR202\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25152\"\u003e#25152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Mark \u003ccode\u003ePTH101\u003c/code\u003e fix as unsafe when first argument is a class attribute annotated as \u003ccode\u003eint\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25086\"\u003e#25086\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Implement \u003ccode\u003etoo-many-try-statements\u003c/code\u003e (\u003ccode\u003eW0717\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23970\"\u003e#23970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003eincorrect-decorator-order\u003c/code\u003e (\u003ccode\u003eRUF074\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23461\"\u003e#23461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003efallible-context-manager\u003c/code\u003e (\u003ccode\u003eRUF075\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22844\"\u003e#22844\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix lambda formatting in interpolated string expressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25144\"\u003e#25144\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat generic \u003ccode\u003efrozenset\u003c/code\u003e annotations as immutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25251\"\u003e#25251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-type-checking\u003c/code\u003e] Avoid \u003ccode\u003estrict\u003c/code\u003e behavior when \u003ccode\u003efuture-annotations\u003c/code\u003e are enabled (\u003ccode\u003eTC001\u003c/code\u003e, \u003ccode\u003eTC002\u003c/code\u003e, \u003ccode\u003eTC003\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25035\"\u003e#25035\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Avoid false positives in \u003ccode\u003eelse\u003c/code\u003e clause (\u003ccode\u003ePLR1733\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25177\"\u003e#25177\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-comprehensions\u003c/code\u003e] Skip \u003ccode\u003eC417\u003c/code\u003e for lambdas with positional-only parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25272\"\u003e#25272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Preserve f-string source verbatim in \u003ccode\u003eSIM101\u003c/code\u003e fix (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25061\"\u003e#25061\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid unnecessary parser lookahead for operators (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25290\"\u003e#25290\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate code example setting Neovim LSP log level (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25284\"\u003e#25284\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd full PEP 798 support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25104\"\u003e#25104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a parser recursion limit (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24810\"\u003e#24810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate various \u003ccode\u003eruff_python_stdlib\u003c/code\u003e APIs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25273\"\u003e#25273\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/ocaballeror\"\u003e\u003ccode\u003e@​ocaballeror\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lerebear\"\u003e\u003ccode\u003e@​lerebear\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/samuelcolvin\"\u003e\u003ccode\u003e@​samuelcolvin\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/baltasarblanco\"\u003e\u003ccode\u003e@​baltasarblanco\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aconal-com\"\u003e\u003ccode\u003e@​aconal-com\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JelleZijlstra\"\u003e\u003ccode\u003e@​JelleZijlstra\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\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\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.14\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003eairflow-task-implicit-multiple-outputs\u003c/code\u003e (\u003ccode\u003eAIR202\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25152\"\u003e#25152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-use-pathlib\u003c/code\u003e] Mark \u003ccode\u003ePTH101\u003c/code\u003e fix as unsafe when first argument is a class attribute annotated as \u003ccode\u003eint\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25086\"\u003e#25086\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Implement \u003ccode\u003etoo-many-try-statements\u003c/code\u003e (\u003ccode\u003eW0717\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23970\"\u003e#23970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003eincorrect-decorator-order\u003c/code\u003e (\u003ccode\u003eRUF074\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23461\"\u003e#23461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003efallible-context-manager\u003c/code\u003e (\u003ccode\u003eRUF075\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22844\"\u003e#22844\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix lambda formatting in interpolated string expressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25144\"\u003e#25144\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTreat generic \u003ccode\u003efrozenset\u003c/code\u003e annotations as immutable (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25251\"\u003e#25251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-type-checking\u003c/code\u003e] Avoid \u003ccode\u003estrict\u003c/code\u003e behavior when \u003ccode\u003efuture-annotations\u003c/code\u003e are enabled (\u003ccode\u003eTC001\u003c/code\u003e, \u003ccode\u003eTC002\u003c/code\u003e, \u003ccode\u003eTC003\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25035\"\u003e#25035\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Avoid false positives in \u003ccode\u003eelse\u003c/code\u003e clause (\u003ccode\u003ePLR1733\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25177\"\u003e#25177\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-comprehensions\u003c/code\u003e] Skip \u003ccode\u003eC417\u003c/code\u003e for lambdas with positional-only parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25272\"\u003e#25272\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-simplify\u003c/code\u003e] Preserve f-string source verbatim in \u003ccode\u003eSIM101\u003c/code\u003e fix (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25061\"\u003e#25061\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid unnecessary parser lookahead for operators (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25290\"\u003e#25290\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate code example setting Neovim LSP log level (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25284\"\u003e#25284\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd full PEP 798 support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25104\"\u003e#25104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a parser recursion limit (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24810\"\u003e#24810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate various \u003ccode\u003eruff_python_stdlib\u003c/code\u003e APIs (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25273\"\u003e#25273\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/ocaballeror\"\u003e\u003ccode\u003e@​ocaballeror\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lerebear\"\u003e\u003ccode\u003e@​lerebear\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/samuelcolvin\"\u003e\u003ccode\u003e@​samuelcolvin\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/baltasarblanco\"\u003e\u003ccode\u003e@​baltasarblanco\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aconal-com\"\u003e\u003ccode\u003e@​aconal-com\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/JelleZijlstra\"\u003e\u003ccode\u003e@​JelleZijlstra\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\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/adityasingh2400\"\u003e\u003ccode\u003e@​adityasingh2400\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/9ad2da3015e5faf73bdc5f1d09df3e47238e3edf\"\u003e\u003ccode\u003e9ad2da3\u003c/code\u003e\u003c/a\u003e Bump 0.15.14 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25295\"\u003e#25295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c714e84952510696c05ec21b0158a3548898f594\"\u003e\u003ccode\u003ec714e84\u003c/code\u003e\u003c/a\u003e [ty] Modernize setup of union types in mdtests (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25291\"\u003e#25291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/8a8e35ebfe318e2467a0f276e5d1a3a9032a55ad\"\u003e\u003ccode\u003e8a8e35e\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Skip \u003ccode\u003eC417\u003c/code\u003e for lambdas with positional-only parame...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/aea5ed4d278017057c2e842c6c3a2e92ad71495f\"\u003e\u003ccode\u003eaea5ed4\u003c/code\u003e\u003c/a\u003e Avoid unnecessary parser lookahead for operators (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25290\"\u003e#25290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e9d72bb420f26c23e6660bfce4dfa0028b931bff\"\u003e\u003ccode\u003ee9d72bb\u003c/code\u003e\u003c/a\u003e [ty] Allow enum member accesses on \u003ccode\u003eself\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25077\"\u003e#25077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6cbd59b511a92d5f408db57bde33367c0d47b672\"\u003e\u003ccode\u003e6cbd59b\u003c/code\u003e\u003c/a\u003e Set \u003ccode\u003eexclude-newer = \u0026quot;7 days\u0026quot;\u003c/code\u003e in our PEP-723 scripts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25285\"\u003e#25285\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/9999a3967ae28fe3295131e8883b6947f272a076\"\u003e\u003ccode\u003e9999a39\u003c/code\u003e\u003c/a\u003e Update code example on how to update Neovim LSP log level (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25284\"\u003e#25284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/67d8c544f0d1c526a2fc60d4bb1358fd7956d178\"\u003e\u003ccode\u003e67d8c54\u003c/code\u003e\u003c/a\u003e [ty] Retain recursively-defined state in binary expressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25277\"\u003e#25277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/25a3191140dc0467f9d196f35c128fefde269261\"\u003e\u003ccode\u003e25a3191\u003c/code\u003e\u003c/a\u003e [ty] Refine Callable class-decorator fallback for unknown results (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25250\"\u003e#25250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c423054dc09e5b644c926b6b527b6accfbe693e9\"\u003e\u003ccode\u003ec423054\u003c/code\u003e\u003c/a\u003e Add a recursion limit to the parser (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24810\"\u003e#24810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.11...0.15.14\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `authlib` from 1.7.0 to 1.7.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/authlib/authlib/releases\"\u003eauthlib's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.7.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix the readme links by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/authlib/authlib/pull/886\"\u003eauthlib/authlib#886\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow non-recommended algorithms in ClientSecretJWT and PrivateKey by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/authlib/authlib/pull/887\"\u003eauthlib/authlib#887\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate BCP47 language tags with a regex by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/authlib/authlib/pull/873\"\u003eauthlib/authlib#873\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RFC7523 signing with non RSA keys by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/authlib/authlib/pull/884\"\u003eauthlib/authlib#884\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/authlib/authlib/compare/v1.7.1...v1.7.2\"\u003ehttps://github.com/authlib/authlib/compare/v1.7.1...v1.7.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.7.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix authlib.jose deprecation warning poping from _joserfc_helpers by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/authlib/authlib/pull/881\"\u003eauthlib/authlib#881\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix redirecting to unvalidated \u003ccode\u003eredirect_uri\u003c/code\u003e on \u003ccode\u003eInvalidScopeError\u003c/code\u003e  in \u003ccode\u003eOpenIDImplicitGrant\u003c/code\u003e and \u003ccode\u003eOpenIDHybridGrant\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/authlib/authlib/compare/v1.7.0...v1.7.1\"\u003ehttps://github.com/authlib/authlib/compare/v1.7.0...v1.7.1\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/authlib/authlib/commit/a0b76fac3fa114d7759af2010546bfc332364b63\"\u003e\u003ccode\u003ea0b76fa\u003c/code\u003e\u003c/a\u003e chore: bump to 1.7.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/c85c7f2b02faf2667f62b27aa60df042dbc9b4ab\"\u003e\u003ccode\u003ec85c7f2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/authlib/authlib/issues/884\"\u003e#884\u003c/a\u003e from azmeuk/852-rfc7523-key-import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/a3b2adda43b4452ba9f384d224f95848974b4eb4\"\u003e\u003ccode\u003ea3b2add\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/authlib/authlib/issues/873\"\u003e#873\u003c/a\u003e from azmeuk/bcp47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/f2578eaa198aedbaaaf3bb00eccc451e15e45e3a\"\u003e\u003ccode\u003ef2578ea\u003c/code\u003e\u003c/a\u003e fix: Import RSAKey in auth.py for additional key support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/b57182cf46a53da19623208dd852270ddec8ebcc\"\u003e\u003ccode\u003eb57182c\u003c/code\u003e\u003c/a\u003e fix: fallback support RSAKey when client_secret is text\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/4e7590292ca9f948a0766640b27025618750e6c1\"\u003e\u003ccode\u003e4e75902\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into 852-rfc7523-key-import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/5eb4a860600ea2f3acc1a2a9c3e621a430da9d0f\"\u003e\u003ccode\u003e5eb4a86\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/authlib/authlib/issues/887\"\u003e#887\u003c/a\u003e from azmeuk/883-alg\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/5633f37c47bd8352b962f982cb916bc8b95bb5d5\"\u003e\u003ccode\u003e5633f37\u003c/code\u003e\u003c/a\u003e fix: allow non-recommended algorithms in ClientSecretJWT and PrivateKeyJWT\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/4c8e7b381aaef68f60e2323a25ba96cdb346f82f\"\u003e\u003ccode\u003e4c8e7b3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/authlib/authlib/issues/886\"\u003e#886\u003c/a\u003e from azmeuk/885-readme\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/authlib/commit/23b333e48a17ebf9f032a0e0f9eb3f990a06f97b\"\u003e\u003ccode\u003e23b333e\u003c/code\u003e\u003c/a\u003e docs: fix the readme links\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/authlib/authlib/compare/v1.7.0...v1.7.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-auth` from 2.47.0 to 2.53.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-auth-library-python/releases\"\u003egoogle-auth's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.49.0.dev0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.48.0...v2.49.0-dev0\"\u003e2.49.0-dev0\u003c/a\u003e (2026-01-26)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eremove deprecated rsa dependency (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e98cf69284d3620619a70b54fb0b9533caf11878\"\u003ee98cf69284d3620619a70b54fb0b9533caf11878\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003egoogle-auth 2.48.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.47.0...v2.48.0\"\u003e2.48.0\u003c/a\u003e (2026-01-21)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ehonor \u003ccode\u003eNO_GCE_CHECK\u003c/code\u003e environment variable (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1610\"\u003e#1610\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/383c9827\"\u003e383c9827\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd configurable GCE Metadata Server retries (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1488\"\u003e#1488\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/454b441b\"\u003e454b441b\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eadd cryptography as required dependency (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1929\"\u003e#1929\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/52558ae2\"\u003e52558ae2\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport the mTLS IAM domain for Certificate based Access (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1938\"\u003e#1938\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/8dcf91a1\"\u003e8dcf91a1\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eresolve circular imports (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1942\"\u003e#1942\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/25c1b064\"\u003e25c1b064\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse \u003ccode\u003euser_verification=preferred\u003c/code\u003e for ReAuth WebAuthn challenge (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1798\"\u003e#1798\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/3f88a240\"\u003e3f88a240\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eremoves \u003ccode\u003econtent-header\u003c/code\u003e from AWS IMDS get request (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1934\"\u003e#1934\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/97bfea9e\"\u003e97bfea9e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003edetect correct auth when ADC env var is set but empty (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1374\"\u003e#1374\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/bfc07e10\"\u003ebfc07e10\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003ereplace deprecated utcfromtimestamp (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1799\"\u003e#1799\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e431f20c\"\u003ee431f20c\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.48.0rc0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.47.0...v2.48.0rc0\"\u003e2.48.0rc0\u003c/a\u003e (2026-01-20)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ehonor NO_GCE_CHECK environment variable (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1610\"\u003e#1610\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/383c9827536d9376e8248370ce4c2b83e468d027\"\u003e383c98\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd configurable GCE Metadata Server retries (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1488\"\u003e#1488\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/454b441b478ec62bbf1a6ad5bceb6c7cbbfd0c37\"\u003e454b44\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esupport mTLS IAM domain for Certificate based Access (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1938\"\u003e#1938\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/8dcf91a1b05c85fbbd0bcee78d66e498099102ab\"\u003e8dcf91\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd cryptography as required dependency (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1929\"\u003e#1929\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/52558ae2881b1e6555f6f5c0d76365c15807ead9\"\u003e52558a\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse user_verification=preferred for ReAuth WebAuthn challenge (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1798\"\u003e#1798\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/3f88a24089c4ee6822d510de0db210b54260d873\"\u003e3f88a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace deprecated utcfromtimestamp (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1799\"\u003e#1799\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e431f20cf73ccac71926a23ec454468cea92e053\"\u003ee431f2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edetect correct auth when ADC env var is set by empty (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1374\"\u003e#1374\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/bfc07e1050bd0aa86fa3b08cdf70c9b68b5fe6a2\"\u003ebfc07e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremoved content-header from AWS IMDS (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1934\"\u003e#1934\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/97bfea9e02ede953fc8ee154e0deed3a3cfc6dcc\"\u003e97bfea\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/googleapis/google-auth-library-python/blob/main/CHANGELOG.md\"\u003egoogle-auth's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"https://pypi.org/project/google-auth/#history\"\u003ePyPI History\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-auth-library-python/compare/v2.47.0...v2.48.0\"\u003e2.48.0\u003c/a\u003e (2026-01-22)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eadd cryptography as required dependency (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1929\"\u003e#1929\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/52558ae2881b1e6555f6f5c0d76365c15807ead9\"\u003e52558ae2881b1e6555f6f5c0d76365c15807ead9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport the mTLS IAM domain for Certificate based Access (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1938\"\u003e#1938\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/8dcf91a1b05c85fbbd0bcee78d66e498099102ab\"\u003e8dcf91a1b05c85fbbd0bcee78d66e498099102ab\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eadd configurable GCE Metadata Server retries (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1488\"\u003e#1488\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/454b441b478ec62bbf1a6ad5bceb6c7cbbfd0c37\"\u003e454b441b478ec62bbf1a6ad5bceb6c7cbbfd0c37\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ehonor \u003ccode\u003eNO_GCE_CHECK\u003c/code\u003e environment variable (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1610\"\u003e#1610\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/383c9827536d9376e8248370ce4c2b83e468d027\"\u003e383c9827536d9376e8248370ce4c2b83e468d027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eresolve circular imports (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1942\"\u003e#1942\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/25c1b064545702cbef087cfcd15fbbb6ef1af74f\"\u003e25c1b064545702cbef087cfcd15fbbb6ef1af74f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eremoves \u003ccode\u003econtent-header\u003c/code\u003e from AWS IMDS get request (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1934\"\u003e#1934\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/97bfea9e02ede953fc8ee154e0deed3a3cfc6dcc\"\u003e97bfea9e02ede953fc8ee154e0deed3a3cfc6dcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edetect correct auth when ADC env var is set but empty (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1374\"\u003e#1374\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/bfc07e1050bd0aa86fa3b08cdf70c9b68b5fe6a2\"\u003ebfc07e1050bd0aa86fa3b08cdf70c9b68b5fe6a2\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ereplace deprecated utcfromtimestamp (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1799\"\u003e#1799\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/e431f20cf73ccac71926a23ec454468cea92e053\"\u003ee431f20cf73ccac71926a23ec454468cea92e053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003euser_verification=preferred\u003c/code\u003e for ReAuth WebAuthn challenge (\u003ca href=\"https://redirect.github.com/googleapis/google-auth-library-python/issues/1798\"\u003e#1798\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-auth-library-python/commit/3f88a24089c4ee6822d510de0db210b54260d873\"\u003e3f88a24089c4ee6822d510de0db210b54260d873\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\u003eSee full diff in \u003ca href=\"https://github.com/googleapis/google-auth-library-python/commits\"\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 `typing-extensions` from 4.14.1 to 4.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003cp\u003eNew features since 4.14.1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.15.0 (August 25, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003ch1\u003eRelease 4.15.0rc1 (August 18, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/typing_extensions/commit/9d1637e264b5c1a6b7acee3e907015f89b20c2c9\"\u003e\u003ccode\u003e9d1637e\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4bd67c5be5d9443c7d33c314d02a56ee125eb88d\"\u003e\u003ccode\u003e4bd67c5\u003c/code\u003e\u003c/a\u003e Coverage: exclude some noise (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e589a26da73b075c5276bae40b86db1af0144f84\"\u003e\u003ccode\u003ee589a26\u003c/code\u003e\u003c/a\u003e Coverage: add detailed report to job summary (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/67d37fed1298e050f74d5acc95b2621bd37837ad\"\u003e\u003ccode\u003e67d37fe\u003c/code\u003e\u003c/a\u003e Coverage: Implement fail_under (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e9ae26f5286edee9262727755ecb9ad16e999192\"\u003e\u003ccode\u003ee9ae26f\u003c/code\u003e\u003c/a\u003e Don't delete previous coverage comment (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/ac80bb728a3006fc88ef7373b92f0c25cfcc7895\"\u003e\u003ccode\u003eac80bb7\u003c/code\u003e\u003c/a\u003e Add Coverage workflow (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/623\"\u003e#623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/abaaafd98c1cc7e5baf098ec287a3d22cb339670\"\u003e\u003ccode\u003eabaaafd\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/98104053ea8d49bcdd247804e5fa9f73136acbd4\"\u003e\u003ccode\u003e9810405\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e@disjoint_base\u003c/code\u003e (PEP 800) (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/634\"\u003e#634\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/7ee9e05fd484d06899ce56e80f5e1aa4c760fc03\"\u003e\u003ccode\u003e7ee9e05\u003c/code\u003e\u003c/a\u003e Backport type_params fix from CPython (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/1e8eb9c06ef51b3a1e1f05303a16feca13f5ed98\"\u003e\u003ccode\u003e1e8eb9c\u003c/code\u003e\u003c/a\u003e Do not refer to PEP 705 as being experimental (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.14.1...4.15.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.10.0 to 4.13.0\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.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003ettl\u003c/code\u003e parameter to the \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e wrapper (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1073\"\u003e#1073\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWidened the type annotations of file I/O streams to accept \u003ccode\u003eIO[bytes]\u003c/code\u003e instead of just \u003ccode\u003eBinaryIO\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.Path\u003c/code\u003e not being compatible with Python 3.15 due to the removal of \u003ccode\u003epathlib.Path.is_reserved()\u003c/code\u003e and the addition of \u003ccode\u003epathlib.Path.__vfspath__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1061\"\u003e#1061\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eBrokenResourceError\u003c/code\u003e raised by the asyncio \u003ccode\u003eSocketStream\u003c/code\u003e not having the original exception as its cause (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1055\"\u003e#1055\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eTypeError\u003c/code\u003e raised when using \u0026quot;func\u0026quot; as a parameter name in \u003ccode\u003epytest.mark.parametrize\u003c/code\u003e when using the pytest plugin (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1068\"\u003e#1068\u003c/a\u003e; PR by \u003ca href=\"https://github.com/JohnnyDeuss\"\u003e\u003ccode\u003e@​JohnnyDeuss\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the pytest plugin not running tests that had the \u003ccode\u003eanyio\u003c/code\u003e marker added programmatically via \u003ccode\u003epytest_collection_modifyitems\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/422\"\u003e#422\u003c/a\u003e; PR by \u003ca href=\"https://github.com/chbndrhnns\"\u003e\u003ccode\u003e@​chbndrhnns\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when they are contained in an exception group alongside non-cancellation exceptions (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1091\"\u003e#1091\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCondition.wait()\u003c/code\u003e not passing on a notification when the task is cancelled but already received a notification\u003c/li\u003e\n\u003cli\u003eFixed inverted condition in the process pool shutdown phase which would cause still-running pooled processes not to be terminated (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1074\"\u003e#1074\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged all functions currently raising the private \u003ccode\u003eNoCurrentAsyncBackend\u003c/code\u003e exception (since v4.12.0) to instead raise the public \u003ccode\u003eNoEventLoopError\u003c/code\u003e exception (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1048\"\u003e#1048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e not working with instance methods (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1042\"\u003e#1042\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for asyncio's \u003ca href=\"https://docs.python.org/3/library/asyncio-graph.html\"\u003etask call graphs\u003c/a\u003e on Python 3.14 and later when using AnyIO's task groups (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1025\"\u003e#1025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded an asynchronous implementation of the \u003ccode\u003efunctools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1001\"\u003e#1001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003euvloop=True\u003c/code\u003e on Windows via the \u003ca href=\"https://github.com/Vizonex/Winloop\"\u003ewinloop\u003c/a\u003e implementation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/960\"\u003e#960\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for use as a context manager to \u003ccode\u003eanyio.lowlevel.RunVar\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1003\"\u003e#1003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003e__all__\u003c/code\u003e declarations to public submodules (\u003ccode\u003eanyio.lowlevel\u003c/code\u003e etc.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1009\"\u003e#1009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the ability to set the token count of a \u003ccode\u003eCapacityLimiter\u003c/code\u003e to zero (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1019\"\u003e#1019\u003c/a\u003e; requires Python 3.10 or later when using Trio)\u003c/li\u003e\n\u003cli\u003eAdded parameters \u003ccode\u003ecase_sensitive\u003c/code\u003e and \u003ccode\u003erecurse_symlinks\u003c/code\u003e along with support for path-like objects to \u003ccode\u003eanyio.Path.glob()\u003c/code\u003e and \u003ccode\u003eanyio.Path.rglob()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1033\"\u003e#1033\u003c/a\u003e; PR by \u003ca href=\"https://github.com/northisup\"\u003e\u003ccode\u003e@​northisup\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped \u003ccode\u003esniffio\u003c/code\u003e as a direct dependency and added the \u003ccode\u003eget_available_backends()\u003c/code\u003e function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1021\"\u003e#1021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not raising \u003ccode\u003eClosedResourceError\u003c/code\u003e and \u003ccode\u003eBrokenResourceError\u003c/code\u003e on asyncio. Previously, a non-AnyIO exception was raised in such cases (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not checkpointing before writing data on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1002\"\u003e#1002\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a race condition where cancelling a \u003ccode\u003eFuture\u003c/code\u003e from \u003ccode\u003eBlockingPortal.start_task_soon()\u003c/code\u003e would sometimes not cancel the async function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1011\"\u003e#1011\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the presence of the pytest plugin causing breakage with older versions of pytest (\u0026lt;= 6.1.2) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1028\"\u003e#1028\u003c/a\u003e; PR by \u003ca href=\"https://github.com/saper\"\u003e\u003ccode\u003e@​saper\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a rarely occurring \u003ccode\u003eRuntimeError: Set changed size during iteration\u003c/code\u003e while shutting down the process pool when using the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/985\"\u003e#985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for cancellation reasons (the \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003eCancelScope.cancel()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum version of Trio to v0.31.0\u003c/li\u003e\n\u003cli\u003eAdded the ability to enter the event loop from foreign (non-worker) threads by passing the return value of \u003ccode\u003eanyio.lowlevel.current_token()\u003c/code\u003e to \u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e and \u003ccode\u003eanyio.from_thread.run_sync()\u003c/code\u003e as the \u003ccode\u003etoken\u003c/code\u003e keyword argument (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded pytest option (\u003ccode\u003eanyio_mode = \u0026quot;auto\u0026quot;\u003c/code\u003e) to make the pytest plugin automatically handle all async tests (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the \u003ccode\u003eanyio.Condition.wait_for()\u003c/code\u003e method for feature parity with asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the default type argument of \u003ccode\u003eanyio.abc.TaskStatus\u003c/code\u003e from \u003ccode\u003eAny\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/964\"\u003e#964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed TCP listener behavior to guarantee the same ephemeral port is used for all socket listeners when \u003ccode\u003elocal_port=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/857\"\u003e#857\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed inconsistency between Trio and asyncio where a TCP stream that previously raised a \u003ccode\u003eBrokenResourceError\u003c/code\u003e on \u003ccode\u003esend()\u003c/code\u003e would still raise \u003ccode\u003eBrokenResourceError\u003c/code\u003e after the stream was closed on asyncio, but \u003ccode\u003eClosedResourceError\u003c/code\u003e on Trio. They now both raise a \u003ccode\u003eClosedResourceError\u003c/code\u003e in this scenario. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\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/afbe93ca9d0c447adf26e9c1715ac20870622bf2\"\u003e\u003ccode\u003eafbe93c\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/33bdf2e4b4f40c2df178123746147a6d2471808d\"\u003e\u003ccode\u003e33bdf2e\u003c/code\u003e\u003c/a\u003e Rearranged the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/19e09e25bc5a23dd78a577d8c3909dd377057c78\"\u003e\u003ccode\u003e19e09e2\u003c/code\u003e\u003c/a\u003e Fixed inverted condition in _forcibly_shutdown_process_pool_on_exit (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9369d80b9e8292f2a892a9d5c73923c6a28aa08c\"\u003e\u003ccode\u003e9369d80\u003c/code\u003e\u003c/a\u003e Fixed Condition.wait() not handing over notification when cancelled\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f122abdc6f6b166c6b6ac27d36d55cdf8fa08e8\"\u003e\u003ccode\u003e6f122ab\u003c/code\u003e\u003c/a\u003e Fixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/beaa45aff568a4020f2faf317321dd92f0e1f4a0\"\u003e\u003ccode\u003ebeaa45a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1097\"\u003e#1097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/602f6606dcf3f37702686a4f3e161328c537b07f\"\u003e\u003ccode\u003e602f660\u003c/code\u003e\u003c/a\u003e Widened type annotations to accept IO[bytes] in file streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b5dcd45170701a756ba634197398f05d4710cab3\"\u003e\u003ccode\u003eb5dcd45\u003c/code\u003e\u003c/a\u003e Added note about erasing the template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d68670b3b4e0917d4caff2de082e03220f3e05a1\"\u003e\u003ccode\u003ed68670b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/fc17a22dd948e6a3d90d99908813f0010dfc3d2c\"\u003e\u003ccode\u003efc17a22\u003c/code\u003e\u003c/a\u003e tweak to_thread docs about abandon_on_cancel (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1088\"\u003e#1088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.10.0...4.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typer` from 0.16.0 to 0.25.1\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.25.1\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Add Typer Library Skill for Agents. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1620\"\u003e#1620\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 ruff from 0.15.11 to 0.15.12. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1722\"\u003e#1722\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 prek from 0.3.10 to 0.3.11. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1723\"\u003e#1723\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\u003ch2\u003e0.25.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Don't truncate code lines in traceback when formatted with Rich. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1695\"\u003e#1695\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\u003ch2\u003e0.24.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Ensure that \u003ccode\u003etyper.launch\u003c/code\u003e forwards correctly when launching a file. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1708\"\u003e#1708\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\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🎨 Ensure \u003ccode\u003ety\u003c/code\u003e runs without errors. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1628\"\u003e#1628\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\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Add dates to release notes. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1612\"\u003e#1612\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 code blocks in reference docs overflowing table width. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1630\"\u003e#1630\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 broken link to FastAPI and Friends newsletter. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1540\"\u003e#1540\u003c/a\u003e by \u003ca href=\"https://github.com/Karlemami\"\u003e\u003ccode\u003e@​Karlemami\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔨 Handle external links \u003ccode\u003etarget=_blank\u003c/code\u003e and CSS automatically in JS and CSS. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1622\"\u003e#1622\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📝 Remove link to Typer developer survey. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1609\"\u003e#1609\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✏️ Clean up documentation in \u003ccode\u003einstall.md\u003c/code\u003e file. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1606\"\u003e#1606\u003c/a\u003e by \u003ca href=\"https://github.com/Johandielangman\"\u003e\u003ccode\u003e@​Johandielangman\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 mypy from 1.20.1 to 1.20.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1715\"\u003e#1715\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 prek from 0.3.9 to 0.3.10. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1716\"\u003e#1716\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.13.1 to 2.14.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1713\"\u003e#1713\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 from 0.0.31 to 0.0.32. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1711\"\u003e#1711\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 from 2.13.2 to 2.13.3. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1712\"\u003e#1712\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 pygments from 2.19.2 to 2.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1667\"\u003e#1667\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 pymdown-extensions from 10.20 to 10.21.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1710\"\u003e#1710\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 actions/cache from 5.0.4 to 5.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1700\"\u003e#1700\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 from 2.13.1 to 2.13.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1703\"\u003e#1703\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 actions/upload-artifact from 7.0.0 to 7.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1701\"\u003e#1701\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 ruff from 0.15.10 to 0.15.11. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1704\"\u003e#1704\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 cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1702\"\u003e#1702\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 astral-sh/setup-uv from 7.6.0 to 8.1.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1699\"\u003e#1699\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 from 0.0.30 to 0.0.31. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1696\"\u003e#1696\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 from 2.13.0 to 2.13.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1697\"\u003e#1697\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!-- 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/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.25.1 (2026-04-30)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔧 Add Typer Library Skill for Agents. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1620\"\u003e#1620\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 ruff from 0.15.11 to 0.15.12. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1722\"\u003e#1722\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 prek from 0.3.10 to 0.3.11. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1723\"\u003e#1723\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\u003ch2\u003e0.25.0 (2026-04-26)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Don't truncate code lines in traceback when formatted with Rich. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1695\"\u003e#1695\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\u003ch2\u003e0.24.2 (2026-04-22)\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Ensure that \u003ccode\u003etyper.launch\u003c/code\u003e forwards correctly when launching a file. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1708\"\u003e#1708\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\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🎨 Ensure \u003ccode\u003ety\u003c/code\u003e runs without errors. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1628\"\u003e#1628\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\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Add dates to release notes. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1612\"\u003e#1612\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 code blocks in reference docs overflowing table width. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1630\"\u003e#1630\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 broken link to FastAPI and Friends newsletter. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1540\"\u003e#1540\u003c/a\u003e by \u003ca href=\"https://github.com/Karlemami\"\u003e\u003ccode\u003e@​Karlemami\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔨 Handle external links \u003ccode\u003etarget=_blank\u003c/code\u003e and CSS automatically in JS and CSS. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1622\"\u003e#1622\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📝 Remove link to Typer developer survey. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1609\"\u003e#1609\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e✏️ Clean up documentation in \u003ccode\u003einstall.md\u003c/code\u003e file. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1606\"\u003e#1606\u003c/a\u003e by \u003ca href=\"https://github.com/Johandielangman\"\u003e\u003ccode\u003e@​Johandielangman\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 mypy from 1.20.1 to 1.20.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1715\"\u003e#1715\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 prek from 0.3.9 to 0.3.10. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1716\"\u003e#1716\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.13.1 to 2.14.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1713\"\u003e#1713\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 from 0.0.31 to 0.0.32. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1711\"\u003e#1711\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 from 2.13.2 to 2.13.3. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1712\"\u003e#1712\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 pygments from 2.19.2 to 2.20.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1667\"\u003e#1667\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 pymdown-extensions from 10.20 to 10.21.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1710\"\u003e#1710\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 actions/cache from 5.0.4 to 5.0.5. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1700\"\u003e#1700\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 from 2.13.1 to 2.13.2. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1703\"\u003e#1703\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 actions/upload-artifact from 7.0.0 to 7.0.1. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1701\"\u003e#1701\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 ruff from 0.15.10 to 0.15.11. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1704\"\u003e#1704\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 cloudflare/wrangler-action from 3.14.1 to 3.15.0. PR \u003ca href=\"https://redirect.github.com/fastapi/typer/pull/1702\"\u003e#1702\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!-- 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/fastapi/typer/commit/cfcc2ef9f948bcce67897a6c7e689d39da690bf9\"\u003e\u003ccode\u003ecfcc2ef\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.25.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/13846cc59bd574567a9a1f56eae3cd42b9aa2a4f\"\u003e\u003ccode\u003e13846cc\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/a43746997ad6f2b4a8829c69c919f4d4c2cc0698\"\u003e\u003ccode\u003ea437469\u003c/code\u003e\u003c/a\u003e 🔧 Add Typer Library Skill for Agents (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1620\"\u003e#1620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/ba6cc2c9e7cba35f891c91118e228e1d2da35edb\"\u003e\u003ccode\u003eba6cc2c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/0f3ead07c2bb384fdd590e895ca6705582c58d89\"\u003e\u003ccode\u003e0f3ead0\u003c/code\u003e\u003c/a\u003e ⬆ Bump ruff from 0.15.11 to 0.15.12 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1722\"\u003e#1722\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/db4ade64936599b3460f2fc0a7c550c3fedc33b0\"\u003e\u003ccode\u003edb4ade6\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/5a5206ceed2afdf234f88a6e2ef74ad9ebdf0d92\"\u003e\u003ccode\u003e5a5206c\u003c/code\u003e\u003c/a\u003e ⬆ Bump prek from 0.3.10 to 0.3.11 (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1723\"\u003e#1723\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/959845e173b4bec0d606d99247815c2710613ca8\"\u003e\u003ccode\u003e959845e\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.25.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/5e1fcfb5935e7ac3ff3c7526ef297eae31bd4822\"\u003e\u003ccode\u003e5e1fcfb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/typer/commit/dfb21ad034804584702d553ebfba40d8f4d791b9\"\u003e\u003ccode\u003edfb21ad\u003c/code\u003e\u003c/a\u003e 🚸 Don't truncate code lines in traceback when formatted with Rich (\u003ca href=\"https://redirect.github.com/fastapi/typer/issues/1695\"\u003e#1695\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/typer/compare/0.16.0...0.25.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.35.0 to 0.48.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.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#...\n\n_Description has been truncated_","html_url":"https://github.com/tmohanvamsi/kagent/pull/38","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tmohanvamsi%2Fkagent/issues/38","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/38/packages"}},{"old_version":"4.14.1","new_version":"4.15.0","update_type":"minor","path":null,"pr_created_at":"2026-05-17T05:30:04.000Z","version_change":"4.14.1 → 4.15.0","issue":{"uuid":"4462408388","node_id":"PR_kwDOPa2xds7cUyEh","number":136,"state":"closed","title":"chore(deps): bump the minor-patch group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-17T05:36:11.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-17T05:30:04.000Z","updated_at":"2026-05-17T05:36:13.000Z","time_to_close":367,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"minor-patch","update_count":16,"packages":[{"name":"anyio","old_version":"4.9.0","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"click","old_version":"8.1.8","new_version":"8.4.0","repository_url":"https://github.com/pallets/click"},{"name":"idna","old_version":"3.10","new_version":"3.15","repository_url":"https://github.com/kjd/idna"},{"name":"pydantic-settings","old_version":"2.8.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"typing-extensions","old_version":"4.14.1","new_version":"4.15.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"uvicorn","old_version":"0.45.0","new_version":"0.47.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"psycopg2-binary","old_version":"2.9.10","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.28","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"webauthn","old_version":"2.5.2","new_version":"2.7.1","repository_url":"https://github.com/duo-labs/py_webauthn"},{"name":"google-auth","old_version":"2.45.0","new_version":"2.53.0","repository_url":"https://github.com/googleapis/google-auth-library-python"},{"name":"requests","old_version":"2.33.0","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"beautifulsoup4","old_version":"4.12.3","new_version":"4.14.3"},{"name":"boto3","old_version":"1.42.91","new_version":"1.43.9","repository_url":"https://github.com/boto/boto3"},{"name":"boto3-stubs","old_version":"1.42.91","new_version":"1.43.9","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"moto","old_version":"5.1.22","new_version":"5.2.1","repository_url":"https://github.com/getmoto/moto"},{"name":"black","old_version":"26.3.1","new_version":"26.5.0","repository_url":"https://github.com/psf/black"}],"path":null,"ecosystem":"pip"},"body":"Bumps the minor-patch group with 16 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.9.0` | `4.13.0` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.4.0` |\n| [idna](https://github.com/kjd/idna) | `3.10` | `3.15` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.8.1` | `2.14.1` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.14.1` | `4.15.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.45.0` | `0.47.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.10` | `2.9.12` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.28` |\n| [webauthn](https://github.com/duo-labs/py_webauthn) | `2.5.2` | `2.7.1` |\n| [google-auth](https://github.com/googleapis/google-auth-library-python) | `2.45.0` | `2.53.0` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.2` |\n| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.12.3` | `4.14.3` |\n| [boto3](https://github.com/boto/boto3) | `1.42.91` | `1.43.9` |\n| [boto3-stubs](https://github.com/youtype/mypy_boto3_builder) | `1.42.91` | `1.43.9` |\n| [moto](https://github.com/getmoto/moto) | `5.1.22` | `5.2.1` |\n| [black](https://github.com/psf/black) | `26.3.1` | `26.5.0` |\n\n\nUpdates `anyio` from 4.9.0 to 4.13.0\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.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003ettl\u003c/code\u003e parameter to the \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e wrapper (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1073\"\u003e#1073\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWidened the type annotations of file I/O streams to accept \u003ccode\u003eIO[bytes]\u003c/code\u003e instead of just \u003ccode\u003eBinaryIO\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.Path\u003c/code\u003e not being compatible with Python 3.15 due to the removal of \u003ccode\u003epathlib.Path.is_reserved()\u003c/code\u003e and the addition of \u003ccode\u003epathlib.Path.__vfspath__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1061\"\u003e#1061\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eBrokenResourceError\u003c/code\u003e raised by the asyncio \u003ccode\u003eSocketStream\u003c/code\u003e not having the original exception as its cause (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1055\"\u003e#1055\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eTypeError\u003c/code\u003e raised when using \u0026quot;func\u0026quot; as a parameter name in \u003ccode\u003epytest.mark.parametrize\u003c/code\u003e when using the pytest plugin (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1068\"\u003e#1068\u003c/a\u003e; PR by \u003ca href=\"https://github.com/JohnnyDeuss\"\u003e\u003ccode\u003e@​JohnnyDeuss\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the pytest plugin not running tests that had the \u003ccode\u003eanyio\u003c/code\u003e marker added programmatically via \u003ccode\u003epytest_collection_modifyitems\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/422\"\u003e#422\u003c/a\u003e; PR by \u003ca href=\"https://github.com/chbndrhnns\"\u003e\u003ccode\u003e@​chbndrhnns\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when they are contained in an exception group alongside non-cancellation exceptions (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1091\"\u003e#1091\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCondition.wait()\u003c/code\u003e not passing on a notification when the task is cancelled but already received a notification\u003c/li\u003e\n\u003cli\u003eFixed inverted condition in the process pool shutdown phase which would cause still-running pooled processes not to be terminated (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1074\"\u003e#1074\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged all functions currently raising the private \u003ccode\u003eNoCurrentAsyncBackend\u003c/code\u003e exception (since v4.12.0) to instead raise the public \u003ccode\u003eNoEventLoopError\u003c/code\u003e exception (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1048\"\u003e#1048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e not working with instance methods (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1042\"\u003e#1042\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for asyncio's \u003ca href=\"https://docs.python.org/3/library/asyncio-graph.html\"\u003etask call graphs\u003c/a\u003e on Python 3.14 and later when using AnyIO's task groups (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1025\"\u003e#1025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded an asynchronous implementation of the \u003ccode\u003efunctools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1001\"\u003e#1001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003euvloop=True\u003c/code\u003e on Windows via the \u003ca href=\"https://github.com/Vizonex/Winloop\"\u003ewinloop\u003c/a\u003e implementation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/960\"\u003e#960\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for use as a context manager to \u003ccode\u003eanyio.lowlevel.RunVar\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1003\"\u003e#1003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003e__all__\u003c/code\u003e declarations to public submodules (\u003ccode\u003eanyio.lowlevel\u003c/code\u003e etc.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1009\"\u003e#1009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the ability to set the token count of a \u003ccode\u003eCapacityLimiter\u003c/code\u003e to zero (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1019\"\u003e#1019\u003c/a\u003e; requires Python 3.10 or later when using Trio)\u003c/li\u003e\n\u003cli\u003eAdded parameters \u003ccode\u003ecase_sensitive\u003c/code\u003e and \u003ccode\u003erecurse_symlinks\u003c/code\u003e along with support for path-like objects to \u003ccode\u003eanyio.Path.glob()\u003c/code\u003e and \u003ccode\u003eanyio.Path.rglob()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1033\"\u003e#1033\u003c/a\u003e; PR by \u003ca href=\"https://github.com/northisup\"\u003e\u003ccode\u003e@​northisup\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped \u003ccode\u003esniffio\u003c/code\u003e as a direct dependency and added the \u003ccode\u003eget_available_backends()\u003c/code\u003e function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1021\"\u003e#1021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not raising \u003ccode\u003eClosedResourceError\u003c/code\u003e and \u003ccode\u003eBrokenResourceError\u003c/code\u003e on asyncio. Previously, a non-AnyIO exception was raised in such cases (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not checkpointing before writing data on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1002\"\u003e#1002\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a race condition where cancelling a \u003ccode\u003eFuture\u003c/code\u003e from \u003ccode\u003eBlockingPortal.start_task_soon()\u003c/code\u003e would sometimes not cancel the async function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1011\"\u003e#1011\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the presence of the pytest plugin causing breakage with older versions of pytest (\u0026lt;= 6.1.2) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1028\"\u003e#1028\u003c/a\u003e; PR by \u003ca href=\"https://github.com/saper\"\u003e\u003ccode\u003e@​saper\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a rarely occurring \u003ccode\u003eRuntimeError: Set changed size during iteration\u003c/code\u003e while shutting down the process pool when using the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/985\"\u003e#985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for cancellation reasons (the \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003eCancelScope.cancel()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum version of Trio to v0.31.0\u003c/li\u003e\n\u003cli\u003eAdded the ability to enter the event loop from foreign (non-worker) threads by passing the return value of \u003ccode\u003eanyio.lowlevel.current_token()\u003c/code\u003e to \u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e and \u003ccode\u003eanyio.from_thread.run_sync()\u003c/code\u003e as the \u003ccode\u003etoken\u003c/code\u003e keyword argument (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded pytest option (\u003ccode\u003eanyio_mode = \u0026quot;auto\u0026quot;\u003c/code\u003e) to make the pytest plugin automatically handle all async tests (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the \u003ccode\u003eanyio.Condition.wait_for()\u003c/code\u003e method for feature parity with asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the default type argument of \u003ccode\u003eanyio.abc.TaskStatus\u003c/code\u003e from \u003ccode\u003eAny\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/964\"\u003e#964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed TCP listener behavior to guarantee the same ephemeral port is used for all socket listeners when \u003ccode\u003elocal_port=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/857\"\u003e#857\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed inconsistency between Trio and asyncio where a TCP stream that previously raised a \u003ccode\u003eBrokenResourceError\u003c/code\u003e on \u003ccode\u003esend()\u003c/code\u003e would still raise \u003ccode\u003eBrokenResourceError\u003c/code\u003e after the stream was closed on asyncio, but \u003ccode\u003eClosedResourceError\u003c/code\u003e on Trio. They now both raise a \u003ccode\u003eClosedResourceError\u003c/code\u003e in this scenario. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.10.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003efeed_data()\u003c/code\u003e method to the \u003ccode\u003eBufferedByteReceiveStream\u003c/code\u003e class, allowing users to inject data directly into the buffer\u003c/li\u003e\n\u003cli\u003eAdded various class methods to wrap existing sockets as listeners or socket streams:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSocketListener.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eConnectedUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXDatagramSocket.from_socket()\u003c/code\u003e\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/agronholm/anyio/commit/afbe93ca9d0c447adf26e9c1715ac20870622bf2\"\u003e\u003ccode\u003eafbe93c\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/33bdf2e4b4f40c2df178123746147a6d2471808d\"\u003e\u003ccode\u003e33bdf2e\u003c/code\u003e\u003c/a\u003e Rearranged the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/19e09e25bc5a23dd78a577d8c3909dd377057c78\"\u003e\u003ccode\u003e19e09e2\u003c/code\u003e\u003c/a\u003e Fixed inverted condition in _forcibly_shutdown_process_pool_on_exit (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9369d80b9e8292f2a892a9d5c73923c6a28aa08c\"\u003e\u003ccode\u003e9369d80\u003c/code\u003e\u003c/a\u003e Fixed Condition.wait() not handing over notification when cancelled\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f122abdc6f6b166c6b6ac27d36d55cdf8fa08e8\"\u003e\u003ccode\u003e6f122ab\u003c/code\u003e\u003c/a\u003e Fixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/beaa45aff568a4020f2faf317321dd92f0e1f4a0\"\u003e\u003ccode\u003ebeaa45a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1097\"\u003e#1097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/602f6606dcf3f37702686a4f3e161328c537b07f\"\u003e\u003ccode\u003e602f660\u003c/code\u003e\u003c/a\u003e Widened type annotations to accept IO[bytes] in file streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b5dcd45170701a756ba634197398f05d4710cab3\"\u003e\u003ccode\u003eb5dcd45\u003c/code\u003e\u003c/a\u003e Added note about erasing the template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d68670b3b4e0917d4caff2de082e03220f3e05a1\"\u003e\u003ccode\u003ed68670b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/fc17a22dd948e6a3d90d99908813f0010dfc3d2c\"\u003e\u003ccode\u003efc17a22\u003c/code\u003e\u003c/a\u003e tweak to_thread docs about abandon_on_cancel (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1088\"\u003e#1088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.9.0...4.13.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.1.8 to 8.4.0\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.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 \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.0/\"\u003ehttps://pypi.org/project/click/8.4.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParamType\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3371\"\u003e#3371\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\nparameterized by its converted value type.\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.convert\u003c/code\u003e return types are narrowed on all\nconcrete types (\u003ccode\u003estr\u003c/code\u003e for :class:\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e for\n:class:\u003ccode\u003eINT\u003c/code\u003e, etc.).\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.to_info_dict\u003c/code\u003e returns specific\n:class:\u003ccode\u003e~typing.TypedDict\u003c/code\u003e subclasses instead of\n\u003ccode\u003edict[str, Any]\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003eCompositeParamType\u003c/code\u003e and the number-range base are now\ngeneric with abstract methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRefactor \u003ccode\u003econvert_type\u003c/code\u003e to extract type inference into a private\n\u003ccode\u003e_guess_type\u003c/code\u003e helper, and add :func:\u003ccode\u003etyping.overload\u003c/code\u003e signatures.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3372\"\u003e#3372\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParameter\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2805\"\u003e#2805\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e is now an abstract base class, making explicit\nthat it cannot be instantiated directly.\u003c/li\u003e\n\u003cli\u003e:attr:\u003ccode\u003eParameter.name\u003c/code\u003e is now \u003ccode\u003estr\u003c/code\u003e instead of \u003ccode\u003estr | None\u003c/code\u003e.\nWhen \u003ccode\u003eexpose_value=False\u003c/code\u003e, the name is set to \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e instead\nof \u003ccode\u003eNone\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ectx\u003c/code\u003e parameter of :meth:\u003ccode\u003eParameter.get_error_hint\u003c/code\u003e is now\ntyped as \u003ccode\u003eContext | None\u003c/code\u003e, matching the runtime behavior.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSplit string values from \u003ccode\u003edefault_map\u003c/code\u003e for parameters with \u003ccode\u003enargs \u0026gt; 1\u003c/code\u003e\nor :class:\u003ccode\u003eTuple\u003c/code\u003e type, matching environment variable behavior.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2745\"\u003e#2745\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3364\"\u003e#3364\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAuto-detect \u003ccode\u003etype=UNPROCESSED\u003c/code\u003e for \u003ccode\u003eflag_value\u003c/code\u003e of non-basic types\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2012\"\u003e#2012\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3363\"\u003e#3363\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe error hint now uses \u003ccode\u003eCommand.get_help_option_names\u003c/code\u003e to pick\nnon-shadowed help option names, so \u003ccode\u003eTry '... -h'\u003c/code\u003e no longer points to a\nsubcommand option that shadows \u003ccode\u003e-h\u003c/code\u003e. All surviving names are shown\n(\u003ccode\u003e-h/--help\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/pallets/click/issues/2790\"\u003e#2790\u003c/a\u003e  \u003ca href=\"https://redirect.github.com/pallets/click/issues/3208\"\u003e#3208\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix readline functionality on non-Windows platforms. Prompt text is now\npassed directly to readline instead of being printed separately, allowing\nproper backspace, line editing, and line wrapping behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2968\"\u003e#2968\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\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,\nparameterized by its converted value type.\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.convert\u003c/code\u003e return types are narrowed on all\nconcrete types (\u003ccode\u003estr\u003c/code\u003e for :class:\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e for\n:class:\u003ccode\u003eINT\u003c/code\u003e, etc.).\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.to_info_dict\u003c/code\u003e returns specific\n:class:\u003ccode\u003e~typing.TypedDict\u003c/code\u003e subclasses instead of\n\u003ccode\u003edict[str, Any]\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003eCompositeParamType\u003c/code\u003e and the number-range base are now\ngeneric with abstract methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRefactor \u003ccode\u003econvert_type\u003c/code\u003e to extract type inference into a private\n\u003ccode\u003e_guess_type\u003c/code\u003e helper, and add :func:\u003ccode\u003etyping.overload\u003c/code\u003e signatures.\n:pr:\u003ccode\u003e3372\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e typing improvements. :pr:\u003ccode\u003e2805\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e is now an abstract base class, making explicit\nthat it cannot be instantiated directly.\u003c/li\u003e\n\u003cli\u003e:attr:\u003ccode\u003eParameter.name\u003c/code\u003e is now \u003ccode\u003estr\u003c/code\u003e instead of \u003ccode\u003estr | None\u003c/code\u003e.\nWhen \u003ccode\u003eexpose_value=False\u003c/code\u003e, the name is set to \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e instead\nof \u003ccode\u003eNone\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ectx\u003c/code\u003e parameter of :meth:\u003ccode\u003eParameter.get_error_hint\u003c/code\u003e is now\ntyped as \u003ccode\u003eContext | None\u003c/code\u003e, matching the runtime behavior.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSplit string values from \u003ccode\u003edefault_map\u003c/code\u003e for parameters with \u003ccode\u003enargs \u0026gt; 1\u003c/code\u003e\nor :class:\u003ccode\u003eTuple\u003c/code\u003e type, matching environment variable behavior.\n:issue:\u003ccode\u003e2745\u003c/code\u003e :pr:\u003ccode\u003e3364\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAuto-detect \u003ccode\u003etype=UNPROCESSED\u003c/code\u003e for \u003ccode\u003eflag_value\u003c/code\u003e of non-basic types\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. :issue:\u003ccode\u003e2012\u003c/code\u003e :pr:\u003ccode\u003e3363\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe error hint now uses :meth:\u003ccode\u003eCommand.get_help_option_names\u003c/code\u003e to pick\nnon-shadowed help option names, so \u003ccode\u003eTry '... -h'\u003c/code\u003e no longer points to a\nsubcommand option that shadows \u003ccode\u003e-h\u003c/code\u003e. All surviving names are shown\n(\u003ccode\u003e-h/--help\u003c/code\u003e). :issue:\u003ccode\u003e2790\u003c/code\u003e :pr:\u003ccode\u003e3208\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix readline functionality on non-Windows platforms. Prompt text is now\npassed directly to readline instead of being printed separately, allowing\nproper backspace, line editing, and line wrapping behavior. :issue:\u003ccode\u003e2968\u003c/code\u003e\n:pr:\u003ccode\u003e2969\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse :func:\u003ccode\u003eos.startfile\u003c/code\u003e on Windows to open URLs in :func:\u003ccode\u003eopen_url\u003c/code\u003e,\nreplacing the \u003ccode\u003estart\u003c/code\u003e built-in which cannot be invoked without\n\u003ccode\u003eshell=True\u003c/code\u003e. :issue:\u003ccode\u003e3164\u003c/code\u003e :pr:\u003ccode\u003e3186\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix Fish shell completion errors when option help text contains newlines.\n:issue:\u003ccode\u003e3043\u003c/code\u003e :pr:\u003ccode\u003e3126\u003c/code\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\u003e\u003ca href=\"https://github.com/pallets/click/commit/41f410fb7528305d7e87c8cfa704f6c2456f57fc\"\u003e\u003ccode\u003e41f410f\u003c/code\u003e\u003c/a\u003e Release 8.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/e3e69e3bf8d749ac1a632f2ece4d38ec7f6588f5\"\u003e\u003ccode\u003ee3e69e3\u003c/code\u003e\u003c/a\u003e Add type annotations for instance attributes in \u003ccode\u003eutils\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3422\"\u003e#3422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/3bb230dcd5d751f8605b46e9df5a541639d5fd4e\"\u003e\u003ccode\u003e3bb230d\u003c/code\u003e\u003c/a\u003e WIP: Fix \u003ccode\u003eHelpFormatter.write_usage\u003c/code\u003e producing spurious characters (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/63274a79d08fdc5c19220696144489f7144a8547\"\u003e\u003ccode\u003e63274a7\u003c/code\u003e\u003c/a\u003e \u003ccode\u003eclick.get_pager_file\u003c/code\u003e: add tests (\u003ca href=\"https://redirect.github.com/pallets/click/issues/1572\"\u003e#1572\u003c/a\u003e followup) (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3405\"\u003e#3405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/0551bf53588ae87f462d336f24f853a156fefe3a\"\u003e\u003ccode\u003e0551bf5\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eHelpFormatter.write_usage\u003c/code\u003e producing spurious characters\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/fc41aa1d0b62494eb93e92ff3929601221e3abf4\"\u003e\u003ccode\u003efc41aa1\u003c/code\u003e\u003c/a\u003e Apply class-body annotations to \u003ccode\u003eKeepOpenFile\u003c/code\u003e for consistency\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b761eda3bad977ec2f485451d85fd8ec365f0bf4\"\u003e\u003ccode\u003eb761eda\u003c/code\u003e\u003c/a\u003e Skip some tests on Windows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/98302ac4f49e443a48abd3fbb95c86202b89547d\"\u003e\u003ccode\u003e98302ac\u003c/code\u003e\u003c/a\u003e Check \u003ccode\u003ePAGER\u003c/code\u003e usage, color preservation and edge-cases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/dbdae170879d460e78963f8af35c5cb9c5b86e89\"\u003e\u003ccode\u003edbdae17\u003c/code\u003e\u003c/a\u003e Fix documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1aa2d53d63ff68bf14b35931177aac9270e39713\"\u003e\u003ccode\u003e1aa2d53\u003c/code\u003e\u003c/a\u003e Redesigned tests and get_pager_file branching to be more clear and not set color\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.1.8...8.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.10 to 3.15\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.md\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.15 (2026-05-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce DNS-length cap on individual labels early in \u003ccode\u003echeck_label\u003c/code\u003e,\nshort-circuiting contextual-rule processing for oversized input\nwhile staying compatible with UTS 46 usage.\u003c/li\u003e\n\u003cli\u003eTidy core helpers: hoist bidi category sets to module-level\nfrozensets (avoiding per-codepoint list construction), simplify\nlength checks, and reuse the shared \u003ccode\u003e_unicode_dots_re\u003c/code\u003e from\n\u003ccode\u003eidna.core\u003c/code\u003e in the codec module.\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eraise ... from err\u003c/code\u003e for proper exception chaining and\nswitch internal string formatting to f-strings.\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003eflit_core\u003c/code\u003e 4.x in the build backend.\u003c/li\u003e\n\u003cli\u003eExpand the ruff lint set (flake8-bugbear, flake8-simplify,\npyupgrade, perflint) and apply the surfaced fixes; pin lint CI\nto Python 3.14.\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration for GitHub Actions.\u003c/li\u003e\n\u003cli\u003eConvert README and HISTORY from reStructuredText to Markdown.\u003c/li\u003e\n\u003cli\u003eReference CVE-2026-45409 for the 3.14 advisory in place of the\ninitial GHSA identifier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Felix Yan, Stan Ulbrych, and metsw24-max for\ncontributions to this release.\u003c/p\u003e\n\u003ch2\u003e3.14 (2026-05-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved opportunity to process long inputs into quadratic\ntime by rejecting oversize inputs up-front. Closes a bypass\nof the CVE-2024-3651 mitigation. [CVE-2026-45409]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003ch2\u003e3.13 (2026-04-22)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12 (2026-04-21)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003ch2\u003e3.11 (2025-10-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 16.0.0, including significant changes to UTS46\nprocessing. As a result of Unicode ending support for it, transitional\nprocessing no longer has an effect and returns the same result.\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/kjd/idna/commit/af30a092e158181d0b35ac66dfa813788126bdd8\"\u003e\u003ccode\u003eaf30a09\u003c/code\u003e\u003c/a\u003e Release 3.15\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/30314d4628744ca14cf2b5820564e5127a9f86f2\"\u003e\u003ccode\u003e30314d4\u003c/code\u003e\u003c/a\u003e Pre-release 3.15rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/05d4b219aa9eddc47371fcbd2000f0301016f3e9\"\u003e\u003ccode\u003e05d4b21\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/237\"\u003e#237\u003c/a\u003e from kjd/convert-docs-to-markdown\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/2987fdba1962bbb2358399e0084ba062b98a0bee\"\u003e\u003ccode\u003e2987fdb\u003c/code\u003e\u003c/a\u003e Convert README and HISTORY from reStructuredText to Markdown\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/59fa8002d514bf4a5ce7b58f67b9ec587d53fa9c\"\u003e\u003ccode\u003e59fa800\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/236\"\u003e#236\u003c/a\u003e from kjd/dependabot/github_actions/actions-f3e34333ea\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/def69834ced5d4b3c50439d8b99c4c856ec19ca2\"\u003e\u003ccode\u003edef6983\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into dependabot/github_actions/actions-f3e34333ea\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/bbd8004a797185d8c56bb555cd5c88fde05e0631\"\u003e\u003ccode\u003ebbd8004\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/234\"\u003e#234\u003c/a\u003e from StanFromIreland/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/edd07c05024344a6ccb517414ccb36683aee99fc\"\u003e\u003ccode\u003eedd07c0\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.35.2 to 4.35.2 in the actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5557db030c11bdec50d62aa5f631d705d33ba123\"\u003e\u003ccode\u003e5557db0\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f11746cf4981d25123ef7830d3ee60f07de8ae3d\"\u003e\u003ccode\u003ef11746c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/235\"\u003e#235\u003c/a\u003e from StanFromIreland/patch-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.10...v3.15\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.8.1 to 2.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/850\"\u003epydantic/pydantic-settings#850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 5 updates 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/pydantic/pydantic-settings/pull/854\"\u003epydantic/pydantic-settings#854\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 3 updates 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/pydantic/pydantic-settings/pull/853\"\u003epydantic/pydantic-settings#853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates 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/pydantic/pydantic-settings/pull/856\"\u003epydantic/pydantic-settings#856\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/858\"\u003epydantic/pydantic-settings#858\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.1 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/859\"\u003epydantic/pydantic-settings#859\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-settings/compare/v2.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 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/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 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/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 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/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 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/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python 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/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group 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/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates 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/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt 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-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group 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/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor 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-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\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-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\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/pydantic/pydantic-settings/commit/e95c30bec8cfaee88ee275138c064aea97a25bdf\"\u003e\u003ccode\u003ee95c30b\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/859\"\u003e#859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/0c8734581b6cf70a995afad603ac456631d00621\"\u003e\u003ccode\u003e0c87345\u003c/code\u003e\u003c/a\u003e Fix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/858\"\u003e#858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/7bd0072795a800065b42210b6dca90fc9b83daf7\"\u003e\u003ccode\u003e7bd0072\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 2 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/856\"\u003e#856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/b03e573d017ed48e1c2774a5e0b715db9766c76b\"\u003e\u003ccode\u003eb03e573\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/853\"\u003e#853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/eaa3b434938411ec8a3717ea646614561e713f51\"\u003e\u003ccode\u003eeaa3b43\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 5 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/854\"\u003e#854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9f95615c24c6813c1d7d203576581a79cb6d9e8e\"\u003e\u003ccode\u003e9f95615\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/850\"\u003e#850\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.8.1...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.14.1 to 4.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003cp\u003eNew features since 4.14.1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.15.0 (August 25, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003ch1\u003eRelease 4.15.0rc1 (August 18, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/typing_extensions/commit/9d1637e264b5c1a6b7acee3e907015f89b20c2c9\"\u003e\u003ccode\u003e9d1637e\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4bd67c5be5d9443c7d33c314d02a56ee125eb88d\"\u003e\u003ccode\u003e4bd67c5\u003c/code\u003e\u003c/a\u003e Coverage: exclude some noise (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e589a26da73b075c5276bae40b86db1af0144f84\"\u003e\u003ccode\u003ee589a26\u003c/code\u003e\u003c/a\u003e Coverage: add detailed report to job summary (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/67d37fed1298e050f74d5acc95b2621bd37837ad\"\u003e\u003ccode\u003e67d37fe\u003c/code\u003e\u003c/a\u003e Coverage: Implement fail_under (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e9ae26f5286edee9262727755ecb9ad16e999192\"\u003e\u003ccode\u003ee9ae26f\u003c/code\u003e\u003c/a\u003e Don't delete previous coverage comment (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/ac80bb728a3006fc88ef7373b92f0c25cfcc7895\"\u003e\u003ccode\u003eac80bb7\u003c/code\u003e\u003c/a\u003e Add Coverage workflow (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/623\"\u003e#623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/abaaafd98c1cc7e5baf098ec287a3d22cb339670\"\u003e\u003ccode\u003eabaaafd\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/98104053ea8d49bcdd247804e5fa9f73136acbd4\"\u003e\u003ccode\u003e9810405\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e@disjoint_base\u003c/code\u003e (PEP 800) (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/634\"\u003e#634\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/7ee9e05fd484d06899ce56e80f5e1aa4c760fc03\"\u003e\u003ccode\u003e7ee9e05\u003c/code\u003e\u003c/a\u003e Backport type_params fix from CPython (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/1e8eb9c06ef51b3a1e1f05303a16feca13f5ed98\"\u003e\u003ccode\u003e1e8eb9c\u003c/code\u003e\u003c/a\u003e Do not refer to PEP 705 as being experimental (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.14.1...4.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.45.0 to 0.47.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.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\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer 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/2917\"\u003eKludex/uvicorn#2917\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.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.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/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.47.0 (May 14, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2920\"\u003e#2920\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2927\"\u003e#2927\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\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/479a2c0c89186714f1aac52aecdebebf271395ac\"\u003e\u003ccode\u003e479a2c0\u003c/code\u003e\u003c/a\u003e Version 0.47.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2937\"\u003e#2937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/89347fd166ebedf98fb3f806ce8ea44e93b1c2b5\"\u003e\u003ccode\u003e89347fd\u003c/code\u003e\u003c/a\u003e Add 7-day cooldown for dependency resolution via uv exclude-newer (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2936\"\u003e#2936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/767315b38ae509cee9fe8ee9d09f6da920536096\"\u003e\u003ccode\u003e767315b\u003c/code\u003e\u003c/a\u003e Drop unused contents/actions permissions from zizmor workflow (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2935\"\u003e#2935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/f25ee43e68a9678453cbca99ad96f1a447ff34af\"\u003e\u003ccode\u003ef25ee43\u003c/code\u003e\u003c/a\u003e chore(deps): bump urllib3 from 2.6.3 to 2.7.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2933\"\u003e#2933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/8782666189a3d36c978de5698620db705659bf44\"\u003e\u003ccode\u003e8782666\u003c/code\u003e\u003c/a\u003e Fix typo in \u003ccode\u003edocs/deployment/index.md\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2932\"\u003e#2932\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/ad5ff87c869e8a34e9b04fcd5ca38d65c526893c\"\u003e\u003ccode\u003ead5ff87\u003c/code\u003e\u003c/a\u003e Treat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2927\"\u003e#2927\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/6761b2c8f9272fa0e908d0b9cdcb3cb0aa11382f\"\u003e\u003ccode\u003e6761b2c\u003c/code\u003e\u003c/a\u003e Remove Hugging Face sponsor block from docs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2923\"\u003e#2923\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/438f64834de00708a9bb3548a36090e7a924ad84\"\u003e\u003ccode\u003e438f648\u003c/code\u003e\u003c/a\u003e Surface sponsors on welcome page and sidebar (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2921\"\u003e#2921\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/10ddc6dd296cb6e432a00835abe27f1c822373c1\"\u003e\u003ccode\u003e10ddc6d\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2920\"\u003e#2920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b499bc45101d920e691e384025d728507215d4d1\"\u003e\u003ccode\u003eb499bc4\u003c/code\u003e\u003c/a\u003e Eagerly import the ASGI app in the parent process (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2919\"\u003e#2919\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.45.0...0.47.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.10 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.10...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.27 to 0.0.28\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.28\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\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/python-multipart/pull/281\"\u003eKludex/python-multipart#281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes 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/python-multipart/pull/282\"\u003eKludex/python-multipart#282\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/python-multipart/compare/0.0.27...0.0.28\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28\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/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.28 (2026-05-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/281\"\u003e#281\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/282\"\u003e#282\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/python-multipart/commit/7d8d28b210ac6cb055399562b0dc0e5cf9aef14a\"\u003e\u003ccode\u003e7d8d28b\u003c/code\u003e\u003c/a\u003e Version 0.0.28 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/284\"\u003e#284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b0dd125457d0f98de23bf2f894aedb1a54639d4e\"\u003e\u003ccode\u003eb0dd125\u003c/code\u003e\u003c/a\u003e Cap multipart boundary length at 256 bytes (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/282\"\u003e#282\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/d1b57392cf7d0c19235ba454eb5686fd27dc2384\"\u003e\u003ccode\u003ed1b5739\u003c/code\u003e\u003c/a\u003e Speed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/281\"\u003e#281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/09cb8c3da7638d45ecdf7c154832303214bba829\"\u003e\u003ccode\u003e09cb8c3\u003c/code\u003e\u003c/a\u003e Make the long_boundary benchmark dominated by the patched code path (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/280\"\u003e#280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/a6467c93c14aa4b09ef65450ead8011c45e5c7a0\"\u003e\u003ccode\u003ea6467c9\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Switch CodSpeed benchmarks to walltime mode\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/279\"\u003e#279\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/9a9690035a956fbdcca06f98461244cf790375a7\"\u003e\u003ccode\u003e9a96900\u003c/code\u003e\u003c/a\u003e Switch CodSpeed benchmarks to walltime mode (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/278\"\u003e#278\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/1fc7a626f566ae11bc63165260262b9a30af9008\"\u003e\u003ccode\u003e1fc7a62\u003c/code\u003e\u003c/a\u003e Make benchmark coverage trigger the partial-boundary fallback (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/277\"\u003e#277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/03df045810a216dceabbefc9dca7a33a264307bc\"\u003e\u003ccode\u003e03df045\u003c/code\u003e\u003c/a\u003e Add CodSpeed benchmark suite for parser hot paths (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/276\"\u003e#276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/79a7c614953d0c91a1d6dc69759b4fbcd0fb44f3\"\u003e\u003ccode\u003e79a7c61\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/273\"\u003e#273\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/bd29332f23429d06cf16226819f89b28a8288915\"\u003e\u003ccode\u003ebd29332\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 5 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/274\"\u003e#274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `webauthn` from 2.5.2 to 2.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/duo-labs/py_webauthn/releases\"\u003ewebauthn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis project now uses the \u003ca href=\"https://github.com/pyasn1/pyasn1/\"\u003epyasn1\u003c/a\u003e library to parse ASN.1-encoded values (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/263\"\u003e#263\u003c/a\u003e, h/t \u003ca href=\"https://github.com/ggirol-rc\"\u003e\u003ccode\u003e@​ggirol-rc\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSome bare \u003ccode\u003edict\u003c/code\u003e type annotations have been replaced with \u003ccode\u003eDict[str, Any]\u003c/code\u003e to satisfy stricter type checking setups (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/262\"\u003e#262\u003c/a\u003e, h/t \u003ca href=\"https://github.com/typestring\"\u003e\u003ccode\u003e@​typestring\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper has a new, optional \u003ccode\u003ebytes_encoder\u003c/code\u003e argument that accepts a \u003ccode\u003eCallable[[bytes], Any]\u003c/code\u003e method. This enables the use of custom encoding logic when serializing \u003ccode\u003ebytes\u003c/code\u003e values. When this argument is unspecified, \u003ccode\u003ebytes\u003c/code\u003e values will continue to be encoded into Base64URL (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.6.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe new \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper can be used to simplify registration and authentication options into a simple \u003ccode\u003eDict[str, Any]\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.5.3\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMore X.509 validation exceptions will include the cause of the exception as reported by the third-party library handling the validation (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/255\"\u003e#255\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/duo-labs/py_webauthn/blob/master/CHANGELOG.md\"\u003ewebauthn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis project now uses the \u003ca href=\"https://github.com/pyasn1/pyasn1/\"\u003epyasn1\u003c/a\u003e library to parse ASN.1-encoded values (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/263\"\u003e#263\u003c/a\u003e, h/t \u003ca href=\"https://github.com/ggirol-rc\"\u003e\u003ccode\u003e@​ggirol-rc\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSome bare \u003ccode\u003edict\u003c/code\u003e type annotations have been replaced with \u003ccode\u003eDict[str, Any]\u003c/code\u003e to satisfy stricter type checking setups (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/262\"\u003e#262\u003c/a\u003e, h/t \u003ca href=\"https://github.com/typestring\"\u003e\u003ccode\u003e@​typestring\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper has a new, optional \u003ccode\u003ebytes_encoder\u003c/code\u003e argument that accepts a \u003ccode\u003eCallable[[bytes], Any]\u003c/code\u003e method. This enables the use of custom encoding logic when serializing \u003ccode\u003ebytes\u003c/code\u003e values. When this argument is unspecified, \u003ccode\u003ebytes\u003c/code\u003e values will continue to be encoded into Base64URL (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.6.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe new \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper can be used to simplify registration and authentication options into a simple \u003ccode\u003eDict[str, Any]\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.5.3\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMore X.509 validation exceptions will include the cause of the exception as reported by the third-party library handling the validation (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/255\"\u003e#255\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/duo-labs/py_webauthn/commit/91af...\n\n_Description has been truncated_","html_url":"https://github.com/WebbPulse/CarModPicker/pull/136","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/WebbPulse%2FCarModPicker/issues/136","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/136/packages"}},{"old_version":"4.14.0","new_version":"4.15.0","update_type":"minor","path":null,"pr_created_at":"2026-05-13T13:17:23.000Z","version_change":"4.14.0 → 4.15.0","issue":{"uuid":"4438189791","node_id":"PR_kwDOAG7wis7bIZb4","number":4829,"state":"open","title":"chore(deps): bump the python-minor-patch group across 1 directory with 16 updates","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-05-13T13:17:23.000Z","updated_at":"2026-05-13T13:30:58.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor-patch","update_count":16,"packages":[{"name":"pre-commit","old_version":"4.5.1","new_version":"4.6.0","repository_url":"https://github.com/pre-commit/pre-commit"},{"name":"mypy","old_version":"1.16.1","new_version":"1.20.2","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.12.1","new_version":"0.15.12","repository_url":"https://github.com/astral-sh/ruff"},{"name":"wheel","old_version":"0.46.3","new_version":"0.47.0","repository_url":"https://github.com/pypa/wheel"},{"name":"hatchling","old_version":"1.27.0","new_version":"1.29.0","repository_url":"https://github.com/pypa/hatch"},{"name":"types-requests","old_version":"2.32.4.20250611","new_version":"2.33.0.20260503","repository_url":"https://github.com/python/typeshed"},{"name":"types-markdown","old_version":"3.8.0.20250415","new_version":"3.10.2.20260408","repository_url":"https://github.com/python/typeshed"},{"name":"sphinx-book-theme","old_version":"1.1.4","new_version":"1.2.0","repository_url":"https://github.com/executablebooks/sphinx-book-theme"},{"name":"sphinx-autoapi","old_version":"3.6.0","new_version":"3.8.0","repository_url":"https://github.com/readthedocs/sphinx-autoapi"},{"name":"sphinxcontrib-mermaid","old_version":"2.0.1","new_version":"2.0.2","repository_url":"https://github.com/mgaitan/sphinxcontrib-mermaid"},{"name":"markdown","old_version":"3.8.2","new_version":"3.10.2","repository_url":"https://github.com/Python-Markdown/markdown"},{"name":"orjson","old_version":"3.10.18","new_version":"3.11.8","repository_url":"https://github.com/ijl/orjson"},{"name":"typing-extensions","old_version":"4.14.0","new_version":"4.15.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"beautifulsoup4","old_version":"4.13.4","new_version":"4.14.3"},{"name":"flask-cors","old_version":"6.0.1","new_version":"6.0.2","repository_url":"https://github.com/corydolphin/flask-cors"},{"name":"jsonschema","old_version":"4.24.0","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pre-commit](https://github.com/pre-commit/pre-commit) | `4.5.1` | `4.6.0` |\n| [mypy](https://github.com/python/mypy) | `1.16.1` | `1.20.2` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.12.1` | `0.15.12` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.47.0` |\n| [hatchling](https://github.com/pypa/hatch) | `1.27.0` | `1.29.0` |\n| [types-requests](https://github.com/python/typeshed) | `2.32.4.20250611` | `2.33.0.20260503` |\n| [types-markdown](https://github.com/python/typeshed) | `3.8.0.20250415` | `3.10.2.20260408` |\n| [sphinx-book-theme](https://github.com/executablebooks/sphinx-book-theme) | `1.1.4` | `1.2.0` |\n| [sphinx-autoapi](https://github.com/readthedocs/sphinx-autoapi) | `3.6.0` | `3.8.0` |\n| [sphinxcontrib-mermaid](https://github.com/mgaitan/sphinxcontrib-mermaid) | `2.0.1` | `2.0.2` |\n| [markdown](https://github.com/Python-Markdown/markdown) | `3.8.2` | `3.10.2` |\n| [orjson](https://github.com/ijl/orjson) | `3.10.18` | `3.11.8` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.14.0` | `4.15.0` |\n| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.13.4` | `4.14.3` |\n| [flask-cors](https://github.com/corydolphin/flask-cors) | `6.0.1` | `6.0.2` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.24.0` | `4.26.0` |\n\n\nUpdates `pre-commit` from 4.5.1 to 4.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pre-commit/pre-commit/releases\"\u003epre-commit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epre-commit v4.6.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier usage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/blob/main/CHANGELOG.md\"\u003epre-commit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e4.6.0 - 2026-04-21\u003c/h1\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: allow \u003ccode\u003e--hook-dir\u003c/code\u003e to be missing to enable easier\nusage with \u003ccode\u003egit\u003c/code\u003e 2.54+ git hooks.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003epre-commit hook-impl\u003c/code\u003e: \u003ccode\u003e--hook-type\u003c/code\u003e is required.\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e PR by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/pre-commit/pre-commit/commit/f35134b05028ec938ac605ae500fdf95462655d3\"\u003e\u003ccode\u003ef35134b\u003c/code\u003e\u003c/a\u003e v4.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2a51ffcb81f6c8ed2e6467913c3343a8800f3ab9\"\u003e\u003ccode\u003e2a51ffc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3662\"\u003e#3662\u003c/a\u003e from pre-commit/hook-impl-optional-hook-dir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/d7dee322abfc765b042f2e3b872aab3c3a867610\"\u003e\u003ccode\u003ed7dee32\u003c/code\u003e\u003c/a\u003e make --hook-dir optional for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/965aeb1c680e8b526342153547f0ec014484c63d\"\u003e\u003ccode\u003e965aeb1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3661\"\u003e#3661\u003c/a\u003e from pre-commit/hook-impl-required\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/2eacc064aa9b5bb33d3a0d84a234b475e34f3096\"\u003e\u003ccode\u003e2eacc06\u003c/code\u003e\u003c/a\u003e --hook-type is required for hook-impl\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/f5678bf4ac35cffc0ff7174ad85f7fdc2a5c977e\"\u003e\u003ccode\u003ef5678bf\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3657\"\u003e#3657\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/054cc5bd6bb1b20faa1eefe09f0de3b68fceee94\"\u003e\u003ccode\u003e054cc5b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/5c0f3024d2524f6e029a4c333392fd9be9fb27f6\"\u003e\u003ccode\u003e5c0f302\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3652\"\u003e#3652\u003c/a\u003e from pre-commit/pre-commit-ci-update-config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/a5d91142676630f8130020b35e166e0c0e92b8f4\"\u003e\u003ccode\u003ea5d9114\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pre-commit/pre-commit/commit/129a1f5ca1eaee0c952a5e7a07faae305c5e15bc\"\u003e\u003ccode\u003e129a1f5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pre-commit/pre-commit/issues/3641\"\u003e#3641\u003c/a\u003e from pre-commit/mxr-patch-1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pre-commit/pre-commit/compare/v4.5.1...v4.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 1.16.1 to 1.20.2\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\u003ch3\u003eMypy 1.20.2\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse WAL with SQLite cache and fix close (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21154\"\u003e21154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust SQLite journal mode (Ivan Levkivskyi, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21217\"\u003e21217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCorrectly aggregate narrowing information on parent expressions (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21206\"\u003e21206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix regression related to generic callables (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21208\"\u003e21208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix regression by avoiding widening types in some contexts (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21242\"\u003e21242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix slicing in non-strict optional mode (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21282\"\u003e21282\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emypyc: Fix match statement semantics for \u0026quot;or\u0026quot; pattern (Shantanu, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21156\"\u003e21156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emypyc: Fix issue with module dunder attributes (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21275\"\u003e21275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInitial support for Python 3.15.0a8 (Marc Mueller, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21255\"\u003e21255\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eAcknowledgements\u003c/h3\u003e\n\u003cp\u003eThanks to all mypy contributors who contributed to this release:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eA5rocks\u003c/li\u003e\n\u003cli\u003eAaron Wieczorek\u003c/li\u003e\n\u003cli\u003eAdam Turner\u003c/li\u003e\n\u003cli\u003eAli Hamdan\u003c/li\u003e\n\u003cli\u003easce\u003c/li\u003e\n\u003cli\u003eBobTheBuidler\u003c/li\u003e\n\u003cli\u003eBrent Westbrook\u003c/li\u003e\n\u003cli\u003eBrian Schubert\u003c/li\u003e\n\u003cli\u003ebzoracler\u003c/li\u003e\n\u003cli\u003eChris Burroughs\u003c/li\u003e\n\u003cli\u003eChristoph Tyralla\u003c/li\u003e\n\u003cli\u003eColin Watson\u003c/li\u003e\n\u003cli\u003eDonghoon Nam\u003c/li\u003e\n\u003cli\u003eE. M. Bray\u003c/li\u003e\n\u003cli\u003eEmma Smith\u003c/li\u003e\n\u003cli\u003eEthan Sarp\u003c/li\u003e\n\u003cli\u003eGeorge Ogden\u003c/li\u003e\n\u003cli\u003egetzze\u003c/li\u003e\n\u003cli\u003egrayjk\u003c/li\u003e\n\u003cli\u003eGregor Riepl\u003c/li\u003e\n\u003cli\u003eIvan Levkivskyi\u003c/li\u003e\n\u003cli\u003eJames Hilliard\u003c/li\u003e\n\u003cli\u003eJames Le Cuirot\u003c/li\u003e\n\u003cli\u003eJeremy Nimmer\u003c/li\u003e\n\u003cli\u003eJoren Hammudoglu\u003c/li\u003e\n\u003cli\u003eKai (Kazuya Ito)\u003c/li\u003e\n\u003cli\u003ekaushal trivedi\u003c/li\u003e\n\u003cli\u003eKevin Kannammalil\u003c/li\u003e\n\u003cli\u003eLukas Geiger\u003c/li\u003e\n\u003cli\u003eŁukasz Langa\u003c/li\u003e\n\u003cli\u003eMarc Mueller\u003c/li\u003e\n\u003cli\u003eMichael R. Crusoe\u003c/li\u003e\n\u003cli\u003emichaelm-openai\u003c/li\u003e\n\u003cli\u003eNeil Schemenauer\u003c/li\u003e\n\u003cli\u003ePiotr Sawicki\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/145a062651b5f9996b75ef32b7040bd2e885ed82\"\u003e\u003ccode\u003e145a062\u003c/code\u003e\u003c/a\u003e Bump version to 1.20.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/81cd49215c288eacb987de066f02daff2553b7c7\"\u003e\u003ccode\u003e81cd492\u003c/code\u003e\u003c/a\u003e Fix slicing with nonstrict optional (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21282\"\u003e#21282\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/908d3441eecbaa2a6193165317177db834d7ca1a\"\u003e\u003ccode\u003e908d344\u003c/code\u003e\u003c/a\u003e [mypyc] Set dunder attrs when adding module to sys.modules (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21275\"\u003e#21275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/ba28610fac9d2b33be210ca8dcfe4bc47b7af424\"\u003e\u003ccode\u003eba28610\u003c/code\u003e\u003c/a\u003e Initial support for Python 3.15.0a8 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21255\"\u003e#21255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/7b0e09f48dbd3717ed008a273cd17e8e960c2037\"\u003e\u003ccode\u003e7b0e09f\u003c/code\u003e\u003c/a\u003e Fix match statement semantics for \u0026quot;or\u0026quot; pattern (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21156\"\u003e#21156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/92b74f226de62f7505f5ef5cb158e8ec9c58b8b7\"\u003e\u003ccode\u003e92b74f2\u003c/code\u003e\u003c/a\u003e Avoid widening types in conditional_types (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21242\"\u003e#21242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0dcbfaa40b0e360a16baea9cf851955375d91b54\"\u003e\u003ccode\u003e0dcbfaa\u003c/code\u003e\u003c/a\u003e Fix is_overlapping_types for generic callables (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21208\"\u003e#21208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/210f518dede35292033ef0d387847406a0ccef8f\"\u003e\u003ccode\u003e210f518\u003c/code\u003e\u003c/a\u003e Correctly aggregate narrowing information on parent expressions (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21206\"\u003e#21206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/c34530e53a10e385d8b0f1af4baa88a596b5ceaa\"\u003e\u003ccode\u003ec34530e\u003c/code\u003e\u003c/a\u003e Only set journal mode in coordinator (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21217\"\u003e#21217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/79a3ec6d01b56a27c00e9b3320c2b1d4d73a77f9\"\u003e\u003ccode\u003e79a3ec6\u003c/code\u003e\u003c/a\u003e Use WAL with SQLite cache, fix close (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21154\"\u003e#21154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v1.16.1...v1.20.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.12.1 to 0.15.12\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.12\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\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/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.12\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003ecurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-installer.sh | sh\n\u003c/code\u003e\u003c/pre\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.12\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-24.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImplement \u003ccode\u003e#ruff:ignore\u003c/code\u003e logical-line suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23404\"\u003e#23404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert preview changes to displayed diagnostic severity in LSP (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24789\"\u003e#24789\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003etask-branch-as-short-circuit\u003c/code\u003e (\u003ccode\u003eAIR004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23579\"\u003e#23579\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bugbear\u003c/code\u003e] Fix \u003ccode\u003ebreak\u003c/code\u003e/\u003ccode\u003econtinue\u003c/code\u003e handling in \u003ccode\u003eloop-iterator-mutation\u003c/code\u003e (\u003ccode\u003eB909\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24440\"\u003e#24440\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLC2701\u003c/code\u003e for type parameter scopes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24576\"\u003e#24576\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epandas-vet\u003c/code\u003e] Suggest \u003ccode\u003e.array\u003c/code\u003e as well in \u003ccode\u003ePD011\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24805\"\u003e#24805\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRespect default Unix permissions for cache files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24794\"\u003e#24794\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Fix \u003ccode\u003ePLR0124\u003c/code\u003e description not to claim self-comparison always returns the same value (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24749\"\u003e#24749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Expand docs on reusable \u003ccode\u003eTypeVar\u003c/code\u003es and scoping (\u003ccode\u003eUP046\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24153\"\u003e#24153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove rules table accessibility (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24711\"\u003e#24711\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/dylwil3\"\u003e\u003ccode\u003e@​dylwil3\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexWaygood\"\u003e\u003ccode\u003e@​AlexWaygood\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/avasis-ai\"\u003e\u003ccode\u003e@​avasis-ai\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dev-iL\"\u003e\u003ccode\u003e@​Dev-iL\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/denyszhak\"\u003e\u003ccode\u003e@​denyszhak\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anishgirianish\"\u003e\u003ccode\u003e@​anishgirianish\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/amyreese\"\u003e\u003ccode\u003e@​amyreese\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/majiayu000\"\u003e\u003ccode\u003e@​majiayu000\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.11\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-04-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Ignore \u003ccode\u003eRUF029\u003c/code\u003e when function is decorated with \u003ccode\u003easynccontextmanager\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24642\"\u003e#24642\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eairflow\u003c/code\u003e] Implement \u003ccode\u003eairflow-xcom-pull-in-template-string\u003c/code\u003e (\u003ccode\u003eAIR201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23583\"\u003e#23583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix \u003ccode\u003eS103\u003c/code\u003e false positives and negatives in mask analysis (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/24424\"\u003e#24424\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/66f93cf7ed4d36325f35a452e4afa28268fbcd28\"\u003e\u003ccode\u003e66f93cf\u003c/code\u003e\u003c/a\u003e Bump 0.15.12 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24815\"\u003e#24815\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/476a4d02e8e3b6c157ac39979d8b698a1b6baa91\"\u003e\u003ccode\u003e476a4d0\u003c/code\u003e\u003c/a\u003e [ty] Complete support for more detailed diagnostics on possibly unbound error...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ed669eab30095d6c51fe6cdef6050fb01276bcb3\"\u003e\u003ccode\u003eed669ea\u003c/code\u003e\u003c/a\u003e Implement \u003ccode\u003e#ruff:file-ignore\u003c/code\u003e file-level suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/23599\"\u003e#23599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e73d952e43feb51356ee740c5a973fce81396ff6\"\u003e\u003ccode\u003ee73d952\u003c/code\u003e\u003c/a\u003e [ty] Include inferred type in \u003ccode\u003einvalid-key\u003c/code\u003e concise diagnostic for union/inte...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/80feb29b31cd98c093316df2e0407b0c70c01b55\"\u003e\u003ccode\u003e80feb29\u003c/code\u003e\u003c/a\u003e [ty] report only dead annotation-only locals as unused (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24811\"\u003e#24811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0fbf2bc27336a3d17d39af52cf89b78dcda8c7c8\"\u003e\u003ccode\u003e0fbf2bc\u003c/code\u003e\u003c/a\u003e Drop deprecated license classifier (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24808\"\u003e#24808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/43b174cc7f2fcb0080bb1d4843cd4bf6b72bbe27\"\u003e\u003ccode\u003e43b174c\u003c/code\u003e\u003c/a\u003e [ty] Infer lambda parameter types with \u003ccode\u003eCallable\u003c/code\u003e type context (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24317\"\u003e#24317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4f449ae4a2377569330a5ab94799d389357b5a3f\"\u003e\u003ccode\u003e4f449ae\u003c/code\u003e\u003c/a\u003e [ty] Add error context for intersection types (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24772\"\u003e#24772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/5b4e753acb46e96ad408e4904c15308e33efe307\"\u003e\u003ccode\u003e5b4e753\u003c/code\u003e\u003c/a\u003e [ty] Add support for goto in literal enum member inlay hint (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24792\"\u003e#24792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e7cc76275a758ce1c636ea1c2d091fd576aac794\"\u003e\u003ccode\u003ee7cc762\u003c/code\u003e\u003c/a\u003e [ty] Add error context for TypedDict assignments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/24790\"\u003e#24790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.12.1...0.15.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `wheel` from 0.46.3 to 0.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/wheel/releases\"\u003ewheel's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.47.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without unpacking them (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/639\"\u003e#639\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains uppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory inside uses normalized lowercase naming (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/411\"\u003e#411\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/pypa/wheel/blob/main/docs/news.rst\"\u003ewheel's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease Notes\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003e0.47.0 (2026-04-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003ewheel info\u003c/code\u003e subcommand to display metadata about wheel files without\nunpacking them (\u003ccode\u003e[#639](https://github.com/pypa/wheel/issues/639) \u0026lt;https://github.com/pypa/wheel/issues/639\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eWheelFile\u003c/code\u003e raising \u003ccode\u003eMissing RECORD file\u003c/code\u003e when the wheel filename contains\nuppercase characters (e.g. \u003ccode\u003eDjango-3.2.5.whl\u003c/code\u003e) but the \u003ccode\u003e.dist-info\u003c/code\u003e directory\ninside uses normalized lowercase naming\n(\u003ccode\u003e[#411](https://github.com/pypa/wheel/issues/411) \u0026lt;https://github.com/pypa/wheel/issues/411\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.3 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eImportError: cannot import name '_setuptools_logging' from 'wheel'\u003c/code\u003e when\ninstalled alongside an old version of setuptools and running the \u003ccode\u003ebdist_wheel\u003c/code\u003e\ncommand (\u003ccode\u003e[#676](https://github.com/pypa/wheel/issues/676) \u0026lt;https://github.com/pypa/wheel/issues/676\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.2 (2026-01-22)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRestored the \u003ccode\u003ebdist_wheel\u003c/code\u003e command for compatibility with \u003ccode\u003esetuptools\u003c/code\u003e older than\nv70.1\u003c/li\u003e\n\u003cli\u003eImporting \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e now emits a \u003ccode\u003eFutureWarning\u003c/code\u003e instead of a\n\u003ccode\u003eDeprecationWarning\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003ewheel unpack\u003c/code\u003e potentially altering the permissions of files outside of the\ndestination tree with maliciously crafted wheels (CVE-2026-24049)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.1 (2025-04-08)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTemporarily restored the \u003ccode\u003ewheel.macosx_libfile\u003c/code\u003e module\n(\u003ccode\u003e[#659](https://github.com/pypa/wheel/issues/659) \u0026lt;https://github.com/pypa/wheel/issues/659\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.46.0 (2025-04-03)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.8\u003c/li\u003e\n\u003cli\u003eRemoved the \u003ccode\u003ebdist_wheel\u003c/code\u003e setuptools command implementation and entry point.\nThe \u003ccode\u003ewheel.bdist_wheel\u003c/code\u003e module is now just an alias to\n\u003ccode\u003esetuptools.command.bdist_wheel\u003c/code\u003e, emitting a deprecation warning on import.\u003c/li\u003e\n\u003cli\u003eRemoved vendored \u003ccode\u003epackaging\u003c/code\u003e in favor of a run-time dependency on it\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.metadata\u003c/code\u003e module private (with a deprecation warning if it's\nimported\u003c/li\u003e\n\u003cli\u003eMade the \u003ccode\u003ewheel.cli\u003c/code\u003e package private (no deprecation warning)\u003c/li\u003e\n\u003cli\u003eFixed an exception when calling the \u003ccode\u003econvert\u003c/code\u003e command with an empty description\nfield\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e0.45.1 (2024-11-23)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed pure Python wheels converted from eggs and wininst files having the ABI tag in\nthe file name\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/wheel/commit/efd83a750f07a33462ea2eed365fd8dac9e51442\"\u003e\u003ccode\u003eefd83a7\u003c/code\u003e\u003c/a\u003e Created a new release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/bb69216d35588c2a0febc2d9a130727fe6e46ee3\"\u003e\u003ccode\u003ebb69216\u003c/code\u003e\u003c/a\u003e Reordered the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/d5a1763ce927618bfa7d82abe334d0d14a93cc37\"\u003e\u003ccode\u003ed5a1763\u003c/code\u003e\u003c/a\u003e fix(wheelfile): resolve .dist-info path case-insensitively when reading wheel...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/5718957928ece25eb0d1c12023c71dea4fcb5cf9\"\u003e\u003ccode\u003e5718957\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/625806845ae5756be3cc0f9d44832c29079c0954\"\u003e\u003ccode\u003e6258068\u003c/code\u003e\u003c/a\u003e chore: log_level is better than log_cli_level (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/684\"\u003e#684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/2975debc789682b3a448b134611acc6962a93eb3\"\u003e\u003ccode\u003e2975deb\u003c/code\u003e\u003c/a\u003e Require tox \u0026gt;= 4.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/47674ba770e5ee72d679b7eb32b558e0c177640d\"\u003e\u003ccode\u003e47674ba\u003c/code\u003e\u003c/a\u003e chore: add check-sdist to checks (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/681\"\u003e#681\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/56223f6f8dfa8d3d40923f24dcf159204698d7b6\"\u003e\u003ccode\u003e56223f6\u003c/code\u003e\u003c/a\u003e \u003ccode\u003e__package__\u003c/code\u003e → \u003ccode\u003e__spec__.parent\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/679\"\u003e#679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/0ce509e02dc3cd1b7b0bdf868482de062b3c21c3\"\u003e\u003ccode\u003e0ce509e\u003c/code\u003e\u003c/a\u003e Added the wheel info subcommand (\u003ca href=\"https://redirect.github.com/pypa/wheel/issues/669\"\u003e#669\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/wheel/commit/39039c0f3446c1ed5ec52621e98bc2bad8178a06\"\u003e\u003ccode\u003e39039c0\u003c/code\u003e\u003c/a\u003e Improved the index page\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/wheel/compare/0.46.3...0.47.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hatchling` from 1.27.0 to 1.29.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/hatch/releases\"\u003ehatchling's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eHatchling v1.29.0\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e\u003cstrong\u003eFixed:\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSource Date Epoch no longer fails when set to date before 1980.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eHatchling v1.28.0\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e\u003cstrong\u003eChanged:\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDrop support for Python 3.9\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cem\u003e\u003cstrong\u003eAdded:\u003c/strong\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003esbom-files\u003c/code\u003e option and \u003ccode\u003esbom_files\u003c/code\u003e build data to the \u003ccode\u003ewheel\u003c/code\u003e build target for including Software Bill of Materials files.\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/pypa/hatch/commit/1a74daa6f554e2ec89f2641288e44ed39e5507cc\"\u003e\u003ccode\u003e1a74daa\u003c/code\u003e\u003c/a\u003e Noqa release command to unblock GHA for PRs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/78065f4c54ff16b72e92158f3547d61e420a93f7\"\u003e\u003ccode\u003e78065f4\u003c/code\u003e\u003c/a\u003e For Immutable Releases  (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2188\"\u003e#2188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/592c0a9c8cbd3e1b5d90cab57af5c17d7484037d\"\u003e\u003ccode\u003e592c0a9\u003c/code\u003e\u003c/a\u003e release Hatchling v1.29.0 (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2186\"\u003e#2186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/874059b82d06320d2e15ef909fbdc186a88bcdcc\"\u003e\u003ccode\u003e874059b\u003c/code\u003e\u003c/a\u003e Prerelease doc updates. (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2183\"\u003e#2183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/0e31bb64ec76afe9736500cafb6984ddc9c4de6d\"\u003e\u003ccode\u003e0e31bb6\u003c/code\u003e\u003c/a\u003e Immutable releases ci (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2182\"\u003e#2182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/f400be159bbd7c016ba5dc591a43753b193eadab\"\u003e\u003ccode\u003ef400be1\u003c/code\u003e\u003c/a\u003e Support a SOURCE_DATE_EPOCH prior to 1980 (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/1999\"\u003e#1999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/47b55ce0a9907302583db845c14bf5457432c80f\"\u003e\u003ccode\u003e47b55ce\u003c/code\u003e\u003c/a\u003e Fixing failing tests for changes in Rich markdown rendering (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2172\"\u003e#2172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/cc4acd668663b60e28f396c540c7acabe09f90be\"\u003e\u003ccode\u003ecc4acd6\u003c/code\u003e\u003c/a\u003e Add a note guiding users to include SBOM files in the source distribution (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2\"\u003e#2\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/9068758886e57751ff71a59520dcf576c7deea0b\"\u003e\u003ccode\u003e9068758\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2164\"\u003e#2164\u003c/a\u003e keep_env type error for hatch shell (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2165\"\u003e#2165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/hatch/commit/bc31cfccc15283a49f62024d3607c7bfad01abe0\"\u003e\u003ccode\u003ebc31cfc\u003c/code\u003e\u003c/a\u003e Fix warning and tests with packaging 26.0 (\u003ca href=\"https://redirect.github.com/pypa/hatch/issues/2159\"\u003e#2159\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/hatch/compare/hatchling-v1.27.0...hatchling-v1.29.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `types-requests` from 2.32.4.20250611 to 2.33.0.20260503\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python/typeshed/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `types-markdown` from 3.8.0.20250415 to 3.10.2.20260408\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/python/typeshed/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-book-theme` from 1.1.4 to 1.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/releases\"\u003esphinx-book-theme's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.0 -- 2026-03-09\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eJupyterlite button - patched, merged version of \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/issues/655\"\u003e#655\u003c/a\u003e by \u003ca href=\"https://github.com/matthew-brett\"\u003e\u003ccode\u003e@​matthew-brett\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/914\"\u003eexecutablebooks/sphinx-book-theme#914\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[ENH] Show source text on GitLab projects by \u003ca href=\"https://github.com/tymcauley\"\u003e\u003ccode\u003e@​tymcauley\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/916\"\u003eexecutablebooks/sphinx-book-theme#916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in docs by \u003ca href=\"https://github.com/user27182\"\u003e\u003ccode\u003e@​user27182\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/913\"\u003eexecutablebooks/sphinx-book-theme#913\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eprepare for latest pydata and python releases by \u003ca href=\"https://github.com/choldgraf\"\u003e\u003ccode\u003e@​choldgraf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/920\"\u003eexecutablebooks/sphinx-book-theme#920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore PendingDeprecationWarning about parser_name deprecation with Docutils 0.22 by \u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/919\"\u003eexecutablebooks/sphinx-book-theme#919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCI: adding cronjob by \u003ca href=\"https://github.com/bsipocz\"\u003e\u003ccode\u003e@​bsipocz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/926\"\u003eexecutablebooks/sphinx-book-theme#926\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDOC: Fix margin directive documentation by \u003ca href=\"https://github.com/melissawm\"\u003e\u003ccode\u003e@​melissawm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/930\"\u003eexecutablebooks/sphinx-book-theme#930\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMAINT: adding sphinx9 and python3.14 support and bumping minimum sphinx to 7 and python to 3.11 by \u003ca href=\"https://github.com/bsipocz\"\u003e\u003ccode\u003e@​bsipocz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/927\"\u003eexecutablebooks/sphinx-book-theme#927\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e:\n\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/compare/v1.1.4...v1.2\"\u003ehttps://github.com/executablebooks/sphinx-book-theme/compare/v1.1.4...v1.2\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/executablebooks/sphinx-book-theme/blob/main/CHANGELOG.md\"\u003esphinx-book-theme's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.0 -- 2026-03-09\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eJupyterlite button - patched, merged version of \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/issues/655\"\u003e#655\u003c/a\u003e by \u003ca href=\"https://github.com/matthew-brett\"\u003e\u003ccode\u003e@​matthew-brett\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/914\"\u003eexecutablebooks/sphinx-book-theme#914\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[ENH] Show source text on GitLab projects by \u003ca href=\"https://github.com/tymcauley\"\u003e\u003ccode\u003e@​tymcauley\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/916\"\u003eexecutablebooks/sphinx-book-theme#916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in docs by \u003ca href=\"https://github.com/user27182\"\u003e\u003ccode\u003e@​user27182\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/913\"\u003eexecutablebooks/sphinx-book-theme#913\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eprepare for latest pydata and python releases by \u003ca href=\"https://github.com/choldgraf\"\u003e\u003ccode\u003e@​choldgraf\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/920\"\u003eexecutablebooks/sphinx-book-theme#920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore PendingDeprecationWarning about parser_name deprecation with Docutils 0.22 by \u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/919\"\u003eexecutablebooks/sphinx-book-theme#919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCI: adding cronjob by \u003ca href=\"https://github.com/bsipocz\"\u003e\u003ccode\u003e@​bsipocz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/926\"\u003eexecutablebooks/sphinx-book-theme#926\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDOC: Fix margin directive documentation by \u003ca href=\"https://github.com/melissawm\"\u003e\u003ccode\u003e@​melissawm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/930\"\u003eexecutablebooks/sphinx-book-theme#930\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMAINT: adding sphinx9 and python3.14 support and bumping minimum sphinx to 7 and python to 3.11 by \u003ca href=\"https://github.com/bsipocz\"\u003e\u003ccode\u003e@​bsipocz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/927\"\u003eexecutablebooks/sphinx-book-theme#927\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e:\n\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/compare/v1.1.4...v1.2\"\u003ehttps://github.com/executablebooks/sphinx-book-theme/compare/v1.1.4...v1.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.1.2 -- 2024-02-13\u003c/h2\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/compare/v1.1.1...3da24da74f6042599fe6c9e2d612f5cbdef42280\"\u003efull changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eENH: bump version \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/818\"\u003e#818\u003c/a\u003e (\u003ca href=\"https://github.com/agoose77\"\u003e\u003ccode\u003e@​agoose77\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBugs fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: correct event-handler signature \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/817\"\u003e#817\u003c/a\u003e (\u003ca href=\"https://github.com/agoose77\"\u003e\u003ccode\u003e@​agoose77\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors to this release\u003c/h3\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/graphs/contributors?from=2024-02-13\u0026amp;to=2024-02-13\u0026amp;type=c\"\u003eGitHub contributors page for this release\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/search?q=repo%3Aexecutablebooks%2Fsphinx-book-theme+involves%3Aagoose77+updated%3A2024-02-13..2024-02-13\u0026amp;type=Issues\"\u003e\u003ccode\u003e@​agoose77\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.1.1 -- 2024-02-13\u003c/h2\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/compare/v1.1.0...9335ab99b0bc77b826cb2c5afcef3432f14e8780\"\u003efull changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eENH: bump version for 1.1.1 \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/815\"\u003e#815\u003c/a\u003e (\u003ca href=\"https://github.com/agoose77\"\u003e\u003ccode\u003e@​agoose77\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBugs fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFIX: use \u003ccode\u003econfig-inited\u003c/code\u003e event to register config \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/814\"\u003e#814\u003c/a\u003e (\u003ca href=\"https://github.com/agoose77\"\u003e\u003ccode\u003e@​agoose77\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther merged PRs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuild(deps): Bump actions/setup-python from 4 to 5 \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/803\"\u003e#803\u003c/a\u003e (\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/pull/801\"\u003e#801\u003c/a\u003e (\u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\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/executablebooks/sphinx-book-theme/commit/30f968ff990ef25ab5f38ff0dd26a10add814512\"\u003e\u003ccode\u003e30f968f\u003c/code\u003e\u003c/a\u003e Release v1.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/b78d24f6105cc91c41f18b3bf8f2e2a54c6c1f95\"\u003e\u003ccode\u003eb78d24f\u003c/code\u003e\u003c/a\u003e Finalizing changelog for v1.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/0415925b138a66229afb10c475663ea76d8dd480\"\u003e\u003ccode\u003e0415925\u003c/code\u003e\u003c/a\u003e MAINT: ignore bots in release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/5797d88ca3e42188c9eaf163c4680a6af67a1f13\"\u003e\u003ccode\u003e5797d88\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/executablebooks/sphinx-book-theme/issues/927\"\u003e#927\u003c/a\u003e from bsipocz/MAINT_sphinx_dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/f23d0946c74520fa3a9f358f33f612bc19668d79\"\u003e\u003ccode\u003ef23d094\u003c/code\u003e\u003c/a\u003e CI: Adding workaround for autodoc typehint parsing issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/8747e975f96c001a299b2a773fe2c8accac76ffe\"\u003e\u003ccode\u003e8747e97\u003c/code\u003e\u003c/a\u003e MAINT: dropping sphinx\u0026lt;7 and python\u0026lt;3.11 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/ffac4dee8755ff8cfd6ae1130a7e70e94ad0fa99\"\u003e\u003ccode\u003effac4de\u003c/code\u003e\u003c/a\u003e MAINT: using python 3.12 for RTD\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/cb587276c919c90787b87d56292c3e53ac607d8a\"\u003e\u003ccode\u003ecb58727\u003c/code\u003e\u003c/a\u003e MAINT: min pin for ablog due to sphinx9 incompatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/8cc45e4ef5e0d474869355e4240bd4d65b24dff0\"\u003e\u003ccode\u003e8cc45e4\u003c/code\u003e\u003c/a\u003e CI: ignore linkchecking URLs where anchors throw 403\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/commit/d521920234ab145a573b2398777e4c022df36340\"\u003e\u003ccode\u003ed521920\u003c/code\u003e\u003c/a\u003e MAINT: adding sphinx9 and python 3.14 to testing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/executablebooks/sphinx-book-theme/compare/v1.1.4...v1.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinx-autoapi` from 3.6.0 to 3.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/releases\"\u003esphinx-autoapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.8.0\u003c/h2\u003e\n\u003ch1\u003eFeatures\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAutodoc-style directives can access members excluded by autoapi_options\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eMisc\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/553\"\u003e#553\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.7.0\u003c/h2\u003e\n\u003ch1\u003eFeatures\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdded autoapi.import warning for when AutoAPI directives are given non-existent objects\u003c/li\u003e\n\u003cli\u003eAdding autoapi_follow_symlinks, which allows api to traverse into symlinked directories when generating the API documentation.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 and officially support Python 3.14\u003c/li\u003e\n\u003cli\u003eSupport rendering PEP-695 type parameters\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eBugfixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eRender typing_extensions.TypeAlias like other type aliases (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/520\"\u003e#520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix PythonFunction.overloads typing when source code overload(s) do not provide a return type (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/523\"\u003e#523\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eMisc\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings raised by astroid and sphinx\u003c/li\u003e\n\u003cli\u003eHandling case where match returns None to fix mypy unit test.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.6.1\u003c/h2\u003e\n\u003ch1\u003eBugfixes\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the supported versions of astroid. Fix the breaking change to Import and pass in the AstroidManager to the AstroidBuilder (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/536\"\u003e#536\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/readthedocs/sphinx-autoapi/blob/main/CHANGELOG.rst\"\u003esphinx-autoapi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.8.0 (2026-03-07)\u003c/h2\u003e\n\u003cp\u003eFeatures\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAutodoc-style directives can access members excluded by autoapi_options\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMisc\n^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/553\"\u003e#553\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.7.0 (2026-02-10)\u003c/h2\u003e\n\u003cp\u003eFeatures\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded autoapi.import warning for when AutoAPI directives are given non-existent objects\u003c/li\u003e\n\u003cli\u003eAdding \u003ccode\u003eautoapi_follow_symlinks\u003c/code\u003e, which allows api to traverse into symlinked directories when generating the API documentation.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9 and officially support Python 3.14\u003c/li\u003e\n\u003cli\u003eSupport rendering PEP-695 type parameters\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eBugfixes\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRender typing_extensions.TypeAlias like other type aliases (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/520\"\u003e#520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ePythonFunction.overloads\u003c/code\u003e typing when source code overload(s) do not provide a return type (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/523\"\u003e#523\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMisc\n^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix deprecation warnings raised by astroid and sphinx\u003c/li\u003e\n\u003cli\u003eHandling case where match returns None to fix mypy unit test.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.6.1 (2025-10-06)\u003c/h2\u003e\n\u003cp\u003eBugfixes\n^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate the supported versions of astroid.\nFix the breaking change to Import and pass in the AstroidManager to the AstroidBuilder (\u003ca href=\"https://redirect.github.com/readthedocs/sphinx-autoapi/issues/536\"\u003e#536\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/readthedocs/sphinx-autoapi/commit/75cbffdea08771a0c574814053359b28dc7dfe85\"\u003e\u003ccode\u003e75cbffd\u003c/code\u003e\u003c/a\u003e Version 3.8.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/7838cf6937000a84ca8cb13a7d76e03b0084a7f3\"\u003e\u003ccode\u003e7838cf6\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/f1cdd302336455bee67a6dbc9ea2742fad17a756\"\u003e\u003ccode\u003ef1cdd30\u003c/code\u003e\u003c/a\u003e Attempt to fix macos-latest build\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/34bb24ccc9de3be61c63a9c8b38458d06ea11eb3\"\u003e\u003ccode\u003e34bb24c\u003c/code\u003e\u003c/a\u003e Autodoc-style directives can access members excluded by autoapi_options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/ccb2e898cb8b3becf04eba76f5449e29d336215e\"\u003e\u003ccode\u003eccb2e89\u003c/code\u003e\u003c/a\u003e astroid requirement is consistent across all versions of Python\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/0917ed2d4a42fa4ddd3668247d10ca6d902d7ada\"\u003e\u003ccode\u003e0917ed2\u003c/code\u003e\u003c/a\u003e Version 3.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/394beb453256c9c15a30cb5851682fed2a844fc4\"\u003e\u003ccode\u003e394beb4\u003c/code\u003e\u003c/a\u003e Add warning for missing import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/96cd74d1a015a05bf4409a73b173dcdf8421902a\"\u003e\u003ccode\u003e96cd74d\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/c248b85d66c233a4673c64944bdeeb394be5116a\"\u003e\u003ccode\u003ec248b85\u003c/code\u003e\u003c/a\u003e Render typing_extensions.TypeAlias like other type aliases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/commit/a2f49c9689ba76d5518c33fb509c57b5141342df\"\u003e\u003ccode\u003ea2f49c9\u003c/code\u003e\u003c/a\u003e Fix deprecation warnings raised by astroid and sphinx\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/readthedocs/sphinx-autoapi/compare/v3.6.0...v3.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sphinxcontrib-mermaid` from 2.0.1 to 2.0.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/blob/master/CHANGELOG.md\"\u003esphinxcontrib-mermaid's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003eUnreleased\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003emermaid_dark_theme\u003c/code\u003e and \u003ccode\u003emermaid_light_theme\u003c/code\u003e config options for configurable theme switching\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/mgaitan/sphinxcontrib-mermaid/commit/19be46820247ed7b9ac333d4bde2e1e3445ca431\"\u003e\u003ccode\u003e19be468\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/240\"\u003e#240\u003c/a\u003e from timkpaine/tkp/hatch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/e1f9eccc13395df8e7beba0b942389bf0e95b4ac\"\u003e\u003ccode\u003ee1f9ecc\u003c/code\u003e\u003c/a\u003e Switch to hatchling\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/42aa20a010f0d4b2b86352ae1a10c6d3cd1f6cb7\"\u003e\u003ccode\u003e42aa20a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/239\"\u003e#239\u003c/a\u003e from timkpaine/tkp/202\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/2db5b555ff3fde025be5bbab2729457760f49210\"\u003e\u003ccode\u003e2db5b55\u003c/code\u003e\u003c/a\u003e bump to 2.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/25c7ef7b8ff75001ad0e475ffb2d60a21eb13b42\"\u003e\u003ccode\u003e25c7ef7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/237\"\u003e#237\u003c/a\u003e from kartben/local_paths\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/e98c6f8b8869b9f47a9ce206bf33bed0c1b60065\"\u003e\u003ccode\u003ee98c6f8\u003c/code\u003e\u003c/a\u003e increase test coverage for _use_local options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/1422b452a55017407e9688c912b93b25ee95bcec\"\u003e\u003ccode\u003e1422b45\u003c/code\u003e\u003c/a\u003e Resolve local Mermaid/ELK/ZenUML/D3 JS paths under html_static_path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/d6d874c4fbded7b7b7d86c26f0d39c7e70a55a1e\"\u003e\u003ccode\u003ed6d874c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/mgaitan/sphinxcontrib-mermaid/issues/236\"\u003e#236\u003c/a\u003e from jensens/configurable-theme\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/bce597640b897ff4ab03cc6d77a2eb1a7d26f0d5\"\u003e\u003ccode\u003ebce5976\u003c/code\u003e\u003c/a\u003e Document mermaid_dark_theme and mermaid_light_theme config options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/commit/12bb2ac696a1e0ea9ec5b183bab0bc50216c7970\"\u003e\u003ccode\u003e12bb2ac\u003c/code\u003e\u003c/a\u003e Add mermaid_dark_theme and mermaid_light_theme config options\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mgaitan/sphinxcontrib-mermaid/compare/2.0.1...2.0.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown` from 3.8.2 to 3.10.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Python-Markdown/markdown/releases\"\u003emarkdown's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease 3.10.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix a regression related to comment handling (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1590\"\u003e#1590\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMore reliable fix for \u003ccode\u003e\u0026lt;/\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1593\"\u003e#1593\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.10.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure nested elements inside inline comments are properly unescaped (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1571\"\u003e#1571\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMake the docs build successfully with mkdocstrings-python 2.0 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1575\"\u003e#1575\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix infinite loop when multiple bogus or unclosed HTML comments appear in input (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1578\"\u003e#1578\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix another infinite loop when handling bad comments (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1586\"\u003e#1586\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.10.0\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOfficially support Python 3.14 and PyPy 3.11 and drop support for Python 3.9\nand PyPy 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix an HTML comment parsing case in some Python versions that can cause an\ninfinite loop (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1554\"\u003e#1554\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRevert the default behavior of \u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e (to \u003ccode\u003eTrue\u003c/code\u003e). The new\nbehavior introduced in 3.9.0 is experimental and results are inconsistent.\nIt should not have been made the default behavior (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1561\"\u003e#1561\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease 3.9.0\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFootnotes are now ordered by the occurrence of their references in the\ndocument. A new configuration option for the footnotes extension,\n\u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e, has been added to support restoring the previous\nbehavior of ordering footnotes by the occurrence of definitions (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1367\"\u003e#1367\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure inline processing iterates through elements in document order (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1546\"\u003e#1546\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix handling of incomplete HTML tags in code spans in Python 3.14 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1547\"\u003e#1547\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/Python-Markdown/markdown/blob/master/docs/changelog.md\"\u003emarkdown's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[3.10.2] - 2026-02-09\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix a regression related to comment handling (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1590\"\u003e#1590\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMore reliable fix for \u003ccode\u003e\u0026lt;/\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1593\"\u003e#1593\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.10.1] - 2026-01-21\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure nested elements inside inline comments are properly unescaped (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1571\"\u003e#1571\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMake the docs build successfully with mkdocstrings-python 2.0 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1575\"\u003e#1575\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix infinite loop when multiple bogus or unclosed HTML comments appear in input (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1578\"\u003e#1578\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix another infinite loop when handling bad comments (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1586\"\u003e#1586\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.10.0] - 2025-11-03\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOfficially support Python 3.14 and PyPy 3.11 and drop support for Python 3.9\nand PyPy 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix an HTML comment parsing case in some Python versions that can cause an\ninfinite loop (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1554\"\u003e#1554\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRevert the default behavior of \u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e (to \u003ccode\u003eTrue\u003c/code\u003e). The new\nbehavior introduced in 3.9.0 is experimental and results are inconsistent.\nIt should not have been made the default behavior (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1561\"\u003e#1561\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[3.9.0] - 2025-09-04\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFootnotes are now ordered by the occurrence of their references in the\ndocument. A new configuration option for the footnotes extension,\n\u003ccode\u003eUSE_DEFINITION_ORDER\u003c/code\u003e, has been added to support restoring the previous\nbehavior of ordering footnotes by the occurrence of definitions (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1367\"\u003e#1367\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure inline processing iterates through elements in document order (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1546\"\u003e#1546\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFix handling of incomplete HTML tags in code spans in Python 3.14 (\u003ca href=\"https://redirect.github.com/Python-Markdown/markdown/issues/1547\"\u003e#1547\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/Python-Markdown/markdown/commit/e7a0efb3a7c36d6b8005403122705662bc17c904\"\u003e\u003ccode\u003ee7a0efb\u003c/code\u003e\u003c/a\u003e Bump version to 3.10.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/630183336bda57c258becc3ed229105481876a7e\"\u003e\u003ccode\u003e6301833\u003c/code\u003e\u003c/a\u003e Document HTML sanitation policy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/7f29f1a69d236f5bb11645c2fa03fcf701487c8c\"\u003e\u003ccode\u003e7f29f1a\u003c/code\u003e\u003c/a\u003e More reliable fix for \u003ccode\u003e\u0026lt;/\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/c4386475a6b6daea43b7d7717add4271adc9a3c1\"\u003e\u003ccode\u003ec438647\u003c/code\u003e\u003c/a\u003e Fix regression of special comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/e5fa5b86e8ec380cbc520cfc637d72c779e5c601\"\u003e\u003ccode\u003ee5fa5b8\u003c/code\u003e\u003c/a\u003e Bump version to 3.10.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/f9253495f5d9919f2fdd5e147832b5fc21330f65\"\u003e\u003ccode\u003ef925349\u003c/code\u003e\u003c/a\u003e More HTML fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/9933a0a4699f3dea91f46528a2bf54863f531c08\"\u003e\u003ccode\u003e9933a0a\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Allow reference links with backticks\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/07dfa4eb43f7a2ab3181b4f842a960a03a6c1221\"\u003e\u003ccode\u003e07dfa4e\u003c/code\u003e\u003c/a\u003e Allow reference links with backticks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/fb6b27a6ff90980b5bcb0cd51528a7c9dc3a93ca\"\u003e\u003ccode\u003efb6b27a\u003c/code\u003e\u003c/a\u003e Fix infinite loop when text contains multiple unclosed comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Python-Markdown/markdown/commit/89112c293f7b399ae8808f3a06306f46601e9684\"\u003e\u003ccode\u003e89112c2\u003c/code\u003e\u003c/a\u003e Make the docs build successfully with mkdocstrings-python 2.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Python-Markdown/markdown/compare/3.8.2...3.10.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `orjson` from 3.10.18 to 3.11.8\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ijl/orjson/releases\"\u003eorjson's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.11.8\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuild and compatibility improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.7\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse a faster library to serialize \u003ccode\u003efloat\u003c/code\u003e. Users with byte-exact regression\ntests should note positive exponents are now written using a \u003ccode\u003e+\u003c/code\u003e, e.g.,\n\u003ccode\u003e1.2e+30\u003c/code\u003e instead of \u003ccode\u003e1.2e30\u003c/code\u003e. Both formats are spec-compliant.\u003c/li\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 5 free-threading.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.6\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eorjson now includes code licensed under the Mozilla Public License 2.0 (MPL-2.0).\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 5.\u003c/li\u003e\n\u003cli\u003eBuild now depends on Rust 1.89 or later instead of 1.85.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix sporadic crash serializing deeply nested \u003ccode\u003elist\u003c/code\u003e of \u003ccode\u003edict\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.5\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShow simple error message instead of traceback when attempting to\nbuild on unsupported Python versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.4\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 1.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for 3.14 and manylinux i686, manylinux arm7,\nmanylinux ppc64le, manylinux s390x.\u003c/li\u003e\n\u003cli\u003eBuild now requires a C compiler.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.3\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix PyPI project metadata when using maturin 1.9.2 or later.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.2\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix build using Rust 1.89 on amd64.\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/ijl/orjson/blob/master/CHANGELOG.md\"\u003eorjson's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.11.8 - 2026-03-31\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBuild and compatibility improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.7 - 2026-02-02\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse a faster library to serialize \u003ccode\u003efloat\u003c/code\u003e. Users with byte-exact regression\ntests should note positive exponents are now written using a \u003ccode\u003e+\u003c/code\u003e, e.g.,\n\u003ccode\u003e1.2e+30\u003c/code\u003e instead of \u003ccode\u003e1.2e30\u003c/code\u003e. Both formats are spec-compliant.\u003c/li\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 5 free-threading.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.6 - 2026-01-29\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eorjson now includes code licensed under the Mozilla Public License 2.0 (MPL-2.0).\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 5.\u003c/li\u003e\n\u003cli\u003eBuild now depends on Rust 1.89 or later instead of 1.85.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix sporadic crash serializing deeply nested \u003ccode\u003elist\u003c/code\u003e of \u003ccode\u003edict\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.5 - 2025-12-06\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eShow simple error message instead of traceback when attempting to\nbuild on unsupported Python versions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.4 - 2025-10-24\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eABI compatibility with CPython 3.15 alpha 1.\u003c/li\u003e\n\u003cli\u003ePublish PyPI wheels for 3.14 and manylinux i686, manylinux arm7,\nmanylinux ppc64le, manylinux s390x.\u003c/li\u003e\n\u003cli\u003eBuild now requires a C compiler.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.3 - 2025-08-26\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/ijl/orjson/commit/5cbb3d0398a2f42de51210270286fecd798c5d78\"\u003e\u003ccode\u003e5cbb3d0\u003c/code\u003e\u003c/a\u003e 3.11.8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/4195d7f263e33076295b75efdcbaf6a55af8674e\"\u003e\u003ccode\u003e4195d7f\u003c/code\u003e\u003c/a\u003e writer::half\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/d00641b69410728a735f0855eb1c2843b0a5819b\"\u003e\u003ccode\u003ed00641b\u003c/code\u003e\u003c/a\u003e writer::uuid\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/c84d9b4ba4853781af943fa5c493e261e2f82b84\"\u003e\u003ccode\u003ec84d9b4\u003c/code\u003e\u003c/a\u003e build and compatibility misc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/4547234b681fac5e0e0734cf44c21e75f9654e43\"\u003e\u003ccode\u003e4547234\u003c/code\u003e\u003c/a\u003e ffi::numpy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/0d4a5ad1f17a72528ba027554466fdec6580cdeb\"\u003e\u003ccode\u003e0d4a5ad\u003c/code\u003e\u003c/a\u003e datetime PyRef idiom\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/e93a13d372ec956d027e71d023eb534b8445ac85\"\u003e\u003ccode\u003ee93a13d\u003c/code\u003e\u003c/a\u003e Cross-compile avoids maturin v1.12 build-details.json error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/ec2b066cae79ae4a90ed126ac5723335dd99e408\"\u003e\u003ccode\u003eec2b066\u003c/code\u003e\u003c/a\u003e 3.11.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/1ca01f78cf4198ec37407d83713afa6e5c53dbf9\"\u003e\u003ccode\u003e1ca01f7\u003c/code\u003e\u003c/a\u003e zmij\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/1716a226bd1f38db01503f30cd37b0efec48d88e\"\u003e\u003ccode\u003e1716a22\u003c/code\u003e\u003c/a\u003e cargo update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ijl/orjson/compare/3.10.18...3.11.8\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.14.0 to 4.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003cp\u003eNew features since 4.14.1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.14.1\u003c/h2\u003e\n\u003ch1\u003eRelease 4.14.1 (July 4, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix usage of \u003ccode\u003etyping_extensions.TypedDict\u003c/code\u003e nested inside other types\n(e.g., \u003ccode\u003etyping.Type[typing_extensions.TypedDict]\u003c/code\u003e). This is not allowed by the\ntype system but worked on older versions, so we maintain support.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.15.0 (August 25, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003ch1\u003eRelease 4.15.0rc1 (August 18, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.14.1 (July 4, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix usage of \u003ccode\u003etyping_extensions.TypedDict\u003c/code\u003e nested inside other types\n(e.g., \u003ccode\u003etyping.Type[typing_extensions.TypedDict]\u003c/code\u003e). This is not allowed by the\ntype system but worked on older versions, so we maintain support.\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/typing_extensions/commit/9d1637e264b5c1a6b7acee3e907015f89b20c2c9\"\u003e\u003ccode\u003e9d1637e\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4bd67c5be5d9443c7d33c314d02a56ee125eb88d\"\u003e\u003ccode\u003e4bd67c5\u003c/code\u003e\u003c/a\u003e Coverage: exclude some noise (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e589a26da73b075c5276bae40b86db1af0144f84\"\u003e\u003ccode\u003ee589a26\u003c/code\u003e\u003c/a\u003e Coverage: add detailed report to job summary (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/67d37fed1298e050f74d5acc95b2621bd37837ad\"\u003e\u003ccode\u003e67d37fe\u003c/code\u003e\u003c/a\u003e Coverage: Implement fail_under (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e9ae26f5286edee9262727755ecb9ad16e999192\"\u003e\u003ccode\u003ee9ae26f\u003c/code\u003e\u003c/a\u003e Don't delete previous coverage comment (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/ac80bb728a3006fc88ef7373b92f0c25cfcc7895\"\u003e\u003ccode\u003eac80bb7\u003c/code\u003e\u003c/a\u003e Add Coverage workflow (\u003ca href=\"https://redirect.git...\n\n_Description has been truncated_","html_url":"https://github.com/ankitects/anki/pull/4829","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankitects%2Fanki/issues/4829","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4829/packages"}},{"old_version":"4.14.1","new_version":"4.15.0","update_type":"minor","path":"/backend","pr_created_at":"2026-05-12T00:19:03.000Z","version_change":"4.14.1 → 4.15.0","issue":{"uuid":"4425229344","node_id":"PR_kwDOPa2xds7aeRAd","number":115,"state":"closed","title":"chore(deps): bump the minor-patch group in /backend with 15 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-17T05:29:14.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-12T00:19:03.000Z","updated_at":"2026-05-17T05:29:16.000Z","time_to_close":450611,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"minor-patch","update_count":15,"packages":[{"name":"anyio","old_version":"4.9.0","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"click","old_version":"8.1.8","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"idna","old_version":"3.10","new_version":"3.14","repository_url":"https://github.com/kjd/idna"},{"name":"pydantic-settings","old_version":"2.8.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"typing-extensions","old_version":"4.14.1","new_version":"4.15.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"uvicorn","old_version":"0.45.0","new_version":"0.46.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"psycopg2-binary","old_version":"2.9.10","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.28","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"webauthn","old_version":"2.5.2","new_version":"2.7.1","repository_url":"https://github.com/duo-labs/py_webauthn"},{"name":"google-auth","old_version":"2.45.0","new_version":"2.52.0","repository_url":"https://github.com/googleapis/google-auth-library-python"},{"name":"requests","old_version":"2.33.0","new_version":"2.34.0","repository_url":"https://github.com/psf/requests"},{"name":"beautifulsoup4","old_version":"4.12.3","new_version":"4.14.3"},{"name":"boto3","old_version":"1.42.91","new_version":"1.43.6","repository_url":"https://github.com/boto/boto3"},{"name":"boto3-stubs","old_version":"1.42.91","new_version":"1.43.6","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"moto","old_version":"5.1.22","new_version":"5.2.1","repository_url":"https://github.com/getmoto/moto"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps the minor-patch group in /backend with 15 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.9.0` | `4.13.0` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.3.3` |\n| [idna](https://github.com/kjd/idna) | `3.10` | `3.14` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.8.1` | `2.14.1` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.14.1` | `4.15.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.45.0` | `0.46.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.10` | `2.9.12` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.28` |\n| [webauthn](https://github.com/duo-labs/py_webauthn) | `2.5.2` | `2.7.1` |\n| [google-auth](https://github.com/googleapis/google-auth-library-python) | `2.45.0` | `2.52.0` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.0` |\n| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) | `4.12.3` | `4.14.3` |\n| [boto3](https://github.com/boto/boto3) | `1.42.91` | `1.43.6` |\n| [boto3-stubs](https://github.com/youtype/mypy_boto3_builder) | `1.42.91` | `1.43.6` |\n| [moto](https://github.com/getmoto/moto) | `5.1.22` | `5.2.1` |\n\nUpdates `anyio` from 4.9.0 to 4.13.0\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.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003ettl\u003c/code\u003e parameter to the \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e wrapper (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1073\"\u003e#1073\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWidened the type annotations of file I/O streams to accept \u003ccode\u003eIO[bytes]\u003c/code\u003e instead of just \u003ccode\u003eBinaryIO\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.Path\u003c/code\u003e not being compatible with Python 3.15 due to the removal of \u003ccode\u003epathlib.Path.is_reserved()\u003c/code\u003e and the addition of \u003ccode\u003epathlib.Path.__vfspath__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1061\"\u003e#1061\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eBrokenResourceError\u003c/code\u003e raised by the asyncio \u003ccode\u003eSocketStream\u003c/code\u003e not having the original exception as its cause (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1055\"\u003e#1055\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eTypeError\u003c/code\u003e raised when using \u0026quot;func\u0026quot; as a parameter name in \u003ccode\u003epytest.mark.parametrize\u003c/code\u003e when using the pytest plugin (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1068\"\u003e#1068\u003c/a\u003e; PR by \u003ca href=\"https://github.com/JohnnyDeuss\"\u003e\u003ccode\u003e@​JohnnyDeuss\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the pytest plugin not running tests that had the \u003ccode\u003eanyio\u003c/code\u003e marker added programmatically via \u003ccode\u003epytest_collection_modifyitems\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/422\"\u003e#422\u003c/a\u003e; PR by \u003ca href=\"https://github.com/chbndrhnns\"\u003e\u003ccode\u003e@​chbndrhnns\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when they are contained in an exception group alongside non-cancellation exceptions (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1091\"\u003e#1091\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCondition.wait()\u003c/code\u003e not passing on a notification when the task is cancelled but already received a notification\u003c/li\u003e\n\u003cli\u003eFixed inverted condition in the process pool shutdown phase which would cause still-running pooled processes not to be terminated (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1074\"\u003e#1074\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged all functions currently raising the private \u003ccode\u003eNoCurrentAsyncBackend\u003c/code\u003e exception (since v4.12.0) to instead raise the public \u003ccode\u003eNoEventLoopError\u003c/code\u003e exception (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1048\"\u003e#1048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e not working with instance methods (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1042\"\u003e#1042\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for asyncio's \u003ca href=\"https://docs.python.org/3/library/asyncio-graph.html\"\u003etask call graphs\u003c/a\u003e on Python 3.14 and later when using AnyIO's task groups (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1025\"\u003e#1025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded an asynchronous implementation of the \u003ccode\u003efunctools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1001\"\u003e#1001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003euvloop=True\u003c/code\u003e on Windows via the \u003ca href=\"https://github.com/Vizonex/Winloop\"\u003ewinloop\u003c/a\u003e implementation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/960\"\u003e#960\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for use as a context manager to \u003ccode\u003eanyio.lowlevel.RunVar\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1003\"\u003e#1003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003e__all__\u003c/code\u003e declarations to public submodules (\u003ccode\u003eanyio.lowlevel\u003c/code\u003e etc.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1009\"\u003e#1009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the ability to set the token count of a \u003ccode\u003eCapacityLimiter\u003c/code\u003e to zero (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1019\"\u003e#1019\u003c/a\u003e; requires Python 3.10 or later when using Trio)\u003c/li\u003e\n\u003cli\u003eAdded parameters \u003ccode\u003ecase_sensitive\u003c/code\u003e and \u003ccode\u003erecurse_symlinks\u003c/code\u003e along with support for path-like objects to \u003ccode\u003eanyio.Path.glob()\u003c/code\u003e and \u003ccode\u003eanyio.Path.rglob()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1033\"\u003e#1033\u003c/a\u003e; PR by \u003ca href=\"https://github.com/northisup\"\u003e\u003ccode\u003e@​northisup\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped \u003ccode\u003esniffio\u003c/code\u003e as a direct dependency and added the \u003ccode\u003eget_available_backends()\u003c/code\u003e function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1021\"\u003e#1021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not raising \u003ccode\u003eClosedResourceError\u003c/code\u003e and \u003ccode\u003eBrokenResourceError\u003c/code\u003e on asyncio. Previously, a non-AnyIO exception was raised in such cases (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not checkpointing before writing data on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1002\"\u003e#1002\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a race condition where cancelling a \u003ccode\u003eFuture\u003c/code\u003e from \u003ccode\u003eBlockingPortal.start_task_soon()\u003c/code\u003e would sometimes not cancel the async function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1011\"\u003e#1011\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the presence of the pytest plugin causing breakage with older versions of pytest (\u0026lt;= 6.1.2) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1028\"\u003e#1028\u003c/a\u003e; PR by \u003ca href=\"https://github.com/saper\"\u003e\u003ccode\u003e@​saper\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a rarely occurring \u003ccode\u003eRuntimeError: Set changed size during iteration\u003c/code\u003e while shutting down the process pool when using the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/985\"\u003e#985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for cancellation reasons (the \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003eCancelScope.cancel()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum version of Trio to v0.31.0\u003c/li\u003e\n\u003cli\u003eAdded the ability to enter the event loop from foreign (non-worker) threads by passing the return value of \u003ccode\u003eanyio.lowlevel.current_token()\u003c/code\u003e to \u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e and \u003ccode\u003eanyio.from_thread.run_sync()\u003c/code\u003e as the \u003ccode\u003etoken\u003c/code\u003e keyword argument (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded pytest option (\u003ccode\u003eanyio_mode = \u0026quot;auto\u0026quot;\u003c/code\u003e) to make the pytest plugin automatically handle all async tests (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the \u003ccode\u003eanyio.Condition.wait_for()\u003c/code\u003e method for feature parity with asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the default type argument of \u003ccode\u003eanyio.abc.TaskStatus\u003c/code\u003e from \u003ccode\u003eAny\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/964\"\u003e#964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed TCP listener behavior to guarantee the same ephemeral port is used for all socket listeners when \u003ccode\u003elocal_port=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/857\"\u003e#857\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed inconsistency between Trio and asyncio where a TCP stream that previously raised a \u003ccode\u003eBrokenResourceError\u003c/code\u003e on \u003ccode\u003esend()\u003c/code\u003e would still raise \u003ccode\u003eBrokenResourceError\u003c/code\u003e after the stream was closed on asyncio, but \u003ccode\u003eClosedResourceError\u003c/code\u003e on Trio. They now both raise a \u003ccode\u003eClosedResourceError\u003c/code\u003e in this scenario. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.10.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003efeed_data()\u003c/code\u003e method to the \u003ccode\u003eBufferedByteReceiveStream\u003c/code\u003e class, allowing users to inject data directly into the buffer\u003c/li\u003e\n\u003cli\u003eAdded various class methods to wrap existing sockets as listeners or socket streams:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSocketListener.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eConnectedUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXDatagramSocket.from_socket()\u003c/code\u003e\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/agronholm/anyio/commit/afbe93ca9d0c447adf26e9c1715ac20870622bf2\"\u003e\u003ccode\u003eafbe93c\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/33bdf2e4b4f40c2df178123746147a6d2471808d\"\u003e\u003ccode\u003e33bdf2e\u003c/code\u003e\u003c/a\u003e Rearranged the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/19e09e25bc5a23dd78a577d8c3909dd377057c78\"\u003e\u003ccode\u003e19e09e2\u003c/code\u003e\u003c/a\u003e Fixed inverted condition in _forcibly_shutdown_process_pool_on_exit (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9369d80b9e8292f2a892a9d5c73923c6a28aa08c\"\u003e\u003ccode\u003e9369d80\u003c/code\u003e\u003c/a\u003e Fixed Condition.wait() not handing over notification when cancelled\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f122abdc6f6b166c6b6ac27d36d55cdf8fa08e8\"\u003e\u003ccode\u003e6f122ab\u003c/code\u003e\u003c/a\u003e Fixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/beaa45aff568a4020f2faf317321dd92f0e1f4a0\"\u003e\u003ccode\u003ebeaa45a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1097\"\u003e#1097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/602f6606dcf3f37702686a4f3e161328c537b07f\"\u003e\u003ccode\u003e602f660\u003c/code\u003e\u003c/a\u003e Widened type annotations to accept IO[bytes] in file streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b5dcd45170701a756ba634197398f05d4710cab3\"\u003e\u003ccode\u003eb5dcd45\u003c/code\u003e\u003c/a\u003e Added note about erasing the template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d68670b3b4e0917d4caff2de082e03220f3e05a1\"\u003e\u003ccode\u003ed68670b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/fc17a22dd948e6a3d90d99908813f0010dfc3d2c\"\u003e\u003ccode\u003efc17a22\u003c/code\u003e\u003c/a\u003e tweak to_thread docs about abandon_on_cancel (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1088\"\u003e#1088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.9.0...4.13.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.1.8 to 8.3.3\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.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 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.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3262\"\u003e#3262\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3280\"\u003e#3280\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3111\"\u003e#3111\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3189\"\u003e#3189\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3250\"\u003e#3250\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2865\"\u003e#2865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2879\"\u003e#2879\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.3.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.2 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.3.2/\"\u003ehttps://pypi.org/project/click/8.3.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/29\"\u003ehttps://github.com/pallets/click/milestone/29\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.3.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-20\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n:issue:\u003ccode\u003e1026\u003c/code\u003e :pr:\u003ccode\u003e1477\u003c/code\u003e :pr:\u003ccode\u003e2775\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. :issue:\u003ccode\u003e3298\u003c/code\u003e :pr:\u003ccode\u003e3299\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. :pr:\u003ccode\u003e3238\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n:issue:\u003ccode\u003e3224\u003c/code\u003e :pr:\u003ccode\u003e3240\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n:issue:\u003ccode\u003e654\u003c/code\u003e :issue:\u003ccode\u003e824\u003c/code\u003e :issue:\u003ccode\u003e843\u003c/code\u003e :pr:\u003ccode\u003e951\u003c/code\u003e :pr:\u003ccode\u003e3235\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. :pr:\u003ccode\u003e3151\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. :pr:\u003ccode\u003e3151\u003c/code\u003e :pr:\u003ccode\u003e3177\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. :issue:\u003ccode\u003e2836\u003c/code\u003e :pr:\u003ccode\u003e2837\u003c/code\u003e :pr:\u003ccode\u003e3165\u003c/code\u003e :pr:\u003ccode\u003e3262\u003c/code\u003e :pr:\u003ccode\u003e3280\u003c/code\u003e\n:pr:\u003ccode\u003e3328\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. :issue:\u003ccode\u003e3111\u003c/code\u003e :pr:\u003ccode\u003e3239\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. :issue:\u003ccode\u003e3189\u003c/code\u003e :pr:\u003ccode\u003e3250\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n:issue:\u003ccode\u003e2865\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. :issue:\u003ccode\u003e2879\u003c/code\u003e :pr:\u003ccode\u003e3248\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.3.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. :issue:\u003ccode\u003e3084\u003c/code\u003e :pr:\u003ccode\u003e3152\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n:issue:\u003ccode\u003e3136\u003c/code\u003e :pr:\u003ccode\u003e3199\u003c/code\u003e :pr:\u003ccode\u003e3202\u003c/code\u003e :pr:\u003ccode\u003e3209\u003c/code\u003e :pr:\u003ccode\u003e3212\u003c/code\u003e :pr:\u003ccode\u003e3224\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/pallets/click/commit/c06d2d0a6aee6bcc50bd8257be2a4a592f4e75d0\"\u003e\u003ccode\u003ec06d2d0\u003c/code\u003e\u003c/a\u003e Release 8.3.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f1f191ecd2c790b161187c78e7c88440e9524e5c\"\u003e\u003ccode\u003ef1f191e\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3343\"\u003e#3343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bb59ba0fd279ca085d1113f0499b6a602ca31081\"\u003e\u003ccode\u003ebb59ba0\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/4a352253c9ff013e36d11e4a6820d36d00ff2cd4\"\u003e\u003ccode\u003e4a35225\u003c/code\u003e\u003c/a\u003e Reduce blast-radius of \u003ccode\u003eUNSET\u003c/code\u003e in \u003ccode\u003edefault_map\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c07bb936de43fd303f9cfbefe248ab23fd2199c8\"\u003e\u003ccode\u003ec07bb93\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into unset-in-default-map\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c7e1ba8448cbcb2cdd9c1c7f4a592e863dcc3995\"\u003e\u003ccode\u003ec7e1ba8\u003c/code\u003e\u003c/a\u003e Reorder \u003ccode\u003eParameterSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/76552ff1e8c85837f911fc34037e702ae4327eda\"\u003e\u003ccode\u003e76552ff\u003c/code\u003e\u003c/a\u003e Show default string in prompt (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/ac5cec5fe54e5a691e7bac17f441ce9498e0744c\"\u003e\u003ccode\u003eac5cec5\u003c/code\u003e\u003c/a\u003e Reorder ParameterSource from most to least explicit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c452e00e6772931b7071d9316b82b77e5b8f280\"\u003e\u003ccode\u003e8c452e0\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into show-default-string-in-prompt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c95c73bd5ef89eac638f85f1904a104ba4b1a32\"\u003e\u003ccode\u003e8c95c73\u003c/code\u003e\u003c/a\u003e Reconcile default value passing and default activation (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.1.8...8.3.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.10 to 3.14\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.rst\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e3.14 (2026-05-10)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved opportunity to process long inputs into quadratic\ntime by rejecting oversize inputs up-front. Closes a bypass\nof the CVE-2024-3651 mitigation. [GHSA-65pc-fj4g-8rjx]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003cp\u003e3.13 (2026-04-22)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e3.12 (2026-04-21)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003cp\u003e3.11 (2025-10-12)\n+++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 16.0.0, including significant changes to UTS46\nprocessing. As a result of Unicode ending support for it, transitional\nprocessing no longer has an effect and returns the same result.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14, lowest supported version is Python 3.8.\u003c/li\u003e\n\u003cli\u003eVarious updates to packaging, including PEP 740 support.\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/kjd/idna/commit/37b6b7497aee4805f7a74a7d86206ac05be9669a\"\u003e\u003ccode\u003e37b6b74\u003c/code\u003e\u003c/a\u003e Release v3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/628fef84d3eda59321c21127e73dcd873db23ead\"\u003e\u003ccode\u003e628fef8\u003c/code\u003e\u003c/a\u003e Use valid_string_length() for early oversized-input check\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1e26c7fd93c67995422af9d1f071f45ee6433fd0\"\u003e\u003ccode\u003e1e26c7f\u003c/code\u003e\u003c/a\u003e Tweak release wording\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/ab5668fb6eaf4254d91d6993c0b23e98e21202fb\"\u003e\u003ccode\u003eab5668f\u003c/code\u003e\u003c/a\u003e Pre-release 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c0dda4501df5d91c3181ce6f962dc5de74e82cc1\"\u003e\u003ccode\u003ec0dda45\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/b7391f4c240bf2eae80eaed0a2ef7c2e0496af96\"\u003e\u003ccode\u003eb7391f4\u003c/code\u003e\u003c/a\u003e Add docstrings to package (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/226\"\u003e#226\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0f4a28d88f8cce54269f0b6a42edf5e6a5424319\"\u003e\u003ccode\u003e0f4a28d\u003c/code\u003e\u003c/a\u003e Raise IDNAError on non-string input to encode/decode (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/224\"\u003e#224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7e6df7196e6396b5b84b9530eab8272b5ad51898\"\u003e\u003ccode\u003e7e6df71\u003c/code\u003e\u003c/a\u003e Address type issues found by \u003ccode\u003ety\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/kjd/idna/issues/225\"\u003e#225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/6ebfaab9ea718dce38a7c17ddafd7fb28b0468d4\"\u003e\u003ccode\u003e6ebfaab\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/221\"\u003e#221\u003c/a\u003e from kjd/release-3.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/89cdfd27338896cee6b1ee18e64c96ac28684ce0\"\u003e\u003ccode\u003e89cdfd2\u003c/code\u003e\u003c/a\u003e Release v3.13\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.10...v3.14\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.8.1 to 2.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/850\"\u003epydantic/pydantic-settings#850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 5 updates 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/pydantic/pydantic-settings/pull/854\"\u003epydantic/pydantic-settings#854\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 3 updates 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/pydantic/pydantic-settings/pull/853\"\u003epydantic/pydantic-settings#853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates 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/pydantic/pydantic-settings/pull/856\"\u003epydantic/pydantic-settings#856\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/858\"\u003epydantic/pydantic-settings#858\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.1 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/859\"\u003epydantic/pydantic-settings#859\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-settings/compare/v2.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.14.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix parsing env vars into Optional Strict types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/792\"\u003epydantic/pydantic-settings#792\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix RecursionError with mutually recursive models in CLI by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/794\"\u003epydantic/pydantic-settings#794\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix env_file from model_config ignored in CliApp.run() (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/795\"\u003e#795\u003c/a\u003e) by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/796\"\u003epydantic/pydantic-settings#796\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/798\"\u003epydantic/pydantic-settings#798\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/801\"\u003epydantic/pydantic-settings#801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump samuelcolvin/check-python-version from 4.1 to 5 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/pydantic/pydantic-settings/pull/802\"\u003epydantic/pydantic-settings#802\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/upload-artifact from 4 to 7 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/pydantic/pydantic-settings/pull/803\"\u003epydantic/pydantic-settings#803\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 4 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/pydantic/pydantic-settings/pull/804\"\u003epydantic/pydantic-settings#804\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump astral-sh/setup-uv from 5 to 7 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/pydantic/pydantic-settings/pull/805\"\u003epydantic/pydantic-settings#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/setup-python 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/pydantic/pydantic-settings/pull/806\"\u003epydantic/pydantic-settings#806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore chardet and group GitHub Actions in Dependabot by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/808\"\u003epydantic/pydantic-settings#808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/download-artifact from 4 to 8 in the github-actions group 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/pydantic/pydantic-settings/pull/809\"\u003epydantic/pydantic-settings#809\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates 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/pydantic/pydantic-settings/pull/810\"\u003epydantic/pydantic-settings#810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport reading .env files from FIFOs (e.g. 1Password Environments) by \u003ca href=\"https://github.com/JacobHayes\"\u003e\u003ccode\u003e@​JacobHayes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/776\"\u003epydantic/pydantic-settings#776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix AliasChoices ignored when changing provider priority by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/813\"\u003epydantic/pydantic-settings#813\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve KeyError in run_subcommand for underscore field names by \u003ca href=\"https://github.com/bradykieffer\"\u003e\u003ccode\u003e@​bradykieffer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/799\"\u003epydantic/pydantic-settings#799\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/814\"\u003epydantic/pydantic-settings#814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLiteral[numeric Enum]\u003c/code\u003e coercion for CLI and env vars by \u003ca href=\"https://github.com/m9810223\"\u003e\u003ccode\u003e@​m9810223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/811\"\u003epydantic/pydantic-settings#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix nested discriminated unions not discovered by env/CLI providers by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/816\"\u003epydantic/pydantic-settings#816\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/820\"\u003epydantic/pydantic-settings#820\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCLI ensure env nested max split internally. by \u003ca href=\"https://github.com/kschwab\"\u003e\u003ccode\u003e@​kschwab\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/821\"\u003epydantic/pydantic-settings#821\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/824\"\u003epydantic/pydantic-settings#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eboto3-stubs\u003c/code\u003e to \u003ccode\u003etypes-boto3\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/831\"\u003epydantic/pydantic-settings#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI not recognizing field name with validate_by_name and AliasChoices by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/826\"\u003epydantic/pydantic-settings#826\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow customisation of the dotevn setting source to filter variables by \u003ca href=\"https://github.com/CaselIT\"\u003e\u003ccode\u003e@​CaselIT\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/832\"\u003epydantic/pydantic-settings#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 3 updates 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/pydantic/pydantic-settings/pull/833\"\u003epydantic/pydantic-settings#833\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce yamlfmt 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-settings/pull/836\"\u003epydantic/pydantic-settings#836\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump boto3 from 1.42.82 to 1.42.83 in the python-packages group 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/pydantic/pydantic-settings/pull/837\"\u003epydantic/pydantic-settings#837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIntroduce zizmor 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-settings/pull/838\"\u003epydantic/pydantic-settings#838\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CliPositionalArg[list[CustomType]] crash for custom types by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/839\"\u003epydantic/pydantic-settings#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd note about Mypy plugin for \u003ccode\u003eBaseSettings.__init__()\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-settings/pull/842\"\u003epydantic/pydantic-settings#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/844\"\u003epydantic/pydantic-settings#844\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 4 updates 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/pydantic/pydantic-settings/pull/847\"\u003epydantic/pydantic-settings#847\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to \u003ccode\u003ejson_schema_extra\u003c/code\u003e by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/843\"\u003epydantic/pydantic-settings#843\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.0 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/848\"\u003epydantic/pydantic-settings#848\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/pydantic/pydantic-settings/commit/e95c30bec8cfaee88ee275138c064aea97a25bdf\"\u003e\u003ccode\u003ee95c30b\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/859\"\u003e#859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/0c8734581b6cf70a995afad603ac456631d00621\"\u003e\u003ccode\u003e0c87345\u003c/code\u003e\u003c/a\u003e Fix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/858\"\u003e#858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/7bd0072795a800065b42210b6dca90fc9b83daf7\"\u003e\u003ccode\u003e7bd0072\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 2 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/856\"\u003e#856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/b03e573d017ed48e1c2774a5e0b715db9766c76b\"\u003e\u003ccode\u003eb03e573\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/853\"\u003e#853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/eaa3b434938411ec8a3717ea646614561e713f51\"\u003e\u003ccode\u003eeaa3b43\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 5 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/854\"\u003e#854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9f95615c24c6813c1d7d203576581a79cb6d9e8e\"\u003e\u003ccode\u003e9f95615\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/850\"\u003e#850\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3\"\u003e\u003ccode\u003e8916bee\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/848\"\u003e#848\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5\"\u003e\u003ccode\u003e39e551c\u003c/code\u003e\u003c/a\u003e Fix CLI descriptions lost under \u003ccode\u003epython -OO\u003c/code\u003e by falling back to `json_schema_...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14\"\u003e\u003ccode\u003e9ed7f48\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/847\"\u003e#847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9\"\u003e\u003ccode\u003e617c690\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ecli_ignore_unknown_args=True\u003c/code\u003e not working on subcommands (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/844\"\u003e#844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.8.1...v2.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `typing-extensions` from 4.14.1 to 4.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.15.0\u003c/h2\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003cp\u003eNew features since 4.14.1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.15.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.15.0 (August 25, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.15.0rc1.\u003c/p\u003e\n\u003ch1\u003eRelease 4.15.0rc1 (August 18, 2025)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd the \u003ccode\u003e@typing_extensions.disjoint_base\u003c/code\u003e decorator, as specified\nin PEP 800. Patch by Jelle Zijlstra.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etyping_extensions.type_repr\u003c/code\u003e, a backport of\n\u003ca href=\"https://docs.python.org/3.14/library/annotationlib.html#annotationlib.type_repr\"\u003e\u003ccode\u003eannotationlib.type_repr\u003c/code\u003e\u003c/a\u003e,\nintroduced in Python 3.14 (CPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/124551\"\u003e#124551\u003c/a\u003e,\noriginally by Jelle Zijlstra). Patch by Semyon Moroz.\u003c/li\u003e\n\u003cli\u003eFix behavior of type params in \u003ccode\u003etyping_extensions.evaluate_forward_ref\u003c/code\u003e. Backport of\nCPython PR \u003ca href=\"https://redirect.github.com/python/cpython/pull/137227\"\u003e#137227\u003c/a\u003e by Jelle Zijlstra.\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/typing_extensions/commit/9d1637e264b5c1a6b7acee3e907015f89b20c2c9\"\u003e\u003ccode\u003e9d1637e\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/658\"\u003e#658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/4bd67c5be5d9443c7d33c314d02a56ee125eb88d\"\u003e\u003ccode\u003e4bd67c5\u003c/code\u003e\u003c/a\u003e Coverage: exclude some noise (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/656\"\u003e#656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e589a26da73b075c5276bae40b86db1af0144f84\"\u003e\u003ccode\u003ee589a26\u003c/code\u003e\u003c/a\u003e Coverage: add detailed report to job summary (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/655\"\u003e#655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/67d37fed1298e050f74d5acc95b2621bd37837ad\"\u003e\u003ccode\u003e67d37fe\u003c/code\u003e\u003c/a\u003e Coverage: Implement fail_under (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/654\"\u003e#654\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/e9ae26f5286edee9262727755ecb9ad16e999192\"\u003e\u003ccode\u003ee9ae26f\u003c/code\u003e\u003c/a\u003e Don't delete previous coverage comment (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/653\"\u003e#653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/ac80bb728a3006fc88ef7373b92f0c25cfcc7895\"\u003e\u003ccode\u003eac80bb7\u003c/code\u003e\u003c/a\u003e Add Coverage workflow (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/623\"\u003e#623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/abaaafd98c1cc7e5baf098ec287a3d22cb339670\"\u003e\u003ccode\u003eabaaafd\u003c/code\u003e\u003c/a\u003e Prepare release 4.15.0rc1 (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/98104053ea8d49bcdd247804e5fa9f73136acbd4\"\u003e\u003ccode\u003e9810405\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e@disjoint_base\u003c/code\u003e (PEP 800) (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/634\"\u003e#634\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/7ee9e05fd484d06899ce56e80f5e1aa4c760fc03\"\u003e\u003ccode\u003e7ee9e05\u003c/code\u003e\u003c/a\u003e Backport type_params fix from CPython (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/646\"\u003e#646\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/typing_extensions/commit/1e8eb9c06ef51b3a1e1f05303a16feca13f5ed98\"\u003e\u003ccode\u003e1e8eb9c\u003c/code\u003e\u003c/a\u003e Do not refer to PEP 705 as being experimental (\u003ca href=\"https://redirect.github.com/python/typing_extensions/issues/648\"\u003e#648\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/typing_extensions/compare/4.14.1...4.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.45.0 to 0.46.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.46.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2915\"\u003eKludex/uvicorn#2915\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation 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/2916\"\u003eKludex/uvicorn#2916\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer 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/2917\"\u003eKludex/uvicorn#2917\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.45.0...0.46.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.45.0...0.46.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/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.46.0 (April 23, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2916\"\u003e#2916\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2917\"\u003e#2917\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/b224045f5900b7f766743bcb16ba9fc3adea2606\"\u003e\u003ccode\u003eb224045\u003c/code\u003e\u003c/a\u003e Version 0.46.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2918\"\u003e#2918\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/7375b5bf66d962186d663e85615d4b4d956bf880\"\u003e\u003ccode\u003e7375b5b\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ebytearray\u003c/code\u003e for incoming WebSocket message buffer in websockets-sansio (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/d438fb16fe2d23c7bbc2ca7094645cff1f116458\"\u003e\u003ccode\u003ed438fb1\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_ping_interval\u003c/code\u003e and \u003ccode\u003ews_ping_timeout\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3e6b96446653d0156434bce529a14c80764c9eda\"\u003e\u003ccode\u003e3e6b964\u003c/code\u003e\u003c/a\u003e Support \u003ccode\u003ews_max_size\u003c/code\u003e in \u003ccode\u003ewsproto\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2915\"\u003e#2915\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `psycopg2-binary` from 2.9.10 to 2.9.12\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psycopg/psycopg2/blob/master/NEWS\"\u003epsycopg2-binary's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eCurrent release\u003c/h2\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.12\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix infinite loop with malformed interval (:ticket:\u003ccode\u003e1835\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.11\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eAvoid a segfault passing more arguments than placeholders if Python is built\nwith assertions enabled (:ticket:\u003ccode\u003e[#1791](https://github.com/psycopg/psycopg2/issues/1791)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eAdd riscv64 platform binary packages (:ticket:\u003ccode\u003e[#1813](https://github.com/psycopg/psycopg2/issues/1813)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 18.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.10\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.13.\u003c/li\u003e\n\u003cli\u003eReceive notifications on commit (:ticket:\u003ccode\u003e[#1728](https://github.com/psycopg/psycopg2/issues/1728)\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e~psycopg2.errorcodes\u003c/code\u003e map and \u003ccode\u003e~psycopg2.errors\u003c/code\u003e classes updated to\nPostgreSQL 17.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.7.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.9\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for Python 3.12.\u003c/li\u003e\n\u003cli\u003eDrop support for Python 3.6.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWheel package bundled with PostgreSQL 16 libpq in order to add support for\nrecent features, such as \u003ccode\u003esslcertmode\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhat's new in psycopg 2.9.7\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix propagation of exceptions raised during module initialization\n(:ticket:\u003ccode\u003e[#1598](https://github.com/psycopg/psycopg2/issues/1598)\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/psycopg/psycopg2/commit/3a6d9d6ddc6b53eaa80b712f5fa6b23abbdc38db\"\u003e\u003ccode\u003e3a6d9d6\u003c/code\u003e\u003c/a\u003e ci: include almalinux in whieel building\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/ebca6bf0f86bc6cbdc86de1eb3a53eaf49966d86\"\u003e\u003ccode\u003eebca6bf\u003c/code\u003e\u003c/a\u003e chore: bump to version 3.9.12\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/0196f02cc9512df8de3c941f87d27bda98f9f7af\"\u003e\u003ccode\u003e0196f02\u003c/code\u003e\u003c/a\u003e build(deps): bump pypa/cibuildwheel from 3.3.1 to 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d157bdc2235a42dc1742936dbb0f5cfc8e4d2eb7\"\u003e\u003ccode\u003ed157bdc\u003c/code\u003e\u003c/a\u003e build(deps): bump docker/setup-qemu-action from 3 to 4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/7fccc0f5066a40dea530512abbf02621f4182b81\"\u003e\u003ccode\u003e7fccc0f\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/upload-artifact from 6 to 7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/d52a61eb2e6095fc1b9891bfcca44ebfac509e55\"\u003e\u003ccode\u003ed52a61e\u003c/code\u003e\u003c/a\u003e chore: bump dependency libraries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/b231d726a01d55e07ec3620b2b82f4a2da37ba62\"\u003e\u003ccode\u003eb231d72\u003c/code\u003e\u003c/a\u003e chore: fix building binary images\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/6d76e8479f0f522c2e07ce0e2701030d8fd63785\"\u003e\u003ccode\u003e6d76e84\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/psycopg/psycopg2/issues/1836\"\u003e#1836\u003c/a\u003e from psycopg/fix-1835\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/f7e314c7ab418ab9b9956e694956089a49c5c3b9\"\u003e\u003ccode\u003ef7e314c\u003c/code\u003e\u003c/a\u003e fix: overflow in malformed interval\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psycopg/psycopg2/commit/eb905c124b75f2a5183d22177b85af20914b0f17\"\u003e\u003ccode\u003eeb905c1\u003c/code\u003e\u003c/a\u003e docs: replace bare except clause with except Exception\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psycopg/psycopg2/compare/2.9.10...2.9.12\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.27 to 0.0.28\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.28\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\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/python-multipart/pull/281\"\u003eKludex/python-multipart#281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes 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/python-multipart/pull/282\"\u003eKludex/python-multipart#282\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/python-multipart/compare/0.0.27...0.0.28\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28\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/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.28 (2026-05-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/281\"\u003e#281\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCap multipart boundary length at 256 bytes \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/282\"\u003e#282\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/python-multipart/commit/7d8d28b210ac6cb055399562b0dc0e5cf9aef14a\"\u003e\u003ccode\u003e7d8d28b\u003c/code\u003e\u003c/a\u003e Version 0.0.28 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/284\"\u003e#284\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b0dd125457d0f98de23bf2f894aedb1a54639d4e\"\u003e\u003ccode\u003eb0dd125\u003c/code\u003e\u003c/a\u003e Cap multipart boundary length at 256 bytes (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/282\"\u003e#282\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/d1b57392cf7d0c19235ba454eb5686fd27dc2384\"\u003e\u003ccode\u003ed1b5739\u003c/code\u003e\u003c/a\u003e Speed up partial-boundary tail scan via \u003ccode\u003ebytes.find\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/281\"\u003e#281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/09cb8c3da7638d45ecdf7c154832303214bba829\"\u003e\u003ccode\u003e09cb8c3\u003c/code\u003e\u003c/a\u003e Make the long_boundary benchmark dominated by the patched code path (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/280\"\u003e#280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/a6467c93c14aa4b09ef65450ead8011c45e5c7a0\"\u003e\u003ccode\u003ea6467c9\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Switch CodSpeed benchmarks to walltime mode\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/279\"\u003e#279\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/9a9690035a956fbdcca06f98461244cf790375a7\"\u003e\u003ccode\u003e9a96900\u003c/code\u003e\u003c/a\u003e Switch CodSpeed benchmarks to walltime mode (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/278\"\u003e#278\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/1fc7a626f566ae11bc63165260262b9a30af9008\"\u003e\u003ccode\u003e1fc7a62\u003c/code\u003e\u003c/a\u003e Make benchmark coverage trigger the partial-boundary fallback (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/277\"\u003e#277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/03df045810a216dceabbefc9dca7a33a264307bc\"\u003e\u003ccode\u003e03df045\u003c/code\u003e\u003c/a\u003e Add CodSpeed benchmark suite for parser hot paths (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/276\"\u003e#276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/79a7c614953d0c91a1d6dc69759b4fbcd0fb44f3\"\u003e\u003ccode\u003e79a7c61\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/273\"\u003e#273\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/bd29332f23429d06cf16226819f89b28a8288915\"\u003e\u003ccode\u003ebd29332\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 5 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/274\"\u003e#274\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.27...0.0.28\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `webauthn` from 2.5.2 to 2.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/duo-labs/py_webauthn/releases\"\u003ewebauthn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis project now uses the \u003ca href=\"https://github.com/pyasn1/pyasn1/\"\u003epyasn1\u003c/a\u003e library to parse ASN.1-encoded values (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/263\"\u003e#263\u003c/a\u003e, h/t \u003ca href=\"https://github.com/ggirol-rc\"\u003e\u003ccode\u003e@​ggirol-rc\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSome bare \u003ccode\u003edict\u003c/code\u003e type annotations have been replaced with \u003ccode\u003eDict[str, Any]\u003c/code\u003e to satisfy stricter type checking setups (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/262\"\u003e#262\u003c/a\u003e, h/t \u003ca href=\"https://github.com/typestring\"\u003e\u003ccode\u003e@​typestring\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper has a new, optional \u003ccode\u003ebytes_encoder\u003c/code\u003e argument that accepts a \u003ccode\u003eCallable[[bytes], Any]\u003c/code\u003e method. This enables the use of custom encoding logic when serializing \u003ccode\u003ebytes\u003c/code\u003e values. When this argument is unspecified, \u003ccode\u003ebytes\u003c/code\u003e values will continue to be encoded into Base64URL (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.6.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe new \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper can be used to simplify registration and authentication options into a simple \u003ccode\u003eDict[str, Any]\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.5.3\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMore X.509 validation exceptions will include the cause of the exception as reported by the third-party library handling the validation (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/255\"\u003e#255\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/duo-labs/py_webauthn/blob/master/CHANGELOG.md\"\u003ewebauthn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThis project now uses the \u003ca href=\"https://github.com/pyasn1/pyasn1/\"\u003epyasn1\u003c/a\u003e library to parse ASN.1-encoded values (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/263\"\u003e#263\u003c/a\u003e, h/t \u003ca href=\"https://github.com/ggirol-rc\"\u003e\u003ccode\u003e@​ggirol-rc\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSome bare \u003ccode\u003edict\u003c/code\u003e type annotations have been replaced with \u003ccode\u003eDict[str, Any]\u003c/code\u003e to satisfy stricter type checking setups (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/262\"\u003e#262\u003c/a\u003e, h/t \u003ca href=\"https://github.com/typestring\"\u003e\u003ccode\u003e@​typestring\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper has a new, optional \u003ccode\u003ebytes_encoder\u003c/code\u003e argument that accepts a \u003ccode\u003eCallable[[bytes], Any]\u003c/code\u003e method. This enables the use of custom encoding logic when serializing \u003ccode\u003ebytes\u003c/code\u003e values. When this argument is unspecified, \u003ccode\u003ebytes\u003c/code\u003e values will continue to be encoded into Base64URL (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.6.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe new \u003ccode\u003ewebauthn.helpers.options_to_json_dict\u003c/code\u003e helper can be used to simplify registration and authentication options into a simple \u003ccode\u003eDict[str, Any]\u003c/code\u003e value (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.5.3\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eChanges:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMore X.509 validation exceptions will include the cause of the exception as reported by the third-party library handling the validation (\u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/pull/255\"\u003e#255\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/duo-labs/py_webauthn/commit/91afa1f64390b165fa83651709fb5160a4545100\"\u003e\u003ccode\u003e91afa1f\u003c/code\u003e\u003c/a\u003e Update CHANGELOG for v2.7.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/6ea6638ef63c978e8afc9a40edfdaa8c92232635\"\u003e\u003ccode\u003e6ea6638\u003c/code\u003e\u003c/a\u003e Bump version to v2.7.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/6e6d9b34dfb39ac1f8b008c4bb827f9d06fdf616\"\u003e\u003ccode\u003e6e6d9b3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/issues/264\"\u003e#264\u003c/a\u003e from duo-labs/revert-pqc-alpha-work\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/2be3e050e5eff825743206251a2ea3fafd19c63f\"\u003e\u003ccode\u003e2be3e05\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Add ML-DSA unit tests\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/a82574640ab8fffd3709c078391b26af2d9f84c2\"\u003e\u003ccode\u003ea825746\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Update CHANGELOG for v2.8.0-alpha1\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/953b65a44ca9f139dd49ded67c8922775ef36b8f\"\u003e\u003ccode\u003e953b65a\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Bump version to v2.8.0-alpha1\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/8ebe1b281f639335bd8437c845a48c09526ed3fe\"\u003e\u003ccode\u003e8ebe1b2\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;Merge pull request \u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/issues/260\"\u003e#260\u003c/a\u003e from duo-labs/mm/pqc-dilithium-alpha\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/0424e376f07e011535e10ce09a7c225780b0403b\"\u003e\u003ccode\u003e0424e37\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/issues/263\"\u003e#263\u003c/a\u003e from ggirol-rc/pyasn1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/bfdebf41a355394828679a32b6c8f400aa896533\"\u003e\u003ccode\u003ebfdebf4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/duo-labs/py_webauthn/issues/262\"\u003e#262\u003c/a\u003e from typestring/dict-type-hints\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duo-labs/py_webauthn/commit/a768cd8b71363d7c46f32ec7601d95cd2b53b66a\"\u003e\u003ccode\u003ea768cd8\u003c/code\u003e\u003c/a\u003e move from unmaintained asn1crypto to pyasn1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/duo-labs/py_webauthn/compare/v2.5.2...v2.7.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-auth` from 2.45.0 to 2.52.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-auth-library-python/releases\"\u003egoogle-...\n\n_Description has been truncated_","html_url":"https://github.com/WebbPulse/CarModPicker/pull/115","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/WebbPulse%2FCarModPicker/issues/115","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/115/packages"}},{"old_version":"4.13.1","new_version":"4.15.0","update_type":"minor","path":null,"pr_created_at":"2026-05-08T21:42:28.000Z","version_change":"4.13.1 → 4.15.0","issue":{"uuid":"4409576139","node_id":"PR_kwDONrwnDc7ZslCF","number":581,"state":"closed","title":"chore(deps): bump the production group across 1 directory with 52 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":5,"pull_request":true,"closed_at":"2026-05-29T23:35:55.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-08T21:42:28.000Z","updated_at":"2026-05-29T23:35:57.000Z","time_to_close":1821207,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"production","update_count":52,"packages":[{"name":"anyio","old_version":"4.9.0","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"build","old_version":"1.2.2.post1","new_version":"1.5.0","repository_url":"https://github.com/pypa/build"},{"name":"certifi","old_version":"2025.1.31","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"charset-normalizer","old_version":"3.4.1","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.1.8","new_version":"8.3.3","repository_url":"https://github.com/pallets/click"},{"name":"cryptography","old_version":"46.0.7","new_version":"48.0.0","repository_url":"https://github.com/pyca/cryptography"},{"name":"dnspython","old_version":"2.7.0","new_version":"2.8.0","repository_url":"https://github.com/rthalley/dnspython"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"exceptiongroup","old_version":"1.2.2","new_version":"1.3.1","repository_url":"https://github.com/agronholm/exceptiongroup"},{"name":"fastapi","old_version":"0.120.3","new_version":"0.136.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"fastapi-cli","old_version":"0.0.7","new_version":"0.0.24","repository_url":"https://github.com/fastapi/fastapi-cli"},{"name":"fastapi-keycloak-middleware","old_version":"1.2.0","new_version":"1.6.0"},{"name":"greenlet","old_version":"3.1.1","new_version":"3.5.0","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"httptools","old_version":"0.6.4","new_version":"0.7.1","repository_url":"https://github.com/MagicStack/httptools"},{"name":"idna","old_version":"3.10","new_version":"3.13","repository_url":"https://github.com/kjd/idna"},{"name":"iniconfig","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/pytest-dev/iniconfig"},{"name":"jwcrypto","old_version":"1.5.6","new_version":"1.5.7","repository_url":"https://github.com/latchset/jwcrypto"},{"name":"markdown-it-py","old_version":"3.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"packaging","old_version":"24.2","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pluggy","old_version":"1.5.0","new_version":"1.6.0","repository_url":"https://github.com/pytest-dev/pluggy"},{"name":"psycopg2-binary","old_version":"2.9.10","new_version":"2.9.12","repository_url":"https://github.com/psycopg/psycopg2"},{"name":"pycparser","old_version":"2.22","new_version":"3.0","repository_url":"https://github.com/eliben/pycparser"},{"name":"pydantic","old_version":"2.11.2","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-core","old_version":"2.33.1","new_version":"2.46.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pytest-asyncio","old_version":"0.15.1","new_version":"1.3.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"python-multipart","old_version":"0.0.26","new_version":"0.0.27","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"pyyaml","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/yaml/pyyaml"},{"name":"requests","old_version":"2.33.0","new_version":"2.33.1","repository_url":"https://github.com/psf/requests"},{"name":"rfc3986","old_version":"1.5.0","new_version":"2.0.0","repository_url":"https://github.com/python-hyper/rfc3986"},{"name":"rich","old_version":"14.0.0","new_version":"15.0.0","repository_url":"https://github.com/Textualize/rich"},{"name":"rich-toolkit","old_version":"0.14.1","new_version":"0.19.7"},{"name":"sqlalchemy","old_version":"2.0.40","new_version":"2.0.49","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"sqlmodel","old_version":"0.0.22","new_version":"0.0.38","repository_url":"https://github.com/fastapi/sqlmodel"},{"name":"starlette","old_version":"0.49.1","new_version":"1.0.0","repository_url":"https://github.com/Kludex/starlette"},{"name":"tomli","old_version":"2.0.1","new_version":"2.4.1","repository_url":"https://github.com/hukkin/tomli"},{"name":"typer","old_version":"0.15.2","new_version":"0.25.1","repository_url":"https://github.com/fastapi/typer"},{"name":"typing-extensions","old_version":"4.13.1","new_version":"4.15.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.30.6","new_version":"0.46.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"uvloop","old_version":"0.21.0","new_version":"0.22.1","repository_url":"https://github.com/MagicStack/uvloop"},{"name":"watchfiles","old_version":"1.0.4","new_version":"1.1.1","repository_url":"https://github.com/samuelcolvin/watchfiles"},{"name":"websockets","old_version":"14.2","new_version":"16.0","repository_url":"https://github.com/python-websockets/websockets"},{"name":"jsonschema","old_version":"4.25.1","new_version":"4.26.0","repository_url":"https://github.com/python-jsonschema/jsonschema"},{"name":"attrs","old_version":"25.3.0","new_version":"26.1.0","repository_url":"https://github.com/python-attrs/attrs"},{"name":"cached-property","old_version":"1.5.2","new_version":"2.0.1","repository_url":"https://github.com/pydanny/cached-property"},{"name":"filelock","old_version":"3.20.3","new_version":"3.29.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"httpx","old_version":"0.26.0","new_version":"0.28.1","repository_url":"https://github.com/encode/httpx"},{"name":"python-keycloak","old_version":"4.7.3","new_version":"7.1.1","repository_url":"https://github.com/marcospereirampj/python-keycloak"},{"name":"referencing","old_version":"0.36.2","new_version":"0.37.0","repository_url":"https://github.com/python-jsonschema/referencing"},{"name":"rpds-py","old_version":"0.27.1","new_version":"0.30.0","repository_url":"https://github.com/crate-py/rpds"},{"name":"typing-inspection","old_version":"0.4.1","new_version":"0.4.2","repository_url":"https://github.com/pydantic/typing-inspection"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production group with 52 updates in the /ichub-backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.9.0` | `4.13.0` |\n| [build](https://github.com/pypa/build) | `1.2.2.post1` | `1.5.0` |\n| [certifi](https://github.com/certifi/python-certifi) | `2025.1.31` | `2026.4.22` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.1` | `3.4.7` |\n| [click](https://github.com/pallets/click) | `8.1.8` | `8.3.3` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.7` | `48.0.0` |\n| [dnspython](https://github.com/rthalley/dnspython) | `2.7.0` | `2.8.0` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [exceptiongroup](https://github.com/agronholm/exceptiongroup) | `1.2.2` | `1.3.1` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.120.3` | `0.136.1` |\n| [fastapi-cli](https://github.com/fastapi/fastapi-cli) | `0.0.7` | `0.0.24` |\n| fastapi-keycloak-middleware | `1.2.0` | `1.6.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.1.1` | `3.5.0` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.6.4` | `0.7.1` |\n| [idna](https://github.com/kjd/idna) | `3.10` | `3.13` |\n| [iniconfig](https://github.com/pytest-dev/iniconfig) | `2.1.0` | `2.3.0` |\n| [jwcrypto](https://github.com/latchset/jwcrypto) | `1.5.6` | `1.5.7` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `3.0.0` | `4.2.0` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [packaging](https://github.com/pypa/packaging) | `24.2` | `26.2` |\n| [pluggy](https://github.com/pytest-dev/pluggy) | `1.5.0` | `1.6.0` |\n| [psycopg2-binary](https://github.com/psycopg/psycopg2) | `2.9.10` | `2.9.12` |\n| [pycparser](https://github.com/eliben/pycparser) | `2.22` | `3.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.11.2` | `2.13.4` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.33.1` | `2.46.4` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.15.1` | `1.3.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.26` | `0.0.27` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.33.1` |\n| [rfc3986](https://github.com/python-hyper/rfc3986) | `1.5.0` | `2.0.0` |\n| [rich](https://github.com/Textualize/rich) | `14.0.0` | `15.0.0` |\n| rich-toolkit | `0.14.1` | `0.19.7` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.40` | `2.0.49` |\n| [sqlmodel](https://github.com/fastapi/sqlmodel) | `0.0.22` | `0.0.38` |\n| [starlette](https://github.com/Kludex/starlette) | `0.49.1` | `1.0.0` |\n| [tomli](https://github.com/hukkin/tomli) | `2.0.1` | `2.4.1` |\n| [typer](https://github.com/fastapi/typer) | `0.15.2` | `0.25.1` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.13.1` | `4.15.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.30.6` | `0.46.0` |\n| [uvloop](https://github.com/MagicStack/uvloop) | `0.21.0` | `0.22.1` |\n| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.0.4` | `1.1.1` |\n| [websockets](https://github.com/python-websockets/websockets) | `14.2` | `16.0` |\n| [jsonschema](https://github.com/python-jsonschema/jsonschema) | `4.25.1` | `4.26.0` |\n| [attrs](https://github.com/python-attrs/attrs) | `25.3.0` | `26.1.0` |\n| [cached-property](https://github.com/pydanny/cached-property) | `1.5.2` | `2.0.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.20.3` | `3.29.0` |\n| [httpx](https://github.com/encode/httpx) | `0.26.0` | `0.28.1` |\n| [python-keycloak](https://github.com/marcospereirampj/python-keycloak) | `4.7.3` | `7.1.1` |\n| [referencing](https://github.com/python-jsonschema/referencing) | `0.36.2` | `0.37.0` |\n| [rpds-py](https://github.com/crate-py/rpds) | `0.27.1` | `0.30.0` |\n| [typing-inspection](https://github.com/pydantic/typing-inspection) | `0.4.1` | `0.4.2` |\n\n\nUpdates `anyio` from 4.9.0 to 4.13.0\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.13.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003ettl\u003c/code\u003e parameter to the \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e wrapper (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1073\"\u003e#1073\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eWidened the type annotations of file I/O streams to accept \u003ccode\u003eIO[bytes]\u003c/code\u003e instead of just \u003ccode\u003eBinaryIO\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1078\"\u003e#1078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.Path\u003c/code\u003e not being compatible with Python 3.15 due to the removal of \u003ccode\u003epathlib.Path.is_reserved()\u003c/code\u003e and the addition of \u003ccode\u003epathlib.Path.__vfspath__()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1061\"\u003e#1061\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eBrokenResourceError\u003c/code\u003e raised by the asyncio \u003ccode\u003eSocketStream\u003c/code\u003e not having the original exception as its cause (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1055\"\u003e#1055\u003c/a\u003e; PR by \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the \u003ccode\u003eTypeError\u003c/code\u003e raised when using \u0026quot;func\u0026quot; as a parameter name in \u003ccode\u003epytest.mark.parametrize\u003c/code\u003e when using the pytest plugin (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1068\"\u003e#1068\u003c/a\u003e; PR by \u003ca href=\"https://github.com/JohnnyDeuss\"\u003e\u003ccode\u003e@​JohnnyDeuss\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the pytest plugin not running tests that had the \u003ccode\u003eanyio\u003c/code\u003e marker added programmatically via \u003ccode\u003epytest_collection_modifyitems\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/422\"\u003e#422\u003c/a\u003e; PR by \u003ca href=\"https://github.com/chbndrhnns\"\u003e\u003ccode\u003e@​chbndrhnns\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when they are contained in an exception group alongside non-cancellation exceptions (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1091\"\u003e#1091\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCondition.wait()\u003c/code\u003e not passing on a notification when the task is cancelled but already received a notification\u003c/li\u003e\n\u003cli\u003eFixed inverted condition in the process pool shutdown phase which would cause still-running pooled processes not to be terminated (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1074\"\u003e#1074\u003c/a\u003e; PR by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged all functions currently raising the private \u003ccode\u003eNoCurrentAsyncBackend\u003c/code\u003e exception (since v4.12.0) to instead raise the public \u003ccode\u003eNoEventLoopError\u003c/code\u003e exception (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1048\"\u003e#1048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.functools.lru_cache\u003c/code\u003e not working with instance methods (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1042\"\u003e#1042\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.12.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for asyncio's \u003ca href=\"https://docs.python.org/3/library/asyncio-graph.html\"\u003etask call graphs\u003c/a\u003e on Python 3.14 and later when using AnyIO's task groups (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1025\"\u003e#1025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded an asynchronous implementation of the \u003ccode\u003efunctools\u003c/code\u003e module (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1001\"\u003e#1001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003euvloop=True\u003c/code\u003e on Windows via the \u003ca href=\"https://github.com/Vizonex/Winloop\"\u003ewinloop\u003c/a\u003e implementation (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/960\"\u003e#960\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Vizonex\"\u003e\u003ccode\u003e@​Vizonex\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for use as a context manager to \u003ccode\u003eanyio.lowlevel.RunVar\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1003\"\u003e#1003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003e__all__\u003c/code\u003e declarations to public submodules (\u003ccode\u003eanyio.lowlevel\u003c/code\u003e etc.) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1009\"\u003e#1009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the ability to set the token count of a \u003ccode\u003eCapacityLimiter\u003c/code\u003e to zero (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1019\"\u003e#1019\u003c/a\u003e; requires Python 3.10 or later when using Trio)\u003c/li\u003e\n\u003cli\u003eAdded parameters \u003ccode\u003ecase_sensitive\u003c/code\u003e and \u003ccode\u003erecurse_symlinks\u003c/code\u003e along with support for path-like objects to \u003ccode\u003eanyio.Path.glob()\u003c/code\u003e and \u003ccode\u003eanyio.Path.rglob()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1033\"\u003e#1033\u003c/a\u003e; PR by \u003ca href=\"https://github.com/northisup\"\u003e\u003ccode\u003e@​northisup\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDropped \u003ccode\u003esniffio\u003c/code\u003e as a direct dependency and added the \u003ccode\u003eget_available_backends()\u003c/code\u003e function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1021\"\u003e#1021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not raising \u003ccode\u003eClosedResourceError\u003c/code\u003e and \u003ccode\u003eBrokenResourceError\u003c/code\u003e on asyncio. Previously, a non-AnyIO exception was raised in such cases (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcess.stdin.send()\u003c/code\u003e not checkpointing before writing data on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1002\"\u003e#1002\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a race condition where cancelling a \u003ccode\u003eFuture\u003c/code\u003e from \u003ccode\u003eBlockingPortal.start_task_soon()\u003c/code\u003e would sometimes not cancel the async function (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1011\"\u003e#1011\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gschaffner\"\u003e\u003ccode\u003e@​gschaffner\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed the presence of the pytest plugin causing breakage with older versions of pytest (\u0026lt;= 6.1.2) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1028\"\u003e#1028\u003c/a\u003e; PR by \u003ca href=\"https://github.com/saper\"\u003e\u003ccode\u003e@​saper\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a rarely occurring \u003ccode\u003eRuntimeError: Set changed size during iteration\u003c/code\u003e while shutting down the process pool when using the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/985\"\u003e#985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for cancellation reasons (the \u003ccode\u003ereason\u003c/code\u003e parameter to \u003ccode\u003eCancelScope.cancel()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/975\"\u003e#975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum version of Trio to v0.31.0\u003c/li\u003e\n\u003cli\u003eAdded the ability to enter the event loop from foreign (non-worker) threads by passing the return value of \u003ccode\u003eanyio.lowlevel.current_token()\u003c/code\u003e to \u003ccode\u003eanyio.from_thread.run()\u003c/code\u003e and \u003ccode\u003eanyio.from_thread.run_sync()\u003c/code\u003e as the \u003ccode\u003etoken\u003c/code\u003e keyword argument (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded pytest option (\u003ccode\u003eanyio_mode = \u0026quot;auto\u0026quot;\u003c/code\u003e) to make the pytest plugin automatically handle all async tests (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/971\"\u003e#971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded the \u003ccode\u003eanyio.Condition.wait_for()\u003c/code\u003e method for feature parity with asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/974\"\u003e#974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the default type argument of \u003ccode\u003eanyio.abc.TaskStatus\u003c/code\u003e from \u003ccode\u003eAny\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/964\"\u003e#964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed TCP listener behavior to guarantee the same ephemeral port is used for all socket listeners when \u003ccode\u003elocal_port=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/857\"\u003e#857\u003c/a\u003e; PR by \u003ca href=\"https://github.com/11kkw\"\u003e\u003ccode\u003e@​11kkw\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/agronholm\"\u003e\u003ccode\u003e@​agronholm\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed inconsistency between Trio and asyncio where a TCP stream that previously raised a \u003ccode\u003eBrokenResourceError\u003c/code\u003e on \u003ccode\u003esend()\u003c/code\u003e would still raise \u003ccode\u003eBrokenResourceError\u003c/code\u003e after the stream was closed on asyncio, but \u003ccode\u003eClosedResourceError\u003c/code\u003e on Trio. They now both raise a \u003ccode\u003eClosedResourceError\u003c/code\u003e in this scenario. (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/671\"\u003e#671\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.10.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded the \u003ccode\u003efeed_data()\u003c/code\u003e method to the \u003ccode\u003eBufferedByteReceiveStream\u003c/code\u003e class, allowing users to inject data directly into the buffer\u003c/li\u003e\n\u003cli\u003eAdded various class methods to wrap existing sockets as listeners or socket streams:\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSocketListener.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXSocketStream.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eConnectedUDPSocket.from_socket()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUNIXDatagramSocket.from_socket()\u003c/code\u003e\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/agronholm/anyio/commit/afbe93ca9d0c447adf26e9c1715ac20870622bf2\"\u003e\u003ccode\u003eafbe93c\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/33bdf2e4b4f40c2df178123746147a6d2471808d\"\u003e\u003ccode\u003e33bdf2e\u003c/code\u003e\u003c/a\u003e Rearranged the changelog entries\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/19e09e25bc5a23dd78a577d8c3909dd377057c78\"\u003e\u003ccode\u003e19e09e2\u003c/code\u003e\u003c/a\u003e Fixed inverted condition in _forcibly_shutdown_process_pool_on_exit (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1074\"\u003e#1074\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/9369d80b9e8292f2a892a9d5c73923c6a28aa08c\"\u003e\u003ccode\u003e9369d80\u003c/code\u003e\u003c/a\u003e Fixed Condition.wait() not handing over notification when cancelled\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f122abdc6f6b166c6b6ac27d36d55cdf8fa08e8\"\u003e\u003ccode\u003e6f122ab\u003c/code\u003e\u003c/a\u003e Fixed cancellation exceptions leaking from a \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio when th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/beaa45aff568a4020f2faf317321dd92f0e1f4a0\"\u003e\u003ccode\u003ebeaa45a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1097\"\u003e#1097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/602f6606dcf3f37702686a4f3e161328c537b07f\"\u003e\u003ccode\u003e602f660\u003c/code\u003e\u003c/a\u003e Widened type annotations to accept IO[bytes] in file streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b5dcd45170701a756ba634197398f05d4710cab3\"\u003e\u003ccode\u003eb5dcd45\u003c/code\u003e\u003c/a\u003e Added note about erasing the template\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/d68670b3b4e0917d4caff2de082e03220f3e05a1\"\u003e\u003ccode\u003ed68670b\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1090\"\u003e#1090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/fc17a22dd948e6a3d90d99908813f0010dfc3d2c\"\u003e\u003ccode\u003efc17a22\u003c/code\u003e\u003c/a\u003e tweak to_thread docs about abandon_on_cancel (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1088\"\u003e#1088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.9.0...4.13.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.2.2.post1 to 1.5.0\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.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eci: try to improve release docs 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/1051\"\u003epypa/build#1051\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: drop 3.9, require 3.10+ 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/1036\"\u003epypa/build#1036\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: tox toml 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/1033\"\u003epypa/build#1033\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: api should not ignore installed, only 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/1056\"\u003epypa/build#1056\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/build/compare/1.4.4...1.5.0\"\u003ehttps://github.com/pypa/build/compare/1.4.4...1.5.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.4.4\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(release): generate consistent CHANGELOG heading levels 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/1032\"\u003epypa/build#1032\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: move source links 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/1034\"\u003epypa/build#1034\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erevert: drop PEP 660 change 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/1039\"\u003epypa/build#1039\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: ignore installed when running pip 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/1040\"\u003epypa/build#1040\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: revert part of \u003ca href=\"https://redirect.github.com/pypa/build/issues/973\"\u003e#973\u003c/a\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/build/pull/1044\"\u003epypa/build#1044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: report coverage failure lines 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/1046\"\u003epypa/build#1046\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: fix issue with uv run 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/1048\"\u003epypa/build#1048\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: reorganize testing docs for copy/paste by \u003ca href=\"https://github.com/abitrolly\"\u003e\u003ccode\u003e@​abitrolly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1043\"\u003epypa/build#1043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: keep environment from leaking in Python 3.15 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/1049\"\u003epypa/build#1049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix issue with changelog generation 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/1050\"\u003epypa/build#1050\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/build/compare/1.4.3...1.4.4\"\u003ehttps://github.com/pypa/build/compare/1.4.3...1.4.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.4.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(api): resolve thread-safety races in build API 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/1015\"\u003epypa/build#1015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(builder): validate backend-path entries exist on disk 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/1016\"\u003epypa/build#1016\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings build paths 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/992\"\u003epypa/build#992\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd kind=(step, ) for root messages with * by \u003ca href=\"https://github.com/abitrolly\"\u003e\u003ccode\u003e@​abitrolly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/973\"\u003epypa/build#973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: correct changelog category ordering 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/1017\"\u003epypa/build#1017\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): show full dependency chain 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/1019\"\u003epypa/build#1019\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: fully annotate 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/1020\"\u003epypa/build#1020\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: lazy imports 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/1021\"\u003epypa/build#1021\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: adding more ruff codes 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/1022\"\u003epypa/build#1022\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: improve annotations 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/1023\"\u003epypa/build#1023\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test(coverage): achieve 100% test coverage 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/1018\"\u003epypa/build#1018\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff PT 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/1025\"\u003epypa/build#1025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff PYI 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/1026\"\u003epypa/build#1026\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add ruff SIM/RET 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/1028\"\u003epypa/build#1028\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): strip PYTHONPATH from isolated builds 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/1024\"\u003epypa/build#1024\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: use ruff ALL 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/1029\"\u003epypa/build#1029\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.0 (2026-04-30)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Python 3.9 support - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1036\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\u003eMake \u003ccode\u003e--ignore-installed\u003c/code\u003e opt-in from the API via \u003ccode\u003efresh=True\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1056\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eMiscellaneous\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e:issue:\u003ccode\u003e1033\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e####################\n1.4.4 (2026-04-22)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eFix release pipeline generating \u003ccode\u003eCHANGELOG.rst\u003c/code\u003e entries with inconsistent heading levels, which broke \u003ccode\u003esphinx -W\u003c/code\u003e\nand pinned Read the Docs \u003ccode\u003estable\u003c/code\u003e at 1.4.0 - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e. (:issue:\u003ccode\u003e1031\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRevert :pr:\u003ccode\u003e1039\u003c/code\u003e from build 1.4.3, no longer check direct_url (for now) - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1039\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--ignore-installed\u003c/code\u003e to pip install command to prevent issues with packages already present in the isolated\nbuild environment - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1037\u003c/code\u003e) (:issue:\u003ccode\u003e1040\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePartial revert of :pr:\u003ccode\u003e973\u003c/code\u003e, keeping log messages in one entry, multiple lines. (:issue:\u003ccode\u003e1044\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eMiscellaneous\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e:issue:\u003ccode\u003e1048\u003c/code\u003e, :issue:\u003ccode\u003e1049\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e####################\n1.4.3 (2026-04-10)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\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/615d04cfc52ac3c1592a463f0afe484fee1cc368\"\u003e\u003ccode\u003e615d04c\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/776f702f84787525df62a5473dd13d4e2f45b977\"\u003e\u003ccode\u003e776f702\u003c/code\u003e\u003c/a\u003e fix: api should not ignore installed, only CLI (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1056\"\u003e#1056\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/42da4c4b483563819fabdb8ecf2f6df53ed82123\"\u003e\u003ccode\u003e42da4c4\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1055\"\u003e#1055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/b445cd2e736db5f80cde7d952d620a73cc26bf9d\"\u003e\u003ccode\u003eb445cd2\u003c/code\u003e\u003c/a\u003e chore: tox toml (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1033\"\u003e#1033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/c44c143876042ac6e1212a31684a3adca19beda4\"\u003e\u003ccode\u003ec44c143\u003c/code\u003e\u003c/a\u003e feat: drop 3.9, require 3.10+ (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1036\"\u003e#1036\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/a9bb4560d213069b11c8068159f1de060abec5b7\"\u003e\u003ccode\u003ea9bb456\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 in the actions group...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/cb3351155ce99902580022acb81dc0adb8124d53\"\u003e\u003ccode\u003ecb33511\u003c/code\u003e\u003c/a\u003e ci: try to improve release docs (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1051\"\u003e#1051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/70666a296c2e5bb7451f5a04eef259f6f943d0de\"\u003e\u003ccode\u003e70666a2\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.4.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/653d86586dea8b4e020086a276a15a27ac7bd25d\"\u003e\u003ccode\u003e653d865\u003c/code\u003e\u003c/a\u003e docs: fix issue with changelog generation (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/373b9ee171e2f16353365b1a9a02bc408b96ca73\"\u003e\u003ccode\u003e373b9ee\u003c/code\u003e\u003c/a\u003e tests: keep environment from leaking in Python 3.15 (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1049\"\u003e#1049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.2.2.post1...1.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2025.1.31 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/8571a4ba5205675107f9026d0008ad2d7a2778bf\"\u003e\u003ccode\u003e8571a4b\u003c/code\u003e\u003c/a\u003e 2026.02.25 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/395\"\u003e#395\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6f7de00579d292af565bbb8a947643219794eb6d\"\u003e\u003ccode\u003e6f7de00\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/390\"\u003e#390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a1de59b15105cad768afed4f066b36171134f04a\"\u003e\u003ccode\u003ea1de59b\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.1 to 6.0.2 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/391\"\u003e#391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2025.01.31...2026.04.22\"\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.1 to 3.4.7\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.7\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!WARNING]\u003cbr /\u003e\nmypyc changed the usual binary output for the optimized wheel. Beware, especially if using PyInstaller or alike. See \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/714\"\u003ejawah/charset_normalizer#714\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2\u003eVersion 3.4.4\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.3...3.4.4\"\u003e3.4.4\u003c/a\u003e (2025-10-13)\u003c/h2\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/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.6...3.4.7\"\u003e3.4.7\u003c/a\u003e (2026-04-02)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePre-built optimized version using mypy[c] v1.20.\u003c/li\u003e\n\u003cli\u003eRelax \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;82.1\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrectly remove SIG remnant in utf-7 decoded string. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/718\"\u003e#718\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/716\"\u003e#716\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6\"\u003e3.4.6\u003c/a\u003e (2026-03-15)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFlattened the logic in \u003ccode\u003echarset_normalizer.md\u003c/code\u003e for higher performance. Removed \u003ccode\u003eeligible(..)\u003c/code\u003e and \u003ccode\u003efeed(...)\u003c/code\u003e\nin favor of \u003ccode\u003efeed_info(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound for mypy[c] to 1.20, for our optimized version.\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003eUNICODE_RANGES_COMBINED\u003c/code\u003e using Unicode blocks v17.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEdge case where noise difference between two candidates can be almost insignificant. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCLI \u003ccode\u003e--normalize\u003c/code\u003e writing to wrong path when passing multiple files in. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/702\"\u003e#702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFreethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/616\"\u003e#616\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5\"\u003e3.4.5\u003c/a\u003e (2026-03-06)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate \u003ccode\u003esetuptools\u003c/code\u003e constraint to \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=82\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.19.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd explicit link to lib math in our optimized build. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/692\"\u003e#692\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLogger level not restored correctly for empty byte sequences. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/701\"\u003e#701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTypeError when passing bytearray to from_bytes. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/703\"\u003e#703\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApplied safe micro-optimizations in both our noise detector and language detector.\u003c/li\u003e\n\u003cli\u003eRewrote the \u003ccode\u003equery_yes_no\u003c/code\u003e function (inside CLI) to avoid using ambiguous licensed code.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecd.py\u003c/code\u003e submodule into mypyc optional compilation to reduce further the performance impact.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.4\"\u003e3.4.4\u003c/a\u003e (2025-10-13)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBound \u003ccode\u003esetuptools\u003c/code\u003e to a specific constraint \u003ccode\u003esetuptools\u0026gt;=68,\u0026lt;=81\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRaised upper bound of mypyc for the optional pre-built extension to v1.18.2\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esetuptools-scm\u003c/code\u003e as a build dependency.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\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/jawah/charset_normalizer/commit/0f07891bf516b5d5231f1bd4dd2d8da7d4d09a9a\"\u003e\u003ccode\u003e0f07891\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/729\"\u003e#729\u003c/a\u003e from jawah/release-3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/fdbeb299479e8f4d737e4d227cd0b2bd5d273dc0\"\u003e\u003ccode\u003efdbeb29\u003c/code\u003e\u003c/a\u003e chore: update dev, and ci requirements\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b66f922bfbdbdd9dd46af18a8964d4fb888756d4\"\u003e\u003ccode\u003eb66f922\u003c/code\u003e\u003c/a\u003e chore: add ft classifier\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/f94249d0a2c712f2d03124f4de6b77f5e03aaa96\"\u003e\u003ccode\u003ef94249d\u003c/code\u003e\u003c/a\u003e chore: add test cases for utf_7 recent fix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/95c866f6c984bbd043e7e3ed0628aa4f3f8d5a26\"\u003e\u003ccode\u003e95c866f\u003c/code\u003e\u003c/a\u003e chore: bump version to 3.4.7\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/4f429bb764c7e893f99bb4bceb60856da1baacfb\"\u003e\u003ccode\u003e4f429bb\u003c/code\u003e\u003c/a\u003e chore: bump mypy pre-commit to v1.20\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/b579cd6cab9bd83aa3fc0ca169d4df022bf4888c\"\u003e\u003ccode\u003eb579cd6\u003c/code\u003e\u003c/a\u003e fix: correctly remove SIG remnant in utf-7 decoded string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/58bf944a77cc0883fc46a6ee8edac3549fea5d59\"\u003e\u003ccode\u003e58bf944\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump github/codeql-action from 4.32.4 to 4.35.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/728\"\u003e#728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/44cf8a1b676a2532a8f1694e62e4f4f98f9132e1\"\u003e\u003ccode\u003e44cf8a1\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/726\"\u003e#726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/362bc20073f737b1ba4ca2f68cffb0c4cc024d20\"\u003e\u003ccode\u003e362bc20\u003c/code\u003e\u003c/a\u003e :arrow_up: Bump docker/setup-qemu-action from 3.7.0 to 4.0.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/725\"\u003e#725\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.1...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.1.8 to 8.3.3\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.3.3\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.3 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.3.3/\"\u003ehttps://pypi.org/project/click/8.3.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-3\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-3\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/1026\"\u003e#1026\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1477\"\u003e#1477\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2775\"\u003e#2775\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3298\"\u003e#3298\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3299\"\u003e#3299\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3238\"\u003e#3238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3224\"\u003e#3224\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/654\"\u003e#654\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/824\"\u003e#824\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/843\"\u003e#843\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/951\"\u003e#951\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3235\"\u003e#3235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3151\"\u003e#3151\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3177\"\u003e#3177\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2836\"\u003e#2836\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2837\"\u003e#2837\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3165\"\u003e#3165\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3262\"\u003e#3262\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3280\"\u003e#3280\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3111\"\u003e#3111\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3189\"\u003e#3189\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3250\"\u003e#3250\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2865\"\u003e#2865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2879\"\u003e#2879\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.3.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.3.2 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.3.2/\"\u003ehttps://pypi.org/project/click/8.3.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-3-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-3-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/29\"\u003ehttps://github.com/pallets/click/milestone/29\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.3.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-20\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse :func:\u003ccode\u003eshlex.split\u003c/code\u003e to split pager and editor commands into \u003ccode\u003eargv\u003c/code\u003e\nlists for :class:\u003ccode\u003esubprocess.Popen\u003c/code\u003e, removing \u003ccode\u003eshell=True\u003c/code\u003e.\n:issue:\u003ccode\u003e1026\u003c/code\u003e :pr:\u003ccode\u003e1477\u003c/code\u003e :pr:\u003ccode\u003e2775\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTypeError\u003c/code\u003e when rendering help for an option whose default value is\nan object that doesn't support equality comparison with strings, such as\n\u003ccode\u003esemver.Version\u003c/code\u003e. :issue:\u003ccode\u003e3298\u003c/code\u003e :pr:\u003ccode\u003e3299\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix pager test pollution under parallel execution by using pytest's\n\u003ccode\u003etmp_path\u003c/code\u003e fixture instead of a shared temporary file path. :pr:\u003ccode\u003e3238\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values in a \u003ccode\u003edefault_map\u003c/code\u003e as absent, so they fall\nthrough to the next default source instead of being used as the value.\n:issue:\u003ccode\u003e3224\u003c/code\u003e :pr:\u003ccode\u003e3240\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePatch \u003ccode\u003epdb.Pdb\u003c/code\u003e in \u003ccode\u003eCliRunner\u003c/code\u003e isolation so \u003ccode\u003epdb.set_trace()\u003c/code\u003e,\n\u003ccode\u003ebreakpoint()\u003c/code\u003e, and debuggers subclassing \u003ccode\u003epdb.Pdb\u003c/code\u003e (ipdb, pdbpp) can\ninteract with the real terminal instead of the captured I/O streams.\n:issue:\u003ccode\u003e654\u003c/code\u003e :issue:\u003ccode\u003e824\u003c/code\u003e :issue:\u003ccode\u003e843\u003c/code\u003e :pr:\u003ccode\u003e951\u003c/code\u003e :pr:\u003ccode\u003e3235\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd optional randomized parallel test execution using \u003ccode\u003epytest-randomly\u003c/code\u003e and\n\u003ccode\u003epytest-xdist\u003c/code\u003e to detect test pollution and race conditions. :pr:\u003ccode\u003e3151\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd contributor documentation for running stress tests, randomized\nparallel tests, and Flask smoke tests. :pr:\u003ccode\u003e3151\u003c/code\u003e :pr:\u003ccode\u003e3177\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShow custom \u003ccode\u003eshow_default\u003c/code\u003e string in prompts, matching the existing\nhelp text behavior. :issue:\u003ccode\u003e2836\u003c/code\u003e :pr:\u003ccode\u003e2837\u003c/code\u003e :pr:\u003ccode\u003e3165\u003c/code\u003e :pr:\u003ccode\u003e3262\u003c/code\u003e :pr:\u003ccode\u003e3280\u003c/code\u003e\n:pr:\u003ccode\u003e3328\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edefault=True\u003c/code\u003e with boolean \u003ccode\u003eflag_value\u003c/code\u003e always returning the\n\u003ccode\u003eflag_value\u003c/code\u003e instead of \u003ccode\u003eTrue\u003c/code\u003e. The \u003ccode\u003edefault=True\u003c/code\u003e to \u003ccode\u003eflag_value\u003c/code\u003e\nsubstitution now only applies to non-boolean flags, where \u003ccode\u003eTrue\u003c/code\u003e acts as a\nsentinel meaning \u0026quot;activate this flag by default\u0026quot;. For boolean flags,\n\u003ccode\u003edefault=True\u003c/code\u003e is returned as a literal value. :issue:\u003ccode\u003e3111\u003c/code\u003e :pr:\u003ccode\u003e3239\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMark \u003ccode\u003emake_default_short_help\u003c/code\u003e as private API. :issue:\u003ccode\u003e3189\u003c/code\u003e :pr:\u003ccode\u003e3250\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCliRunner\u003c/code\u003e's redirected streams now expose the original file descriptor\nvia \u003ccode\u003efileno()\u003c/code\u003e, so that \u003ccode\u003efaulthandler\u003c/code\u003e, \u003ccode\u003esubprocess\u003c/code\u003e, and other\nC-level consumers no longer crash with \u003ccode\u003eio.UnsupportedOperation\u003c/code\u003e.\n:issue:\u003ccode\u003e2865\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eChange :class:\u003ccode\u003eParameterSource\u003c/code\u003e to an :class:\u003ccode\u003e~enum.IntEnum\u003c/code\u003e and reorder\nits members from most to least explicit, so values can be compared to\ncheck whether a parameter was explicitly provided. :issue:\u003ccode\u003e2879\u003c/code\u003e :pr:\u003ccode\u003e3248\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.3.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-02\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eflag_value\u003c/code\u003e when \u003ccode\u003eis_flag=False\u003c/code\u003e to allow such options to be\nused without an explicit value. :issue:\u003ccode\u003e3084\u003c/code\u003e :pr:\u003ccode\u003e3152\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eHide \u003ccode\u003eSentinel.UNSET\u003c/code\u003e values as \u003ccode\u003eNone\u003c/code\u003e when using \u003ccode\u003elookup_default()\u003c/code\u003e.\n:issue:\u003ccode\u003e3136\u003c/code\u003e :pr:\u003ccode\u003e3199\u003c/code\u003e :pr:\u003ccode\u003e3202\u003c/code\u003e :pr:\u003ccode\u003e3209\u003c/code\u003e :pr:\u003ccode\u003e3212\u003c/code\u003e :pr:\u003ccode\u003e3224\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/pallets/click/commit/c06d2d0a6aee6bcc50bd8257be2a4a592f4e75d0\"\u003e\u003ccode\u003ec06d2d0\u003c/code\u003e\u003c/a\u003e Release 8.3.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/f1f191ecd2c790b161187c78e7c88440e9524e5c\"\u003e\u003ccode\u003ef1f191e\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3343\"\u003e#3343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bb59ba0fd279ca085d1113f0499b6a602ca31081\"\u003e\u003ccode\u003ebb59ba0\u003c/code\u003e\u003c/a\u003e Apply format guidelines to commits since latest 8.3.2 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/4a352253c9ff013e36d11e4a6820d36d00ff2cd4\"\u003e\u003ccode\u003e4a35225\u003c/code\u003e\u003c/a\u003e Reduce blast-radius of \u003ccode\u003eUNSET\u003c/code\u003e in \u003ccode\u003edefault_map\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3240\"\u003e#3240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c07bb936de43fd303f9cfbefe248ab23fd2199c8\"\u003e\u003ccode\u003ec07bb93\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into unset-in-default-map\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/c7e1ba8448cbcb2cdd9c1c7f4a592e863dcc3995\"\u003e\u003ccode\u003ec7e1ba8\u003c/code\u003e\u003c/a\u003e Reorder \u003ccode\u003eParameterSource\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3248\"\u003e#3248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/76552ff1e8c85837f911fc34037e702ae4327eda\"\u003e\u003ccode\u003e76552ff\u003c/code\u003e\u003c/a\u003e Show default string in prompt (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3328\"\u003e#3328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/ac5cec5fe54e5a691e7bac17f441ce9498e0744c\"\u003e\u003ccode\u003eac5cec5\u003c/code\u003e\u003c/a\u003e Reorder ParameterSource from most to least explicit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c452e00e6772931b7071d9316b82b77e5b8f280\"\u003e\u003ccode\u003e8c452e0\u003c/code\u003e\u003c/a\u003e Merge branch 'stable' into show-default-string-in-prompt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8c95c73bd5ef89eac638f85f1904a104ba4b1a32\"\u003e\u003ccode\u003e8c95c73\u003c/code\u003e\u003c/a\u003e Reconcile default value passing and default activation (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3239\"\u003e#3239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.1.8...8.3.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cryptography` from 46.0.7 to 48.0.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst\"\u003ecryptography's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e48.0.0 - 2026-05-04\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **BACKWARDS INCOMPATIBLE:** Support for Python 3.8 has been removed.\n  ``cryptography`` now requires Python 3.9 or later.\n* **BACKWARDS INCOMPATIBLE:** Loading an X.509 CRL whose inner\n  ``TBSCertList.signature`` algorithm does not match the outer\n  ``signatureAlgorithm`` now raises ``ValueError``. Previously, such CRLs\n  were parsed successfully and only rejected during signature validation.\n* Added support for :doc:`/hazmat/primitives/asymmetric/mlkem` and\n  :doc:`/hazmat/primitives/asymmetric/mldsa` when using OpenSSL 3.5.0 or\n  later, in addition to the existing AWS-LC and BoringSSL support. This means\n  post-quantum algorithms are now available to users of our wheels.\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eNote:\u003c/strong\u003e Going forward, we do not guarantee that all functionality\u003cbr /\u003e\nin \u003ccode\u003ecryptography\u003c/code\u003e will be available when building against\u003cbr /\u003e\nOpenSSL. See :doc:\u003ccode\u003e/statements/state-of-openssl\u003c/code\u003e for more information.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v47-0-0:\u003c/p\u003e\n\u003cp\u003e47.0.0 - 2026-04-24\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.8 is deprecated and will be removed in the next\n\u003ccode\u003ecryptography\u003c/code\u003e release.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Support for binary elliptic curves\n(\u003ccode\u003eSECT*\u003c/code\u003e classes) has been removed. These curves are rarely used and\nhave additional security considerations that make them undesirable.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Support for OpenSSL 1.1.x has been removed.\nOpenSSL 3.0.0 or later is now required. LibreSSL, BoringSSL, and AWS-LC\ncontinue to be supported.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Dropped support for LibreSSL \u0026lt; 4.1.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e Loading keys with unsupported algorithms or\nkeys with unsupported explicit curve encodings now raises\n:class:\u003ccode\u003e~cryptography.exceptions.UnsupportedAlgorithm\u003c/code\u003e instead of\n\u003ccode\u003eValueError\u003c/code\u003e. This change affects\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_pem_private_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_der_private_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_pem_public_key\u003c/code\u003e,\n:func:\u003ccode\u003e~cryptography.hazmat.primitives.serialization.load_der_public_key\u003c/code\u003e,\nand :meth:\u003ccode\u003e~cryptography.x509.Certificate.public_key\u003c/code\u003e when called on\ncertificates with unsupported public key algorithms.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBACKWARDS INCOMPATIBLE:\u003c/strong\u003e When parsing elliptic curve private keys, we now\nreject keys that incorrectly encode a private key of the wrong length because\nsuch keys are impossible to process in a constant-time manner. We do not\nbelieve keys with this problem are in wide use, however we may revert this\nchange based on the feedback we receive.\u003c/li\u003e\n\u003cli\u003eDeprecated passing 64-bit (8-byte) and 128-bit (16-byte) keys to\n:class:\u003ccode\u003e~cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES\u003c/code\u003e. In a\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/cryptography/commit/8e03e30e3aae01632a697e903e3593c924f0139d\"\u003e\u003ccode\u003e8e03e30\u003c/code\u003e\u003c/a\u003e bump for 48.0.0 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14796\"\u003e#14796\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/295e0d254ef31ab864730aa41312ec355416ee71\"\u003e\u003ccode\u003e295e0d2\u003c/code\u003e\u003c/a\u003e Add AGENTS.md with CLAUDE.md symlink (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14794\"\u003e#14794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/104a2de19e268a433e6da92be9cb872dcf0003c8\"\u003e\u003ccode\u003e104a2de\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14793\"\u003e#14793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/67ec1e51988195e17993d2edef5258b27509b926\"\u003e\u003ccode\u003e67ec1e5\u003c/code\u003e\u003c/a\u003e call check_length early on AesSiv::encrypt (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14792\"\u003e#14792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/b2da57a0d9e4bfd2b95364299091a18f74127b26\"\u003e\u003ccode\u003eb2da57a\u003c/code\u003e\u003c/a\u003e changelog for mldsa/mlkem for openssl (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14791\"\u003e#14791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/3cf44adee25c368d4a136e072fa9f80465d91eb0\"\u003e\u003ccode\u003e3cf44ad\u003c/code\u003e\u003c/a\u003e ML-KEM OpenSSL support (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14781\"\u003e#14781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2e31639666766f846fbab2c605879db0fa64fe83\"\u003e\u003ccode\u003e2e31639\u003c/code\u003e\u003c/a\u003e ML-DSA OpenSSL support (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14773\"\u003e#14773\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/5affe5a286a986fdf512c4a5cb280d28a96c10e3\"\u003e\u003ccode\u003e5affe5a\u003c/code\u003e\u003c/a\u003e fix rust nightly clippy (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14790\"\u003e#14790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/2e73ca448eaf64b6f0d4ffbb794cf96170cef5ec\"\u003e\u003ccode\u003e2e73ca4\u003c/code\u003e\u003c/a\u003e bump rust-openssl dep and update EcPoint::mul_generator to mul_generator2 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/82ebd3b9f49d49ad5fd8b4b1f1dd02487b6e1466\"\u003e\u003ccode\u003e82ebd3b\u003c/code\u003e\u003c/a\u003e Bump BoringSSL, OpenSSL, AWS-LC in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14785\"\u003e#14785\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.7...48.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `dnspython` from 2.7.0 to 2.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/rthalley/dnspython/releases\"\u003ednspython's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ednspython 2.8.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://dnspython.readthedocs.io/en/stable/whatsnew.html\"\u003eWhat's New\u003c/a\u003e for details.\u003c/p\u003e\n\u003cp\u003eThe minimum supported version of Python is 3.10.\u003c/p\u003e\n\u003cp\u003eMy thanks to the many people who have contributed to this release. Also thanks to my co-maintainers: Tomáš Křížek, Petr Špaček, and Brian Wellington.\u003c/p\u003e\n\u003cp\u003eThis release was published to PyPI using Trusted Publishing.\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/rthalley/dnspython/blob/main/doc/whatsnew.rst\"\u003ednspython's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.8.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003edns/btreezone.py provides another zone versioned implementation built on top of a\nB-tree.  It maintains DNSSEC sort order, labels nodes as delegation points or glue,\nand can find the \u0026quot;bounds\u0026quot; of a name (useful for DNSSEC responses).\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003edns/query.py now provides make_socket(), make_ssl_socket(), and make_ssl_context()\nto make using persistent connections with the query code easier.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003edns/win32util.py now supports explicitly setting the configuration method used to get\nsystem dns info, using the set_config_method() function.   There is a new configuration\nmethod that uses the Win32 API, which can be set using\nset_config_method(ConfigMethod.Win32).  We are considering making the Win32 API\nthe default in the future as we believe it to be the most accurate.  Any feedback on\nit compared to the other methods is welcome.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe DSYNC record is now supported.  This type is still in draft stage at the IETF\nand is subject to change.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe minimum supported Python version is now 3.10.\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/rthalley/dnspython/commit/77fd94cd9716faf23e0a6e333f6568fc24284402\"\u003e\u003ccode\u003e77fd94c\u003c/code\u003e\u003c/a\u003e 2.8.0 versioning\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/884f38345a8152342fe8ab5da8db9aab654051ba\"\u003e\u003ccode\u003e884f383\u003c/code\u003e\u003c/a\u003e update 2.8 branch workflows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/1938fe331f97376bf91c028fbfb8c7588c1b84f4\"\u003e\u003ccode\u003e1938fe3\u003c/code\u003e\u003c/a\u003e update 2.8 branch workflows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/a35d6925efe20744e8cf7545d19d03ba06e7ab6f\"\u003e\u003ccode\u003ea35d692\u003c/code\u003e\u003c/a\u003e 2.8.0rc1 prep\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/c862baaf0d0aa36d2e7003dfe226cd6ad4d827c4\"\u003e\u003ccode\u003ec862baa\u003c/code\u003e\u003c/a\u003e 2.8.0rc1 prep\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/0945d5923d58048c17325975f70f0738c87570b4\"\u003e\u003ccode\u003e0945d59\u003c/code\u003e\u003c/a\u003e more lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/8fa6766d2f7a2431372fc912fb334e752290ebf2\"\u003e\u003ccode\u003e8fa6766\u003c/code\u003e\u003c/a\u003e lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/641633503ee6b07bf382594ac04707072b90de18\"\u003e\u003ccode\u003e6416335\u003c/code\u003e\u003c/a\u003e Type syntax (\u003ca href=\"https://redirect.github.com/rthalley/dnspython/issues/1218\"\u003e#1218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/a4591447b7d6e38479bcddb14de3b69f314e7009\"\u003e\u003ccode\u003ea459144\u003c/code\u003e\u003c/a\u003e lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rthalley/dnspython/commit/a0d5f172e89f30709b47b59fb0919d8cf137f611\"\u003e\u003ccode\u003ea0d5f17\u003c/code\u003e\u003c/a\u003e fix the all entries\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/rthalley/dnspython/compare/v2.7.0...v2.8.0\"\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 `exceptiongroup` from 1.2.2 to 1.3.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/exceptiongroup/releases\"\u003eexceptiongroup's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.3.1\u003c...\n\n_Description has been truncated_","html_url":"https://github.com/eclipse-tractusx/industry-core-hub/pull/581","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/eclipse-tractusx%2Findustry-core-hub/issues/581","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/581/packages"}}]}